■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

VisualC++相談室 3
1 名前:いさましいチビの女 :2001/06/22(金) 14:00
VisualC++関連の話題を扱うスレッドです。

旧スレッド
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730&ls=50

2 名前:デフォルトの名無しさん :2001/06/22(金) 23:43
ダイアログボックスに背景画像を張りたいんですが。
ピクチャーを置いただけではボタンも隠れてしまいます。

どうしたら良いですか?

3 名前:デフォルトの名無しさん :2001/06/22(金) 23:55
ピクチャーの上にボタン置けば?

4 名前:デフォルトの名無しさん :2001/06/22(金) 23:58
>>3
ダイアログエディタでボタンが上に見えるように置いても
実行すると隠れてしまうんです・・・

5 名前:デフォルトの名無しさん :2001/06/23(土) 00:00
GetDCで画面のデバコン取って書け。

6 名前:デフォルトの名無しさん :2001/06/23(土) 00:04
>>2
ダイアログボックスをサブクラス化して、WM_PAINT乗っ取れ

7 名前:デフォルトの名無しさん :2001/06/23(土) 00:19
>>6
が正解。(というか管理が楽)
付け足すなら、ダイアログボックスのフラグに子窓をクリップするか
どうかってのがあるから、それ入れとかないとチラつく。

8 名前:デフォルトの名無しさん :2001/06/23(土) 01:27
プログラミング及びVC++初心者ですが、
コンピュータの理解を深め、プログラミングも上達するための
初心者向けの課題は何かないでしょうか?

9 名前:デフォルトの名無しさん :2001/06/23(土) 01:38
コンピュータの理解を深めたかったらコンパイラを作ると良いと思うよ。

でも、そんなのいきなりは無理だよね。

最初は自分の作りたい物作ったら?

私なんかはBCBで、某エロゲー会社のセーブデータ保存ディレクトリ変更ツール作ってたりとかしたけど。といっても、内容はレジストリのエントリの値を変えるだけ。

それでも改造して遊んでくうちにプログラムのコツとかもわかっていくよ。

10 名前:デフォルトの名無しさん :2001/06/23(土) 01:45
ワンボードマイコン買ってこい。
スイッチを押すとLEDが点灯するプログラム書くだけでも
コンピュータの理解は深まるぞ。

11 名前:8 :2001/06/23(土) 01:46
>>9
8です。
書き込みありがとうございます。
プログラミングは面白いんですけど、コンピュータに関する知識が
なさ過ぎて、いまいち何をしたらいいのか分からず
目的がない状態だったもので。

コンパイラですか?面白そうですね。あとエミュレータなんかも
自分で作ってみたらきっと面白いんだろうと思います。
参考としておすすめの本などありましたら、おしえて下さい。

12 名前:8 :2001/06/23(土) 01:49
>>10
8です。

>ワンボードマイコン買ってこい。
ワンボードマイコンってどういうものなのでしょうか?
なんか単純な作業でもささやかな喜びを感じれそうな作業はすきです。

13 名前:デフォルトの名無しさん :2001/06/23(土) 07:42
>>9
そう!エロこそがプログラム上達の最強の原動力ナリ

14 名前:デフォルトの名無しさん :2001/06/23(土) 11:24
>>6 >>7
さんきゅ〜、うまくいきました。
これしかないか、とは思ってたけど(^^;;

15 名前:デフォルトの名無しさん :2001/06/24(日) 02:47
GLU ってなんだよ。あんな説明じゃわかんねーよ。
っていうか座標決め撃ちどかーんってできないの?
それともプログラムの中でCreateするときに指定してあげるの?
それともそれとも付属のリソースエディタは使っちゃダメなの?

16 名前:デフォルトの名無しさん :2001/06/24(日) 02:53
GLU -> DLU だった・・・・・・・・・ハズッ!!

17 名前:デフォルトの名無しさん :2001/06/25(月) 21:17
DirectXを使わないWINDOW上のゲームを作ろうと重い、メッセージループの中に描画や移動を入れました。しかしマウスが動くたびに表示がちらつきます。
どうすればよいのでしょうか。あと、メッセージループのなかに描画等を入れてよいのでしょうか。

while(GetMessage(-----------)){
/*ここに描画や移動を入れる*/


TranslateMessage(--------)
DispatchMessage(---------)
}

18 名前:デフォルトの名無しさん :2001/06/25(月) 21:40
>>17
ダメです。
GDIに迎合するなら描画はWM_PAINTでやって下さい。
一定周期ごとに再描画が必要ならWM_TIMERかなんかで
一定周期ごとにInvalidateしてください。

19 名前:デフォルトの名無しさん :2001/06/25(月) 21:50
なるほど。そうやるんですか。ありがとうございました。

20 名前:ツッコミが無いので :2001/06/27(水) 16:42
>9,10
>コンパイラ 〜
>ワンボードマイコン 〜


・・ちょっと待て

21 名前:デフォルトの名無しさん :2001/06/27(水) 17:14
>>20
いや、とりあえずまちがっちゃいないだろ(w

22 名前::2001/06/27(水) 18:19
>>20
「ハード面での知識を得たい」というのと
「ソフト面(例えばアルゴリズム)の知識を得たい」というのとでは
適切な教材は違ってくるわな・・・

全般的な知識だったら、情報処理試験を合格できるような受験勉強をすればいいし。

23 名前:デフォルトの名無しさん :2001/06/27(水) 18:51
ageとく

24 名前:厨房 :2001/06/27(水) 23:30
vcや他のソフトにもあるけど、ウィザード形式のダイアログボックス
はコンポーネント等があるのでしょうか?
それとも、ダイアログのクラスにシコシコとコーディングでしょうか?

25 名前:デフォルトの名無しさん :2001/06/28(木) 03:23
>>24
プロパティーシート

26 名前:デフォルトの名無しさん :2001/06/28(木) 03:24
>>25
プロパティシートだ、鬱。

27 名前:デフォルトの名無しさん :2001/06/28(木) 03:27
0000

28 名前:デフォルトの名無しさん :2001/06/28(木) 07:58
練習でフィールドをキャラクターが歩くようなものを作ったのですが、
方向キーの受付がかなり不自然になってしまいました。
WM_KEYDOWNを捕まえているのですが、キーが押されているかどうかを
もっとスムーズに知る方法を教えてください。

29 名前::2001/06/28(木) 12:03
>>28
SHORT GetAsyncKeyState(int vKey);
引数 vKeyで指定されたキーが、
「今現在」押下されているかどうかを判定する。

Asyncというのは非同期(Asynchronous)の略で、
「メッセージキューの内容と非同期である」ということ。

戻り値は16ビットの整数値で、
最上位ビット(&0x8000)が、1の時が押下状態、0の時が非押下状態。
最下位ビット(&0x0001)が、1の時がトグル状態、0の時が非トグル状態

30 名前:デフォルトの名無しさん :2001/06/28(木) 12:40
エディットコントロールにSendMessageでWM_CHARを送るときに、
ひらがなや漢字などの2バイトの文字がうまく送れません。
なにか方法があるのでしょうか。おしえてください。

31 名前:デフォルトの名無しさん :2001/06/28(木) 12:50
>>30
WM_IME_CHAR使え

32 名前:30 :2001/06/28(木) 14:34
>>31
はい、使ってみます。
アリガトウございました。

33 名前:28 :2001/06/29(金) 11:00
>>29
ありがとうございます。ところでトグル状態とは何でしょう?

34 名前:>33 :2001/06/29(金) 14:11
NumLock、CapsLockとかのロック状態

35 名前:デフォルトの名無しさん :2001/06/29(金) 15:36
自分でクリエイトしたボタンのキャプションを改行したいのですが、
ボタンステイタスのどのパラメータを使えば複数行になるんでしょうか?
標準のボタンだとプロパティのスタイルタブにある複数行をチェックすれば済むのですが・・・
BS_MULTILINEでは改行されないんですけど・・・なんで?

36 名前:デフォルトの名無しさん :2001/06/29(金) 15:58
>35
BS_MULTILINEでされるハズ
多分、天候のせいでしょう。

37 名前:デフォルトの名無しさん :2001/06/29(金) 16:03
>>35
\r\nで改行・・・・だよね?

38 名前:デフォルトの名無しさん :2001/06/29(金) 16:31
>>37
もちろん、でもボタンのキャプションにそのまま\r\nと出ますけど・・・

39 名前:28 :2001/06/29(金) 16:42
すいません、また質問させてください。
SHORT GetAsyncKeyState(int vKey);
でいろいろ試してみたのですがvKeyで指定したキーをずっと押し続けいても
常に押下状態と返すわけではなく最上位ビットが0だったり1だったりするのですが
こんなもんでしょうか?

40 名前:デフォルトの名無しさん :2001/06/29(金) 17:07
>>35です。
作りたいのはオペレーターが自分で機能付きのボタンを好きなところに貼れるアプリなんです。
テキストにボタン名、機能(あらかじめ決まってる5種類位、_CMD_Add_とか書く)、ボタンの位置、大きさ
を書くと
起動時にそのテキストを読んでユーザーのお好みでボタンを配置出来るというものなんです。
int buttonNumber;
CRect buttonRect;
CString buttonName;
UserButton[buttonNumber]->Create(buttonName, BS_OWNERDRAW | BS_PUSHBUTTON | BS_MULTILINE | WS_VISIBLE, buttonRect, this, __USER_BUTTON_ID__+buttonNumber);
でやっても駄目なんですけど・・・

41 名前:デフォルトの名無しさん :2001/06/29(金) 17:25
>40
オーナードローでもテキストって出んの?

42 名前:デフォルトの名無しさん :2001/06/29(金) 18:41
コンパイラ エラー C2896
'function1' : 関数テンプレート 'function2' を関数の引数として使用できません。

これってANSIの仕様ですか?
ごっついむかついちゃった。どうしよう・・・

43 名前:39 :2001/06/30(土) 09:46
if文で}の位置が違っていた。
鬱になった。

44 名前:デフォルトの名無しさん :2001/07/02(月) 17:53
あげてみっかな。

45 名前:デフォルトの名無しさん :2001/07/03(火) 02:42
メニューの「最近使ったファイル」に追加されるファイル名をクリックした時の処理は
どのようになっているのでしょう?
例えば、ここでクリックしたファイルのファイルパスをダイアログボックスで
表示するようにしたい場合は、どのようにしたらよいでしょうか?

もしご存知の方がいましたら、よろしくおねがいします。m(_ _)m

46 名前:デフォルトの名無しさん :2001/07/03(火) 07:47
>>45
CHogeDoc::OnOpenDocument() じゃだめ?
もっと前で捕まえたいなら、OnOpenDocumentにブレークポイント入れて、
そこでコールスタックを見て、適当な場所を探す。

47 名前:eij :2001/07/03(火) 08:43
お世話になります。WIN98 VC6 MFC で組んでおります。

仮想画面にビットマップを転送しておいて、(再)描画時
に仮想画面から通常画面に転送するといったことを
しております。
初期描画:PatBlt→仮想画面、BitBlt→仮想画面、仮想画面→BitBlt
再描画時:仮想画面→BitBlt
としてます。
ここで、仮想画面に対して"PatBlt"を使った直後、残メモリが
ちょうど画像の サイズ分減少します。
"PatBlt"をコメントで抜いた場合は 仮想画面に対する"BitBlt"の
直後に同じように残メモリが減少します。つまり仮想画面に何か
データを転送した時点で起こります。 画像のサイズには関係なく
起こる症状です。 何が原因でこのような症状になるのかご教示
いただければありがたいです。

なお、残メモリは、"GlobalMemoryStatus"api関数で調べております。
以上よろしくお願いいたします。

48 名前:デフォルトの名無しさん :2001/07/03(火) 11:55
>>47
どっちのスレで答えて欲しいのかも書いといてください。

49 名前:eij :2001/07/03(火) 13:17
>>48 スマソ。以降こっっちで。

50 名前:デフォルトの名無しさん :2001/07/03(火) 14:29
BitBlt とかのデータってメモリ上に残るんじゃないの?FIFOだかLRUだかの条件で
別処理実行してったり、終了時には開放されると思うが。

51 名前:  :2001/07/03(火) 15:59
プログラムで、FDDを認識するのはどうすればいいのでしょうか?
MOやメディアリーダーと区別したいのですが・・・。

52 名前:デフォルトの名無しさん :2001/07/03(火) 16:08
教えてくださいませ。

CView上に、CButtonをクリエイトしたんだけど、
CViewがBitBltするとボタンが消えちゃいます。
マウスポインタをボタン上に持っていくと突然現れます。

どうすれば、ずーっとボタンを出ているように
することができるのでしょうか?

53 名前:デフォルトの名無しさん :2001/07/03(火) 16:41
>>52
>CViewがBitBlt
CViewにBitBlt ?
GetDC()がクリッピングをしないからです。ボタン位置のリージョンを作成し
反転してDCにSelectObject する。
こんなめんどくさいことは通常しません。
描画タイミングをペイントメッセージ時(OnDraw)にするか、ボタンに対して
Invalidate-Updateをかけてやりましょう。

54 名前:追記 :2001/07/03(火) 16:48
ペイントメッセージ時で起こっているなら、ボタンの親がCViewになってません。
それでだめならCViewのスタイルにWS_CLIPCHILDREN を追加しましょう
それでだめならCFormView を使いましょう。

55 名前:eij :2001/07/03(火) 17:11
>>50 このとき減ったメモリが、仮想画面に割り当てたビットマップを
"DeleteObject"することによって解放されることを確認しました。
DeleteDC->DeleteObjectの順番なら成功(解放)するがその反対なら
失敗(リーク)する。こんなことってある?
今、24bit色のディスプレイ設定で、8bit色5MBの画像を表示する場合、
CreateDIBitmapで15MB、仮想画面で15MBの、都合30MB消費する
のですが、こんな設計は逝ってよしでしょうか?

56 名前:デフォルトの名無しさん :2001/07/03(火) 21:06
>>55
DC に Select されている BITMAP (等) は DeleteObject できません。
ドキュメント読んだ?

57 名前:デフォルトの名無しさん :2001/07/03(火) 21:09
>ドキュメント読んだ?

↑これ余計でした。心が荒んでいたもので。
ごめんなさい。

58 名前:デフォルトの名無しさん :2001/07/03(火) 21:11
>>55
やっとなんとなく状況理解
SelectObject(hdcMem, oldbm); はやりましたか?

59 名前:58 :2001/07/03(火) 21:13
ってそれじゃわかるわけないか、こんな感じの順番
テキトーにアレンジして

HDC hdcMem = CreateCompatibleDC(_draw_handle) ;
HBITMAP hbm = CreateBitmap(tw, th, 1, 1, NULL) ;
HBITMAP oldbm = (HBITMAP)SelectObject(hdcMem, hbm) ;
BitBlt(hdcMem, 0, 0, tw, th, xxxMem, 0, 0, SRCCOPY) ;
SelectObject(hdcMem, oldbm) ;
DeleteObject(hbm) ;
DeleteDC(hdcMem) ;

60 名前:58 :2001/07/03(火) 21:15
他にも答えてる人が居たのね、ま、ワカってることならやりすごして
ちょうだい、じゃ

61 名前:デフォルトの名無しさん :2001/07/03(火) 21:20
>>55
言葉で説明するよりも該当部分のソース見せたほうがアドバイスもらいやすいと思うけど (w

62 名前:eiji :2001/07/03(火) 21:40
>>56-60 Selectで、DCからBMPを切り離すことはしてると
思います。今家なので確認は出来ないのですが。
>>61 そうですね、かなり混乱してて、デバッグ用のコードを
埋め込んだりしてソースがかなり汚くなっているので、整理して
簡潔にアップしたいと思います。ちなみに >>55 の最後で書いてる
このような設計自体に関してはどうでしょうか?逝ってよし?

皆さん色々ありがとう!こんなにレスつくとは思っていなかったので
励みになります。ではまた明日来ます。

63 名前:デフォルトの名無しさん :2001/07/03(火) 22:14
>>このような設計自体に関してはどうでしょうか?逝ってよし?

ソースがないとその判断もできないって

64 名前:デフォルトの名無しさん :2001/07/03(火) 23:23
>>62
直した方が良いけど、メモリリークだけなら終了時にゃ解放されるんで
連続して際限なくリークし続けるんでなければ、ごまかして納品されてる
ものは結構あんでしょ。今びなら30Mならまあ別に。
リソースリークでハンドル減ってんだとあんまし良くないと思う。

65 名前:デフォルトの名無しさん :2001/07/03(火) 23:35
逆にシステムそのもののメモリ使用量で、切り詰めようもないのに、
メモリ食う食う、言ってウルサイ客もいるね。説得するのがタイヘン

66 名前:eiji :2001/07/04(水) 14:53
ちょっと取り込んでるので後日来ます。
なお、現状では
メイン画面:CreateDIBitmap、オフ画面:CreateCompatibleBitmap
としてるんですが、メモリの消費がディスプレイ設定にかなり依存しております。
これはどのように思われます?

67 名前::2001/07/04(水) 15:30
メモリの消費量がどうかと訊ねられても・・・。
全部を表示するためには、
どうやったってメモリ上においておかなくちゃいけないし・・・。

表示領域が一部分だけなのなら、バンディングでもしたら?
としか答えようがない。
昔だったら、GlobalNotifyでも使ってスワップアウトすれば・・・
とでも答えられたのだけど・・・

68 名前:eiji :2001/07/04(水) 15:56
そうですな。要はスピードをとるかスペースをとるかバランスをとるかって
ことね。まぁ、用途に応じてってことですか。今スピードよかスペースが問題
になってきてるので、仮想画面なしの、DIB生成(CreateDIBSectionあたり)と
しますわ。

69 名前:デフォルトの名無しさん :2001/07/04(水) 16:33
すみません、質問です。
プリコンパイル済みヘッダを使用しているプロジェクトと、
使用してないプロジェクト(VC++以外等)で変更無しで両用出来るように、

#include "stdafx.h"

をうまくマクロで制御出来ないでしょうか?
以前、どこかで見た気がして、いろいろ検索したのですが発見できませんでした。
ご存知の方いましたら、お教えください。

70 名前:VC++ :2001/07/04(水) 16:35
>>2
遅レスですが・・・・・
ボタンのタブオーダーをピクチャーの後にして
(たとえば、ピクチャーが7ならボタンが8)
ボタンの上にピクチャーを置けば良いかと・・・・・・
実行前はボタンは隠れてますが実行後は表示されます。

71 名前:デフォルトの名無しさん :2001/07/04(水) 16:54
VCそのものの質問なんですが、デュアルCPUとかにしたとして
VCは何も設定しなくても並列コンパイルなるものをやってくれる
んでしょうか?なんか特殊なやり方が必要なんでしょうか。
StandardEditionだと出来ないとかだったらイヤだな(TwT
知ってる方教えてくだちい。

72 名前:デフォルトの名無しさん :2001/07/04(水) 18:10
>>71
スレッド分ければOSが勝手にCPUリソース使ってくれるはず。
ただ、9x系はデュアルCPUサポートしてないんじゃなかったかな。
NT系じゃないとダメだったはず。

73 名前:デフォルトの名無しさん :2001/07/04(水) 18:25
>>52
CViewのウィンドウスタイルを変更して
を子ウィンドウをクリップするという手もある

74 名前:デフォルトの名無しさん :2001/07/04(水) 18:26
>>70
あ〜〜!そっか。
タブオーダーって表示の優先順位じゃなくて表示の順番になるのか・・。
ダイアログエディタだとタブオーダーの逆順に表示されるのに・・・。
サンクス!やってみます

75 名前::2001/07/04(水) 18:38
>>71
汎用機じゃないから、別段CPUの数は意識しなくてもいい。
昔のNT4.0だと、Workstationで2CPU、Serverで4CPUまでOSが対応してくれる。
マルチスレッド処理を記述すれば、
優先順位に応じて空いているCPUを自動的にスレッドに割り振りしてくれるよ。
# あんまり賢いスケジューリングじゃないけど。

但し、マルチCPUの場合、
本当に複数のスレッドが同時に動くから、排他制御を
厳密にチェック・テストする必要があるね。

76 名前:ななしさん :2001/07/04(水) 18:56
スパコンでないからそもそもデータフロー解析する
並列計算はできない。
アプリケーションが複数のスレッドを使えるだけ。

77 名前:71 :2001/07/04(水) 19:31
たくさんレスありがとうございます!
えーと・・・・・
VC(てかコンパイラ)そのものがマルチスレッドアプリケーションってことで
いいんでしょうか。まだ少しよくわかんない・・・・・
自分でコード書いてビルドしたアプリがマルチスレッドで動作するかどうか
ではなくて、
VCのコンパイラがマルチスレッドでコードを高速にコンパイル(並列コンパイル)
してくれるかどうかが知りたかったんですが。
対応マザーにCPU2つブッ差せばVCは嫌でも並列コンパイルやってくれる、
ってことでいいんでせうか?(w
バカですんまそん。

78 名前:デフォルトの名無しさん :2001/07/04(水) 20:11
翻訳単位が複数ある場合は、翻訳単位ごとにスレッド分けてコンパイルすれば簡単そうだが、
1つの翻訳単位をコンパイルした場合はかなり高度なことやらなくちゃいけなそうなきがするなぁ。

普通に使う場合、コンパイル作業の7割くらいは1翻訳単位のみビルドだと思うから、
結構この差は大きそう。

79 名前:デフォルトの名無しさん :2001/07/04(水) 20:20
よくわからんけど、コンパイル中にプロセスモニタとかで
スレッド数を見たら?

gmake つかえば make -g あたりで並列コンパイルじゃなかったっけ。
自分でmakefile準備しようぜ

80 名前:デフォルトの名無しさん :2001/07/04(水) 20:21
どーでもいいけど、非同期プログラミングするなら
必ず並列環境で開発しようね。うん。

よけいなお世話?

81 名前:デフォルトの名無しさん :2001/07/04(水) 20:22
並列コンパイルとマルチスレッドアプリ作成の話は別モンだと思う
書き込んだアトでも勘違いしたと思ったら、訂正した方が良いと思うが
アンマリひきずらんで

82 名前:デフォルトの名無しさん :2001/07/04(水) 20:28
”も”って人か...

83 名前::2001/07/04(水) 21:25
>>
いや、鳥

84 名前::2001/07/04(水) 21:33
コンパイル時間を短縮したかったのか・・・

VC++にそんな器用な芸当が出来るのか?
プリコンパイルドヘッダとか、インクリメンタルコンパイルくらいしか
見当たらない。

85 名前:デフォルトの名無しさん :2001/07/04(水) 21:34
おい日本語が大丈夫か

86 名前:デフォルトの名無しさん :2001/07/04(水) 21:42
マルチCPU使ったってコンパイル速くならんよ。
でもコンパイル中でもWEBみてMSDNみて、いろいろできるね。
快適に。

ああ、でも、恩恵にあやかりたかったらHDDは分けとこうね。
パーティションじゃないよ。物理的にね。

87 名前:デフォルトの名無しさん :2001/07/04(水) 22:08
VC2個立ち上げて同時にコンパイルすれば速度の恩恵が受けられる?
ReleaseとDebugを同時にリビルドするとか。
言ってる自分が馬鹿馬鹿しいが。

88 名前:デフォルトの名無しさん :2001/07/04(水) 22:14
だから
ファイルの書き込み速度以上に速くならないって。

89 名前:71 :2001/07/04(水) 22:19
うわ、出来るもんだとばかり思ってたっす(涙
いやはや、たくさんのレスありがとうございます。
makefileのことちょっと調べてみます。
どもです!

90 名前:デフォルトの名無しさん :2001/07/04(水) 22:26
GNU make
win屋はwinが当たり前だと思ってることがある
俺もVC屋だけどホンマに的外れ多いよ

91 名前:デフォルトの名無しさん :2001/07/04(水) 22:41
マルチスレッド技術は、基本的に、アプリケーションやOSの応答性を高める
ための技術だと思ってね。
コンパイラ向きじゃないと思うのよ。うん。

IDEの方はマルチスレッドの恩恵を受けてるけど、cl.exeとそいつが呼び出す
下のプログラムはマルチスレッド対応してないとおもうよ。
恩恵があまりないからね。

で、gmakeで並列コンパイルしたとしてもメモリをたくさん食うだけで、
ファイル読み込み時間の合計はかわらんし、書き込み速度もかわらん。
たぶん君が使ってるCPU内のキャッシュメモリもあふれてかえって
遅くなってる可能性もあるよ。

92 名前:デフォルトの名無しさん :2001/07/04(水) 23:40
〜だって

93 名前:デフォルトの名無しさん :2001/07/05(木) 11:29
今、マウスカーソルの動作を制御するプログラムを作っていて、
ダイアログ上のボタンを自動的に押したりとかさせたいんですが、
その動作をどうやって実現させるかがわからなくて困ってます。
何か良い方法は無いでしょうか?

94 名前:デフォルトの名無しさん :2001/07/05(木) 12:29
>>90
VCスレだから許せ。

95 名前:デフォルトの名無しさん :2001/07/05(木) 12:34
>>93
たとえば、LBUTTONDOWNを送って、その後、LBUTTONUPを送れば、
「マウスでクリックした」という偽造メッセージを送れる。

ただし、送り先は対象となるボタンのウィンドウハンドルに送らないとダメみたい。

ちなみに、KEYDOWN, KEYUPはダメだった。
こっちの方法知ってる人いたら教えて欲しいです。

96 名前:デフォルトの名無しさん :2001/07/05(木) 12:40
昔書いたソースからコピペ、もう忘れたんで詳しいことは自分で調べてね
mouse_event(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,65536*x/GetSystemMetrics(SM_CXSCREEN),65536*y/GetSystemMetrics(SM_CYSCREEN),0,0);

97 名前:デフォルトの名無しさん :2001/07/05(木) 12:49
>>95
key_eventを使う。

98 名前:デフォルトの名無しさん :2001/07/05(木) 13:49
>93
ボタンクリックをエミュレートするなら、ボタンにBM_CLICKを送るだけいい。
または、そのボタンを押したときに発生するWM_COMMANDを親のダイアログに直接送る。

ボタンがへこむアニメーションも再現したければ、BM_SETSTATEを使え。

99 名前:デフォルトの名無しさん :2001/07/05(木) 13:51
Win2KとWinMeの両方で問題なく動くプログラム作るとしたら、
どっちでビルドした方がいいとかいうのはありますか?

100 名前:デフォルトの名無しさん :2001/07/05(木) 17:51
>>99
まさか Win9x/Me 上でマジで開発しよう…なんてこと、考えてないだろうな。
いや、まさかとは思うが、念のため...。

101 名前:デフォルトの名無しさん :2001/07/05(木) 18:04
>>100
いや、Win2kでビルドしたら動かずに、WinMeでビルドしたら動いたもんで。
詳しくはおいおい調査してくけど・・・。

102 名前:デフォルトの名無しさん :2001/07/05(木) 18:19
>>98
最小化ボタンのアニメーションは再現できないんでは?

103 名前:100 :2001/07/05(木) 18:29
>>101
あ、そゆことね。スマソ。

ふむぅ..。しかしなんとも理不尽だね。
そういえば、そんなこと経験したことあるよーな気もするなぁ...。

104 名前:デフォルトの名無しさん :2001/07/05(木) 19:01
ボタンの位置(座標)ってどうやって取るんですか?
できればCRectで受け取りたいんですけど・・・

105 名前:デフォルトの名無しさん :2001/07/05(木) 19:57
>>104
GetWindowRect

106 名前:デフォルトの名無しさん :2001/07/05(木) 20:37
>>101

それって
「Win2kでビルド→Win2k:×、WinMe×」で
「WinMeでビルド→Win2k:○、WinMe:○」ってこと?

107 名前:デフォルトの名無しさん :2001/07/05(木) 20:40
>>104
そうですよね。その筈なんですけど
CRect BRECT;
CButton *myBT = (CButton*)GetDlgItem(IDC_BUTTON);
myBT->GetWindowRect(BRECT);
COXRoundedButton*Test = new COXRoundedButton();
Test->Create("Sample", BS_OWNERDRAW | BS_PUSHBUTTON | WS_VISIBLE, BRECT, this, ID_SAMPLE);
とやると位置がズレルのは何故何でしょうか?

108 名前:デフォルトの名無しさん :2001/07/05(木) 21:07
>>106
「Win2kでビルド→Win2k:○、WinMe×」
「WinMeでビルド→Win2k:?、WinMe:○」
っす。
Meでビルドしたのはまだ2kに持って来てないっす。

109 名前:93 :2001/07/05(木) 21:56
>96
ありがとう!
試してみたら、LEFTUP→LEFTDOWN→LEFTUPの順でやるとうまく動かせました。
(LEFTDOWN→LEFTUPだけだと、なぜかドラッグしたことになってしまった)

>98
最初、それでいこうかと思ったんだけど、
結局メッセージ送りつける相手のハンドルがわからなくて断念しました。

110 名前:106 :2001/07/05(木) 22:19
>>108

その場合、インストール(&使用)されているコンポーネントは本当に一致している?

わりとその辺で動作が違うのだと思う。まぁOS依存動作もあるけど、それはヘルプ見て確認してるんだよね?

111 名前:デフォルトの名無しさん :2001/07/05(木) 22:21
>>107
CWnd::ScreenToClient()
CWnd::ClientToScreen()
この辺調べて見れ。
Createする場合、Windowのローカル座標で作るんじゃなかったか?

112 名前:デフォルトの名無しさん :2001/07/05(木) 22:38
>>108
使うAPIにもよるよ。
ちゃんとヘルプとか読んでるの?

113 名前:デフォルトの名無しさん :2001/07/06(金) 00:12
ちゃんとヘルプ読んでるやつはここに質問書かないって

114 名前:デフォルトの名無しさん :2001/07/06(金) 00:34
>>106,>>112
う〜ん、CreateFileでCOMポート開いてただけなんだけどなぁ(^^;
当然HELPは読んでるけどね。

結局、
「Win2kでビルド→Win2k:○、VCインストール前のWinMe×、インストール後のWinMe○」

ってことで、なんか足りなかったのかなぁ??
再現させるにはまたWinMeのインストールからか・・・。

115 名前:106 :2001/07/06(金) 04:48
>>113

確かに「F1を押す」だけの事ができない奴多いものな>2ch。

116 名前:デフォルトの名無しさん :2001/07/06(金) 10:43

HeapAlloc と GlobalAlloc の違いについて教えてください。
GlobalAlloc のメモリは再配置可能で HeapAlloc はそうでなく
HeapAlloc はメモリが断片化される可能性があるらしいのですがこれはどういうことですか?
例えば1MBのメモリを3回確保して最初に確保した1MBは開放してから再度1MB確保した場合
GlobalAlloc では開放された領域が再利用されて HeapAlloc の場合は開放された領域ではなく4MB目の位置に新しく確保されるということでしょうか?
確保できるメモリ量に違いなどはあるのでしょうか?
GlobalAlloc は一度に確保できるのは65535ハンドル数までらしいですが、ハンドルの数ではなくバイト数での制限はあるのでしょうか?
昔ウィンドウズで扱えるヒープのサイズは256MBとか噂で聞いた気もしますが、そのような制限はあるのでしょうか?
それと HeapAlloc と GlobalAlloc ではどちらを使うのが一般的ですか?
自分は今までは HeapAlloc を使っていたんですが。( GlobalAlloc はロックしないといけないので面倒 )

ご意見・ツッコミ・煽りなどをお寄せください。
どうぞよろしくお願いします。

117 名前:名無しさん :2001/07/06(金) 10:47
GlobalAllocは640KBの壁があった前世紀の遺物。
江戸時代のプログラミング。
HeapAllocは独自のアロケーター作成用のツール。
mallocやnewを独自に作るための部品。
ベストはmalloc。
ソースを見るとちゃんと二進セマフォを
いじっているんで、マルチスレッドにも対応している。

118 名前:デフォルトの名無しさん :2001/07/06(金) 12:29
自分以外の他のプログラムを終了させるような関数を教えてください。
例えばウィンドウズを終了させると一応すべてのプロセスが終わるのですが、
ここでは特定のプログラムを終わらせる方法が知りたいです。

119 名前:デフォルトの名無しさん :2001/07/06(金) 12:32
FindWindowとPostMessageを繰り返すだけ。
普通はそれで問題なし。

120 名前:デフォルトの名無しさん :2001/07/06(金) 12:38
>>116
GlobalAllocっていっても、
単にそのプロセスのデフォルトヒープを使ってるだけじゃなかったかな。

LocalAllocでも同じだけど、漏れが使うときはいつも LPTR な確保しかしないから、
ロックなんてしてない。

HeapAllocは DLL には便利だと思う。
ロードされたプロセスに極力迷惑かけないでメモリを使えるから。
DLL_PROCESS_ATTACH で HeapCreate して、
DLL_PROCESS_DETACH で HeapDestroy すれば、
プライベートヒープを丸ごと一気に解放しちゃえて、楽チン。

漏れはあの巨大な標準ランタイムライブラリ(msvcrt.dll だとしても、
それがメモリを消費することには変わりはない)を極力使いたくないから、
C++ なプログラムの場合だと、
operator new と operator delete を LocalAlloc/LocalFree で定義して、
使うことが多い。
このとき、それが DLL ならプライベートヒープを確保して使うな。

WIN32 API はほとんど thread free なので、排他制御を考える必要はない。
もちろん、メモリの利用効率という点では malloc に一歩譲ると思うが、
そもそも、それが大きく影響するようなら、逆にメモリの使い方が下手な証拠。

…と、漏れは思ふ。

121 名前:デフォルトの名無しさん :2001/07/06(金) 12:47
>>118
プロセスを頃す方法はいくつかあるが、
/subsystem:windows な PE で、かつ、窓(見える/見えないは別として)を持っているなら
>>119 の方法が一番、素直。
ツボは、いかにして頃したいプロセスの ID を抜くか…ってところ。

122 名前:デフォルトの名無しさん :2001/07/06(金) 14:01
GlobalAllocって、クリップボードで他のプロセスに渡すメモリに
使いませんでしたっけ?

123 名前:名無しさん :2001/07/06(金) 14:03
そこがいわゆる負の遺産というか盲腸の手術後というか。
ほかにもGlobalFreeが必要なポインタを返すやつがいくつか
あるはず。

124 名前:118ヽ(´ー`)ノ  :2001/07/06(金) 14:06
>>119 >>121
ありがとうございます。
実験で、とあるプログラムに WM_CLOSE を送ったらちゃんと終了できました。

しかし、本当の目的のプログラムはどうしてもFindWindowでみつかりませんでした。
ちなみにツールバーには出ないタイプで、タスクトレイに小さいアイコンとして
常駐するタイプです。他の関数で HWND を調べるしかないのでしょうか?

125 名前:121 :2001/07/06(金) 14:33
>>124
EnumWindows

126 名前:デフォルトの名無しさん :2001/07/06(金) 17:02
モデムで通信してて、
そこから01を読書きしたいんだけど誰か方法教えて!
検索してもATコマンドばっかり(T_T)

127 名前:toray :2001/07/06(金) 20:02
ボタンを押すと、c:\test.exe
を100回実行するプログラムを書きたい。
どうやればいいでしょうか。
VBしかわかりません。おねいがいます

128 名前:デフォルトの名無しさん :2001/07/06(金) 20:25
>>127
for(int i=0; i<100; i++) system("c:\\test.exe");

129 名前:toray :2001/07/06(金) 21:54
system を使うのか

ありがとう。

130 名前:vmware :2001/07/06(金) 21:59
vmware をVisualC++でつくらなければならなくなりました。
アドバイスを!

131 名前:デフォルトの名無しさん :2001/07/06(金) 22:36
>>130
頑張れ。

132 名前:デフォルトの名無しさん :2001/07/06(金) 22:51
わけわからんけど、あながち不可能でもないからガンバレ>>131

133 名前:デフォルトの名無しさん :2001/07/06(金) 23:22
>>130
出花をくじくようなことを書いて申し訳ないが、
他人にアドバイスを求めなければならないようでは、
チミには不可能と思われ

第一、あれには確か特許がかかっていたはずだから、
たとえ技術的に可能でも、法律的にはおそらく不可能と思われ

134 名前:デフォルトの名無しさん :2001/07/07(土) 00:53
急にある自作クラスがクラスウイザードから見えなくなってしまいました。
こんな現象知りませんか?

ビルドは出来るし、ワークスペースにも見えるんですけど・・・・

135 名前:デフォルトの名無しさん :2001/07/07(土) 01:10
>>134
クラスウィザードは .clw ファイルによって管理されています。
バージョンの不整合が起こったんでしょう。
.clw を削除してクラスウィザードを立ち上げるとナンダカンダと聞いて
きますので、それが早いと思います。
また、既存のまま新規クラスのウィザード取り込みもできるハズですので
そんでもよいでしょう

136 名前:135 :2001/07/07(土) 01:11
>バージョンの不整合
ちょっち言い方オカシイね。プロジェクト内のファイル更新の不整合

137 名前:デフォルトの名無しさん :2001/07/07(土) 13:31
>>135
サンクスです。
どうやらMFCクラスから派生したものの、やっぱ不要と考えて手動で
書き換えたせいのようです(^^;
今までエラーが出なかったのは単に選択してなかっただけのようで。

お勉強になりました。

138 名前:デフォルトの名無しさん :2001/07/08(日) 10:30

質問れす。
どうも最近PCがフリーズしまくりです。
プログラムの開発をしていると良くフリーズします。
「Ctrl+Alt+Del」で再起動しようとすると「ダイアログの表示待ちでシステムがビジーです。」って青い画面が表示されます。
これってプログラムが悪いんですかね。
逝く寸前にダイアログを表示しようとはしてないんですけど・・・
ビルドするとビルド中に逝くこともある。(コンパイルからリンクに移行するときに良く逝く)
他のプログラムでフリーズすることもあるが、自分のプログラムを動かした後に逝くことが多い。
これってどこが悪いんですかね?

ちなみに僕チンの頭は悪くありましぇん。

139 名前:デフォルトの名無しさん :2001/07/08(日) 12:10
メモリがたりねぇんだよ!
そうじゃなかったら割り当てたメモリを解放しわすれてんだろ

140 名前:RIP_MAPIRO :2001/07/08(日) 12:39
システムリソースの残量は何パーセント?極端に減っていたら
使わないデバイスをデバイスマネージャーで無効にする。

クロックアップしているならFSBを落す。もしくは、ハイブリッドなメモリの構成
ならハイブリッドな構成を改める。

141 名前:デフォルトの名無しさん :2001/07/08(日) 13:53
質問です。
リソースエディタで、ドキュメントに関連付けられた
アイコンをいくらいじっても、シェルの新規作成では
デフォルトの破れアイコンが出てきます。
icoファイルからいじっても同じ、シェルの
ファイルタイプの関連付けからやってもダメ(再起動すると元通り)でした。

関連付けの根本が分かってないです。
定番の本/検索ワードありましたら教えてください。

142 名前:デフォルトの名無しさん :2001/07/09(月) 00:27
アイコンキャッシュに残ってた…なんてオチじゃねーだろなっ!

143 名前:141 :2001/07/09(月) 06:56
…そのオチでした。
すいません。

「アイコンキャッシュ」で検索して、
ShellIconCacheにたどり着きました。逝ってきます。

144 名前:デフォルトの名無しさん :2001/07/09(月) 10:04
あほみたいな質問ですみません。

CBitmapを使って、256色のビットマップを作りたいのですが
どうしたらよいのでしょうか?

145 名前:デフォルトの名無しさん :2001/07/09(月) 10:27
>>144に付け足しで、
画面はフルカラーで設定されていますが、
ビットマップのみ256色表示がしたいのです。

146 名前:デフォルトの名無しさん :2001/07/09(月) 10:53
>>145
もうすこし具体的に何をしたいかを書いてください。
お絵かきソフトとかで256色に限定したいってこと?

147 名前:デフォルトの名無しさん :2001/07/09(月) 11:02
>>146
そんな感じです。

フルカラーだと大きなビットマップが作れないので
256色にして大きなビットマップが作りたいのです。


CBitmap.Create(幅、高さ、1,8,0)
とやるところまでは解ったのですが、
CDCの方も何かをしてやらないと表示され無いんですよね?


よろしくお願いします。

148 名前:デフォルトの名無しさん :2001/07/09(月) 16:19
>>147
またまた付け足しですみません。

ダブルバッファリング先のビットマップです。
スクロールしたりするときに、大きいビットマップが欲しいのです。

149 名前:デフォルトの名無しさん :2001/07/09(月) 16:53
MsCommを使ってます。
ダイアログにコントロールを貼り付けずに使いたいのですが。
何故かというと、MDIでメニューから通信を使いたいのです。
隠しダイアログ作るとかいった泥臭技は最終手段として考えて
いるのですが、もっとすっきりした正攻法はないでしょうか。

150 名前:デフォルトの名無しさん :2001/07/09(月) 17:09
>>147

>>59 をMFCにアレンジしな。CBitmapとCDCをのメンバ関数使ってな。
これで分からなかったら初心者スレあったと思うからそこ逝きな。

151 名前:デフォルトの名無しさん :2001/07/10(火) 13:03
過去ログ逝き防止age

152 名前:defaultの名無しさん :2001/07/10(火) 13:50
>>149
正攻法1:
RTS/CTSフロー制御をつける。
メッセージポンプの中で受信フラグを見る。
受信していれば→処理

正攻法2:
入力スレッドを立て、受信したらEventを立てる。
メッセージポンプの当たりでイヴェントをチェック。

153 名前:149 :2001/07/10(火) 15:46
>>152 レスありがとっ!

C***Docのメンバ変数として、CMSCommのインスタンスを作ってと
考えているのですが。
メッセージポンプって?今から調べてみます。

154 名前:さとう :2001/07/11(水) 00:43
WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE |
ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL ,
でウィンドウを作り,
strcat(str,call);
strcat(str,"\n\t");
Edit_SetText(hEdit, str);
でテキストを表示すると改行されず,改行マークが文字化けしてしまいます.
strには改行がちゃんと入っているのですが.


155 名前:デフォルトの名無しさん :2001/07/11(水) 00:53
>>154
ひさびさかな?
改行は\r\nです。

156 名前:デフォルトの名無しさん :2001/07/11(水) 01:37
char Moji[10];
Moji="Test";

とすると、Teだけを取り出し時はどのようにしたらいいですか?

157 名前:デフォルトの名無しさん :2001/07/11(水) 01:43
>>156
にゃんか書いてる意味がよく分からんが、
Moji[2] = '\0' ってことか?

158 名前:デフォルトの名無しさん :2001/07/11(水) 01:46
>>157
えぇと、Moji[0]はT、Moji[1]はeなんだけど。
それをつなげるには、どうしたらいいかな?と。

159 名前:デフォルトの名無しさん :2001/07/11(水) 01:48
>>156
char *sptr = strstr( Moji, "Te" );
if( sptr )
 sptr[strlen("Te")] = '\0';

実行結果>Moji = "Te";

こういうことじゃなくて?

160 名前:デフォルトの名無しさん :2001/07/11(水) 01:49
>>158
お前は、C言語そのものを勉強しろ。
ポインタあたりが全然解ってないだろ?

161 名前:デフォルトの名無しさん :2001/07/11(水) 01:50
>>157
あ、、なんだか分からない命令文とかあるので
今から実装してみます。
ありがとうございまーす

162 名前:>>147 :2001/07/11(水) 01:52
あっちで返事した者だが、こっちでも答えてやる。
っていうか質問はどっか一箇所でした方が良いと思う。

8bit の HBITMAP が DC に Select できない、というのが
そもそもの問題(あっちのスレにそう書いてあるのだ)なら、
CreateDIBSection で DIB の HBITMAP 作ればたぶん Select
できるぞ。使い方はドキュメント読んで。

163 名前:中学生 :2001/07/11(水) 02:10
C言語でsinカーブを書くにはどうしたらいいの?
ソースコード見せて。
ちなみにコンパイラはVC++6.0

164 名前:デフォルトの名無しさん :2001/07/11(水) 02:40
>>163

http://www.google.com/

好きなだけご覧ください。

165 名前:デフォルトの名無しさん :2001/07/11(水) 02:42
いやんエッチ!

166 名前:デフォルトの名無しさん :2001/07/11(水) 02:47
163>>
Y=Asin(Wt+(2PI)/λ)r) うろ覚え。
これじゃないの?

167 名前:デフォルトの名無しさん :2001/07/11(水) 07:08
BeginPaint() とか EndPaint() とか
MoveToEx() とか LineTo() とか

168 名前:デフォルトの名無しさん :2001/07/11(水) 08:21
>>163
サインカーブは厨房にはまず理解できないと思う。
まず、ラジアンって知ってるか?

169 名前:168さん@今日は臨休 :2001/07/11(水) 09:03
//ほれ、即席だ
//かなり他のソースを流用したから分かりにくいだろうが
//文句足れんじゃねえぞ
#include <windows.h>
#include <math.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

BOOL InitialProcess(HDC);

HINSTANCE hInst;
HWND hwnd;
LPBYTE Buf;
BITMAPINFO BMI;

170 名前:168さん@今日は臨休 :2001/07/11(水) 09:04
//続くぜ

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow){

MSG msg;
WNDCLASSEX wndclass ;

hInst=hInstance;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Test Window";
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

RegisterClassEx (&wndclass);

hwnd = CreateWindow ("Test Window",
"曲線絵画",
WS_OVERLAPPEDWINDOW,
50,50,
640+6,480+30,
NULL,
NULL,
hInstance,
NULL);

ShowWindow (hwnd,iCmdShow);
UpdateWindow (hwnd);
HDC hdc = GetDC(hwnd);
if(InitialProcess(hdc) != TRUE){
ReleaseDC(hwnd,hdc);
return msg.wParam;
}
ReleaseDC(hwnd,hdc);
while (GetMessage (&msg,NULL,0,0)) { // メッセージループ

TranslateMessage(&msg);
DispatchMessage(&msg);

}

return msg.wParam ;

}

171 名前:168さん@今日は臨休 :2001/07/11(水) 09:05

BOOL SetDIBInfo(LPBITMAPINFO BMI ,int Width,int Height)
{
BMI->bmiHeader.biBitCount = 24;
BMI->bmiHeader.biSize= sizeof(BITMAPINFOHEADER);
BMI->bmiHeader.biWidth = Width;
BMI->bmiHeader.biHeight = Height;
BMI->bmiHeader.biCompression = BI_RGB;
BMI->bmiHeader.biPlanes = 1;
return TRUE;
}

172 名前:168さん@今日は臨休 :2001/07/11(水) 09:07
BOOL InitialProcess(HDC hdc)
{
int i;
int x,y;
const double PAI = 3.141592;

Buf = (LPBYTE)malloc(640*480*3);
SetDIBInfo(&BMI,640,480);
for(i = 0;i<640*480*3;i++){
Buf[i] = 255;
}
for(x = 0;x<640;x++)
{
Buf[(240*640+x)*3]=0;Buf[(240*640+x)*3+1]=0;Buf[(240*640+x)*3+2]=0;
}
for(y = 0;y<480;y++){
Buf[(y*640+160)*3]=0;Buf[(y*640+160)*3+1]=0;Buf[(y*640+160)*3+2]=0;
Buf[(y*640+320)*3]=0;Buf[(y*640+320)*3+1]=0;Buf[(y*640+320)*3+2]=0;
Buf[(y*640+480)*3]=0;Buf[(y*640+480)*3+1]=0;Buf[(y*640+480)*3+2]=0;

}
for(x = 0;x<640;x++)
{
y = (int)240+sin((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 0;Buf[(y*640+x)*3+1] = 128;Buf[(y*640+x)*3+2] = 128;
}
}
y = (int)240+cos((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 128;Buf[(y*640+x)*3+1] = 128;Buf[(y*640+x)*3+2] = 0;
}
}
y = (int)240+tan((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 128;Buf[(y*640+x)*3+1] = 0;Buf[(y*640+x)*3+2] = 128;
}
}
StretchDIBits(hdc,0,0,640,480,0,0,640,480,Buf,&BMI,DIB_RGB_COLORS,SRCCOPY);
if(GetAsyncKeyState(VK_ESCAPE)<0)
return FALSE;
}
return TRUE;
}

173 名前:168さん@今日は臨休 :2001/07/11(水) 09:08
//これで終わりだ

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
hdc = GetDC(hWnd);

switch( message )
{
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
StretchDIBits(hdc,0,0,640,480,0,0,640,480,Buf,&BMI,DIB_RGB_COLORS,SRCCOPY);
EndPaint( hWnd, &ps );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
ReleaseDC(hWnd,hdc);
return 0;
}

174 名前:デフォルトの名無しさん :2001/07/11(水) 10:57
漏れも組んでみたよ

#include <windows.h>
#define WIDTH 600
#define HEIGHT 300

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 switch(uMsg){
 case WM_PAINT:
 PAINTSTRUCT ps;
  HDC hdc=BeginPaint(hwnd,&ps);
  MoveToEx(hdc,WIDTH-1,HEIGHT/2,0);
  for(int x=0;x<WIDTH;x++){
   double y=(1-sin(2*3.14*x/WIDTH))*HEIGHT/2;
   LineTo(hdc,x,(int)y);
  }
  EndPaint(hwnd,&ps);
 }
 return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow){
 WNDCLASS wc;
 memset(&wc,0,sizeof(WNDCLASS));
 wc.lpfnWndProc=WndProc;
 wc.hInstance=hInstance;
 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszClassName="CLASS";
 RegisterClass(&wc);
 CreateWindow("CLASS","",WS_POPUP|WS_VISIBLE,0,0,WIDTH,HEIGHT,0,0,hInstance,0);
 MessageBox(0,"OK を押すと終了",0,0);
}

175 名前:デフォルトの名無しさん :2001/07/11(水) 11:01
む、ギリギリ省略されないと思ってたのに…欝墮齒腦

176 名前:デフォルトの名無しさん :2001/07/11(水) 11:15
switch(uMsg){ の真下に次の2行追加。さらに欝

 case WM_NCHITTEST:
  return HTCAPTION;

177 名前:さとう :2001/07/11(水) 15:20
>155さん
ありがとうございました。大変助かりました。

178 名前:デフォルトの名無しさん :2001/07/11(水) 16:08
ウィンドウにボタンやコンボボックスのコントロールを配置しました。
TABキーでフォーカスを移動させたいのですが、VCに、VBのTabIndexのような設定を
行うための手段はありますか?
自分でWM_KEYDOWNを拾ってフォーカスを管理しないといけないのでしょうか?
教えてください。

179 名前:デフォルトの名無しさん :2001/07/11(水) 17:20
>>178
CTRL+D

180 名前:デフォルトの名無しさん :2001/07/11(水) 17:21
>>178
Ctrl+D又はタブオーダー

181 名前:高校生 :2001/07/11(水) 21:06
C言語ってグラフィックツールがないから、
どうやってグラフ描いたらいいか分からん。
計算はCでやってグラフ描画はExcelでやったほうがいいのかな?

182 名前:デフォルトの名無しさん :2001/07/11(水) 21:11
>>181
それでもいいよ。

VCなら自分でグラフの描画できるけどね。

183 名前:修士一年 :2001/07/11(水) 21:16
非常に申し訳ない。
VC++を研究に使うんだが、グラフ表示
の関係上C言語のみでは不可能なのだと気づいた。
つきましてはVC++のいい入門書の紹介をお頼み申し上げる。
ちなみにCは分かる(つもりだ)。

184 名前:デフォルトの名無しさん :2001/07/11(水) 21:21
>>183
とりあえず「猫でもわかるプログラミング」ってページを検索してください。

185 名前:デフォルトの名無しさん :2001/07/11(水) 21:46
>>174 の描画部分をちょっと書き換えれば大抵のグラフは描けると思うが…

186 名前:デフォルトの名無しさん :2001/07/12(木) 12:05
にょにょにょ。
ttp://www.kumei.ne.jp/c_lang/index.html

187 名前:デフォルトの名無しさん :2001/07/12(木) 13:05
>>178
VBのTabIndexってどういうヤツ?

188 名前:脂漏と :2001/07/13(金) 11:42
#include <stdio.h>

int main(void)
{
int i, j;
int kuku[4][5];

for(i=0;i<4;i++)
for(j=0;i<5;j++){
kuku[i][j] = i*j;
}

for(i=0;i<4;i++){
for(j=0;i<5;j++)
printf("%d ", kuku[i][j]);
printf("\n");
}

return 0;
}

どうも上のfor文で無限ループに突入するみたいなんですけど
どうしてでしょうか?

189 名前:デフォルトの名無しさん :2001/07/13(金) 11:47
for(j=0;i<5;j++){
i<5→j<5じゃ無いの?

190 名前:デフォルトの名無しさん :2001/07/13(金) 11:50
>>188
http://piza.2ch.net/test/read.cgi?bbs=tech&key=986528326&st=25&to=25&nofirst=true

191 名前:脂漏と :2001/07/13(金) 13:59
>>189,190
ありがとうございました。
謎が解けました。

192 名前:90 :2001/07/13(金) 22:15
>>191
コードはコピペしちゃいかんよ。

193 名前:デフォルトの名無しさん :2001/07/14(土) 03:52


194 名前:デフォルトの名無しさん :2001/07/14(土) 17:52


195 名前:デフォルトの名無しさん :2001/07/17(火) 01:05
あああげげげ

196 名前:デフォルトの名無しさん :2001/07/17(火) 01:55
ふと考えたんですが
RAMディスク使ってビルドの過程を高速化することってできないですかね

197 名前:デフォルトの名無しさん :2001/07/17(火) 02:37
>>196
とっくにキャッシングしてると思われ。

198 名前:デフォルトの名無しさん :2001/07/17(火) 02:48
そもそもリンカが使ってるファイルは実はファイルじゃなくてメモリマップトファイルだから
実メモリを山のように実装しておけばそれで済む。

199 名前:デフォルトの名無しさん :2001/07/17(火) 03:17
10年前の発想>196

200 名前:デフォルトの名無しさん :2001/07/17(火) 04:14
最近VC++を触りはじめたんだけど、MFCとやらを使わない場合は
メッセージによってswitchで分けたところに、ひたすらやりたいことを
する関数をMSDNで見つけて、書いてくだけでいいもんなの?
簡単なツールを作るのに勉強がてらVC触ってるだけなんだけど。

201 名前:デフォルトの名無しさん :2001/07/17(火) 04:48
>>200
無理しないでMFC使えばよいと思うが・・・

202 名前:デフォルトの名無しさん :2001/07/17(火) 05:16
>>201
小難しそうで_・)
他スレでC++しらきゃだめ、みたいなことも書いてあったので。

203 名前:デフォルトの名無しさん :2001/07/17(火) 06:45
>>200
メッセージループ作るとこまで逝ったのなら、
大体そんなもんだ。

204 名前:デフォルトの名無しさん :2001/07/17(火) 09:54
デバッグ実行中にOutPutWindowに以下のメッセージが
出るんだけど、ほっといて大丈夫?

>No handler for command ID 0xE125, disabling it.
>SENDING command id 0xE107 to CMDIView target.

205 名前:デフォルトの名無しさん :2001/07/17(火) 10:49
あるボタンを押したときに単純なテキスト入力コントロール(Edit Box)を
表示させたいのですが、VBの場合は確かInputString関数を使えばできます。
VCのこれと同等の関数はないでしょうか。EditBoxだけのダイアログをあまり
作りたくないのです。

206 名前:デフォルトの名無しさん :2001/07/17(火) 10:59
1つ作って、使いまわせば良いんじゃないかな?

207 名前:デフォルトの名無しさん :2001/07/17(火) 11:05

やっぱそうですかね。そうしまっす。ありがと〜。

208 名前:デフォルトの名無しさん :2001/07/17(火) 16:32
>>202
C++を知らないでウインドウズプログラミングって組めるのか?
とりあえず思いっきり無理な気がするんだが。

209 名前:デフォルトの名無しさん :2001/07/17(火) 16:51
>>208
出来るよ。
「猫でもわかる」(http://www.kumei.ne.jp/c_lang/) はほとんどCだし。

俺はやりたいとも思わんけど。

210 名前:90 :2001/07/17(火) 22:07
>>208
C++が一般的になる前はCで書いてたよ。
もちろん今でも書けるけど、機会は減ったね。

MFCが出たてのどうしようもない頃は
わざとMFCなしで書いてたよ。

遠い昔だ...

211 名前:デフォルトの名無しさん :2001/07/18(水) 21:54
SDKでの描画ダブルバッファについて教えてください

以下のソースで何も描画されないのは何故でしょうか?
GetDeviceCaps()でRC_BITBLTは確認してますし
CreateCompatibleDC(),BitBlt()も成功しています
下のソースではhdcにDrawすると描画され、hdcにDrawすると描画されません

環境VC++6.0 WindowsNT

case WM_PAINT:
 hdc = BeginPaint (hWnd, &ps);
 hdcnew = CreateCompatibleDC(hdc);
 RECT rt;
 GetClientRect( hWnd, &rt );
 DrawText( hdcnew, "AAAA\n", 5, &rt, DT_CENTER );
 BitBlt(hdc,rt.left,rt.top,rt.right-rt.left,rt.bottom-rt.top,hdcnew,0,0,SRCCOPY);
 EndPaint( hWnd, &ps );
 break;

212 名前:デフォルトの名無しさん :2001/07/18(水) 22:28
>211
CreateCompatibleBitmap()とSelectObject()が抜けてるよ。
基本は、
「WM_CREATEで裏画面を作成」
      ↓
「WM_PAINTで裏画面からコピー」
だから、それから挑戦してみたら。
参考までに。
http://www-online.kek.jp/~keibun/win32prog/paint.html
http://www2s.biglobe.ne.jp/~maekawa/dev/vc/redraw/

213 名前:デフォルトの名無しさん :2001/07/18(水) 23:23
抽象クラスの仮想関数をいくら増やしてもクラスのサイズが変わらない
のは何故かしら?あと、virtual 型名 の「型名」を変えても同じ。
どうして!?

214 名前:デフォルトの名無しさん :2001/07/18(水) 23:29
>>213

「仮想関数テーブル」を検索してみてください。

215 名前:211 :2001/07/19(木) 00:21
ありがとうございます。

一旦ビットマップに保存して
差し替えなければならないのですね。

216 名前:デフォルトの名無しさん :2001/07/19(木) 00:54
あのですね。C言語で、
ある指定した数までの素数を求めるプログラムを作った場合、
配列を使ったエラトステネスのふるいで求めるプログラムと、
線形リストによりポインタを使ったプログラムと、
普通にfor文で割っていって、割りきれた値が例えばi==jだったらそれは
素数であるといった3つの場合を考える時、
計算量とメモリの使用量はどう違うんでしょうか?教えてください!

217 名前:デフォルトの名無しさん :2001/07/19(木) 00:58
自分で計測しろ>216

218 名前:216 :2001/07/19(木) 01:17
どーやって計測すればいいんでしょうか?

219 名前:デフォルトの名無しさん :2001/07/19(木) 01:27
プロファイラ使うか、手作りで計測コードを埋め込む。

埋め込む場合、
計算量は単純に時間測定、
メモリ使用量はmalloc/freeの部分に、
使用サイズ、ピークを加減算する関数をはさむ。
これでだいたい判る。

220 名前:デフォルトの名無しさん :2001/07/19(木) 01:40
>>218
計測しないとわからん程度ならどうだっていいじゃん。

221 名前:デフォルトの名無しさん :2001/07/19(木) 01:53
VCで、今ネットに繋いでいる回線を切断する関数ってあります?

222 名前:デフォルトの名無しさん :2001/07/19(木) 02:05
>>221
InitiateSystemShutdown()

223 名前:221 :2001/07/19(木) 02:08
>>222
それはシステムのシャットダウンですよ。
ねたじゃないなら覚えておいた方がいいですよ。

224 名前::2001/07/19(木) 02:14
>>221
system("net stop \"Network connections\")";

回線ってなによ。モデム?ならそういう風に書いてくれ。
LANカードとか刺さってたらどうするのよ?

225 名前:221 :2001/07/19(木) 02:20
>>224
これはコマンドですか?「net」って今やってみたら「コマンドまたはファイル名が違う」と言われました。

回線っていうか、今繋がっているダイヤルアップの接続を自分の意思で切ることが出来るのかな?ということなんです。

226 名前::2001/07/19(木) 02:21
TAPIを調べるがよい。

ついでにいうと、開発はNT系列でやるがよい。

227 名前:221 :2001/07/19(木) 03:02
>>226
わからない・・・
自分でも情けないと思うんですが、TAPIの関数群を色々調べたんですが、
lineClose() などの終了関数はすべてオープンしたときのハンドルが必要みたいで、
いい日本語の説明ページが見当たらないしちょっと手詰まり状態。
それに、すでに接続されている状態から自分のプログラムを立ち上げて
接続を切りたいのですが・・・
iriaとかのツールがやってるようなやつを。
ちなみに自分のマシン限定プログラムです(WIN98)。

228 名前:さとう :2001/07/19(木) 03:18
VC++のリソースエディタでエディットボックスを作るとキーを押して
もWM_CHARやWM_KEYDOWNのメッセージがダイアログボックスに送られ
ないようです。キーを押されたかどうかを知るにはどうしたらいいの
でしょうか?

229 名前:デフォルトの名無しさん :2001/07/19(木) 04:09
>>228
メッセージをフックするのが一番手っ取り早いかな。

ただ…、単に入力の有無とその文字を知りたいだけなら、
親ダイアログのWM_COMMANDでEN_CHANGEを捕まえて、
EM_GETLINEやGetWindowTextなどを使うだけで済むと思います

230 名前:デフォルトの名無しさん :2001/07/19(木) 08:09
>>227
Ras。

231 名前:デフォルトの名無しさん :2001/07/19(木) 20:04
vector< spelma > MeatBar;
というメンバベクトルが、DLL内のクラス内にあるのですが、
std::vector<class MeatBar,class std::allocator<class MeatBar> >' は __export キーワードを使って class 'Sex' にエクスポートしてください。
と警告されます。そのあとそのメンバを参照すると、強制終了します。
vectorをDLL内のクラスのクラスメンバとして持つにはどうすればよいのでしょう。

232 名前:デフォルトの名無しさん :2001/07/19(木) 20:14
ちなみに、spelmaもクラスです。

233 名前:デフォルトの名無しさん :2001/07/19(木) 20:49
回線で首つって死ねば解決するよ。

234 名前:デフォルトの名無しさん :2001/07/19(木) 21:37
ちなみにネタではありません。このアプリケーションの仕様をオブジェクト指向で表しました。少し不自然なところがあるものの、7不思議ということで片付けておきました。では教えてください。

235 名前:デフォルトの名無しさん :2001/07/19(木) 22:58
>>234
帰れ。

プログラマーズ・ジョーク
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=983059592
ここでやれ。

236 名前:デフォルトの名無しさん :2001/07/19(木) 23:01
マジですよ?

237 名前:デフォルトの名無しさん :2001/07/19(木) 23:08
>228

エディットボックスをサブクラス化すればメッセージは拾える。
文字が知りたいだけなら、229のとおり。

238 名前:カカ :2001/07/19(木) 23:11
割り込みで失礼します。

VC++6.0で、テンプレート関数を

 func<int>( 123 );

というように型を明示的に指定すると、

d:\DATA\PROGRAM\VC++\Test\TaskTest.cpp(51) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行番号 1794)
Visual C++ のサポート情報 コマンドを選択してください
ヘルプ メニュー、 またはサポート情報のヘルプ ファイルを参照してください

と、内部コンパイラ エラーになることがあるんです。
サンプルコードを載せたいところなのですが、これ単純なソースコードでは普通にできるんです。
200行くらいを超えると、ほぼ確実に発生してしまいます。

今までは型キャストでなんとかしてたんですが、今回キャストで解決しようとするとものすごく長い記述になってしまう部分で・・・。
どなたか同じような現象が発生している方はいないでしょうか?

239 名前:デフォルトの名無しさん :2001/07/20(金) 00:42
関数テンプレートがらみのバグはよくあることなんで
なんかがんばって、回避策を探すとよいと思われ。

とりあえず関数を短めに分割してみれば?

240 名前:デフォルトの名無しさん :2001/07/20(金) 00:45
>>238
SPはあてた?あててるならスマソ。

241 名前:カカ :2001/07/20(金) 01:24
バグってのは一番ヤな可能性だぁ。
一応SPは5です。

「MSDN」
関数テンプレートの引数は明示的に指定できます。次に例を示します。

template<class T> void f(T) {...}
void g(char j) {
f<int>(j); //generate the specialization f(int)
}

できないじゃないかMSDNメー。

242 名前:デフォルトの名無しさん :2001/07/20(金) 02:15
>>241
テンプレ使うなってことだと思われ。

243 名前:デフォルトの名無しさん :2001/07/20(金) 03:25
ウチでも同じ現象が発生してるので、解決策求むage

244 名前:さとう :2001/07/22(日) 12:50
>229,237
メッセージをフックする方法でうまくできました。
大変ありがとうございました。

245 名前:デフォルトの名無しさん :2001/07/22(日) 13:10
GDIでダブルバッファリングってどうやるんですか。下のようにやりましたが駄目でした。
BITMAP bm;
LoadBitmap(hInstance,"IDB_BITMAP1")
HDC hdc,hdc2,buf;
hdc=GetDC(hwnd);
buf=CreateCompatibleDC(hdc);
hdc2=CreateCompatibleDC(hdc);
SelectObject(hdc2,bm);
Bitblt(buf,0,0,600,600,hdc2,0,0,SRCCOPY);
Bitblt(hdc,0,0,600,600,buf,0,0,SRCCOPY);

246 名前:デフォルトの名無しさん :2001/07/22(日) 15:58
すいません、VC++で開発中に、コンパイルして実行したあと、しばらくして落ちたんですが、そのあと再起動してもう一度環境を開くと、cppファイルがバイナリファイルに変化してしまって、そのファイルのソースコードそのものが消失しました。これはどういうことでしょう。

247 名前:246 :2001/07/22(日) 16:04
こんな現象が起こる可能性のあるもので開発するのは怖くないですか?

248 名前:デフォルトの名無しさん :2001/07/22(日) 16:30
>>246
それは別にVCが悪い訳じゃなくて、FATがぶっ壊されてるだけ。

249 名前:デフォルトの名無しさん :2001/07/22(日) 16:31
>>245
bufに対するビットマップオブジェクトがない。

250 名前:デフォルトの名無しさん :2001/07/22(日) 16:39
VCでMITSって作れるんでしょうか。
作り方がわかる方教えてください。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.