2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API質問箱 Build29

1 :デフォルトの名無しさん:05/03/08 20:37:40
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

2 :デフォルトの名無しさん:05/03/08 20:39:24
-過去スレ
Build28:http://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:http://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:http://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:http://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやーごめんなさい。」に巻き込まれた模様

3 :デフォルトの名無しさん:05/03/08 20:45:57
■注意
・質問する前にMSDNライブラリやPlatformSDKで検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで



4 :デフォルトの名無しさん:05/03/08 21:13:37
>1


さっそく質問
PlgBlt関数を使って↑の形をした32×32ピクセルのbmpを回転させて下左右の矢印にしたいのですが
↓になるように回転させると
_
|↓のように1ピクセルだけ黒くなってしまいます。

しかし←→になるように回転させると普通に回転できます。

point[3] = { {32,32} , {0,32} , {32,0} };
PlgBlt(32×32ピクセルのbmpと互換のあるhdc、point、矢印の画像のhdc、0、0、32、32、NULL、0、0)
で実行しています。

何か間違ってますか?

5 :デフォルトの名無しさん:05/03/08 22:14:47
リストビューでDeleteキーを押されたら選択されている行を削除するということを行いたいです。
ウィンドウプロシージャ関数でWM_KEYDOWNメッセージを捕まえようと思いましたが、
コラムが選択されている状態だとメッセージが送られてこないようです。
どうすればよいのでしょうか?

6 :デフォルトの名無しさん:05/03/08 22:32:17
>>4
32*32なら、0-31だと思うんだが。
point[3] = {{31, 31}, {0, 31}, {31, 0}};

7 :デフォルトの名無しさん:05/03/08 22:37:27
>6     _
それでも |↓ になっちゃうんですよ;
回転させた画像が(0,0)ではなく(1,1)から描画されてしまうんです;

8 :デフォルトの名無しさん:05/03/08 22:47:25
>>5
多分WM_NOTIFYとLVN_KEYDOWN

9 :5:05/03/08 23:14:50
>>8
解決しました。ありがとうございます。
おかげ様で、また一つ賢くなれました。

10 :6:05/03/08 23:39:23
>>7
スマソ。確かにズレが生じるっぽいね。
point[3] = {{30, 30}, {-1, 30}, {30, -1}};
とかすれば一応は回避できるかな。。。

11 :デフォルトの名無しさん:05/03/08 23:52:11
>10
それだと _↓_|
こんなんなっちゃいます;
でも調製すれば何とかなりそうです
ありがとうございました
        

12 :デフォルトの名無しさん:05/03/09 00:06:40
{{33, 33}, {0, 33}, {33, 0}} だったりして…

13 :前スレ942:05/03/09 00:12:43
>>945
お礼遅れました。ありがとうざいます。

14 :6:05/03/09 00:26:50
>>11
いろいろ試してみての結論を一応。
範囲は0-32でOKっぽい。
で、90°回転させる時のみ3頂点の座標xy全てを-1ずらす。

15 :6:05/03/09 01:23:23
あ、90°じゃなくて180°ね。スマソ。

16 :デフォルトの名無しさん:05/03/09 03:40:18
>>4
GDI系は、この辺りの作りが甘いよね。
他にもLineToとMoveToで線を描くとき
(10,10)-(90,90)と(90,90)-(10,10)では
微妙に線がズレたり…。

17 :デフォルトの名無しさん:05/03/09 05:38:41
C:\DATA\起動A.exe ← クリエイトプロセスでない起動したプログラム

 ↑ このプログラムが起動状態にあるか
終了状態にあるか調べるAPIはありますか?

それと終了するまで待つにはどうすれば良いでしょうか?

18 :デフォルトの名無しさん:05/03/09 05:52:24
>このプログラムが起動状態にあるか
>終了状態にあるか調べるAPIはありますか?
プロセスの一覧とって判断

>それと終了するまで待つにはどうすれば良いでしょうか?
WaitForSingleObject

19 :デフォルトの名無しさん:05/03/09 09:09:24
前から思ってたんだけどここに質問してる人って
学生とか趣味プログラマで、専門で仕事してる人じゃないよね?

20 :デフォルトの名無しさん:05/03/09 10:39:20
質問です。
beginthreadで実行したスレッドを待つんじゃなくて、即時停止させたいときはどうすればいいのですか?

21 :デフォルトの名無しさん:05/03/09 10:57:39
>>20
一時停止でいいのならSuspendThread
危険な方法だけど強制終了させたいならTerminateThread

22 :デフォルトの名無しさん:05/03/09 11:17:58
一番素直なのは、終了通知フラグを静的変数として用意しておいて
新規スレッド内でこまめにチェックすることだろうなぁ。
他に安全な終了方法なんてないだろ、ワーカースレッドの場合。

23 :デフォルトの名無しさん:05/03/09 11:27:00
>>21
>>22
手軽で安全な方法は無いのですか。
残念です。
レス、Thx。

24 :デフォルトの名無しさん:05/03/09 11:53:54
>>19
回答者も学生とか趣味プログラマかも…

25 :デフォルトの名無しさん:05/03/09 12:36:28
>>20
外部から停止させる安全なやり方は終了用のイベント用意して
WaitFor〜でシグナルを待つ方法。
WaitForで待てない他の方法でポーリングするのはお薦めできない。


26 :デフォルトの名無しさん:05/03/09 14:12:46
>>17
CreateProcessじゃないならきっとShellExecuteだろう。
もしそうなら代わりにShellExecuteExを使えばプロセスハンドルが手に入れられる。

27 :デフォルトの名無しさん:05/03/09 17:09:00
>>16
GDI系は、終点の座標は含まないからでは?

28 :デフォルトの名無しさん:05/03/09 17:49:38
>>18
>>26

なるほど、EnumProcesses使えば良さそうですね

クリエイトプロセスが動かないので
sysytem()で起動していました

ShellExecute関数は知りませんでした
ShellExecute試してみたところ起動出来たので
こちらで起動状態取得してみようと思います
ありがとございました

29 :デフォルトの名無しさん:05/03/09 18:00:33
CreateProcessが使えない理由は?
systemもShellExecuteもCreateProcess呼んでるんだが。

30 :デフォルトの名無しさん:05/03/09 18:35:40
>>24
ヲチしてる学生ノ

31 :デフォルトの名無しさん:05/03/09 19:23:47
>>29
いろいろサイトを見てみたら
起動プログラム指定のところがNULLになっているのを見つけて
CreateProcessでも起動出来るようになりました
一番目の因数をプログラムにしていたので、コマンドラインを
受け付けてくれないからでした

32 :デフォルトの名無しさん:05/03/09 19:44:21
因数

33 :デフォルトの名無しさん:05/03/09 19:46:36
ttp://www.google.co.jp/search?q=%E3%81%84%E3%82%93%E3%81%99%E3%81%86+%E5%BC%95%E6%95%B0&start=0&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ja-JP:official

34 :デフォルトの名無しさん:05/03/09 20:18:36
>>25
質問内容を理解してないだろ?

最近、質問内容を勝手に変更してしまう輩が
Win32APIスレに沸いているのだが、ひょっとしてそのクチかな?

35 :デフォルトの名無しさん:05/03/09 20:27:21
質問内容を理解してないだけでなく、
スレッドハンドルを同期オブジェクトに使えることさえ理解できてない気がする。

とにかくいろんな意味でズレた、面白い回答だなw、>>25

36 :デフォルトの名無しさん:05/03/09 20:38:35
>>34
前スレにいた、同期オブジェクト自作マニアだな(w

37 :デフォルトの名無しさん:05/03/09 23:54:56
まぁ、元々このスレは電波な質問に正しい答えを返すエスパーの巣窟な訳で。

38 :デフォルトの名無しさん:05/03/09 23:59:44
電波な答えは?

39 :デフォルトの名無しさん:05/03/10 00:07:06
模範的・汎用的な質問に電波な答えをするのがこのスレの流儀。
>>20の質問に対して>>25のように答えてこそ、2ちゃんねらの鑑。

40 :25:05/03/10 08:39:13
>>34-39
悪いけどスレッドの終了待ちはイベントを使う方法が一般的。
>>22みたいなWaitFor使わない方法は無駄。

>>35
スレッドハンドルは終了した時にシグナルになるので
主スレッドでは終了したことがわかるというだけ。
主スレッドから従スレッドの停止には使えない。

41 :デフォルトの名無しさん:05/03/10 09:29:36
>>40
本人?そうじゃないこと祈るけど・・・。
もし本人ならかなり痛い。


>WaitFor使わない方法は無駄。 

またひとつ伝説が生まれた。

42 :デフォルトの名無しさん:05/03/10 09:39:10
>>40
君は、自分の発言を撤回できない可哀想な人なんだな。
同情するけど仕事上の仲間にしたくない。ごめんな。

43 :デフォルトの名無しさん:05/03/10 09:41:15
>>40
イベントオブジェクトとWaitForをわざわざ使うメリットって
何かなあ…。と考えてみた。

副スレッドの処理が終了してていつ死んでも構わない状態、かつ
主スレッドの都合で、副スレッドが死ぬのはちょっと待ってほしい状態

という前提なら、それが当てはまるか。
>>20からそこまで読み取れるとはまさにエスパー。

WaitForじゃなくてMsgWaitForでも前提条件がいろいろと。

44 :デフォルトの名無しさん:05/03/10 13:08:00
おれもイベント使ってますが。
グローバル変数使いたくないからってのと、他にも同期しなきゃならん物があったりするので。
自作ゲームや使い捨てアプリならともかく、グローバル変数見て回るとかやりたくないよ。

45 :デフォルトの名無しさん:05/03/10 13:16:09
スレッドの制御はいろいろあるわな。
どうなってもいいから有無を言わさず止めたいとか、
区切りのいいとこで止めたいとか。

46 :デフォルトの名無しさん:05/03/10 13:25:35
>>44
同期オブジェクトはグローバル変数以上にグローバルだろ、と小一時間(ry
というか、いつの間にグローバル変数の話になったの?

47 :デフォルトの名無しさん:05/03/10 13:27:41
>>46
それで、イベント使わないとすると
WaitForMultipleObjectの代わりでも作れと?

48 :デフォルトの名無しさん:05/03/10 13:29:02
WaitForMultipleObjectsだった。すまんこ。

49 :デフォルトの名無しさん:05/03/10 13:34:01
つーか静的変数でできると言う人って、
同期処理が複数必要になったらどうやってるの?

Windowsでイベント待ち1個だけ(つまり親スレッドからの終了通知だけ)の状況って、
かなり限定的な気がするんだけど。
イベント作って待機が普通かと思ってたよ。
その辺考えるの面倒なんである初期からずっとイベント使ってる。

50 :デフォルトの名無しさん:05/03/10 13:35:58
>>46
名無しの同期オブジェクトのどこがグローバルなのかと小一時間(ry

51 :デフォルトの名無しさん:05/03/10 13:36:46
>>49
シングルショットなら静的変数で十分

52 :デフォルトの名無しさん:05/03/10 13:36:59
>>47,48
偏執的だね。病院に逝ったらどうか?

53 :デフォルトの名無しさん:05/03/10 13:46:37
>>34-39 >>41-42 >>50-52

時間的に同一人物っぽいけど、
ひょっとしてWindowsの同期処理に恨みでもあるのかい?


54 :デフォルトの名無しさん:05/03/10 13:47:52
>>51
シングルショットの話なんてしてないよ。

55 :デフォルトの名無しさん:05/03/10 13:49:59
このスレも春なんですか?

56 :デフォルトの名無しさん:05/03/10 13:50:55
>>53
本末転倒な発想をしてしまっていることに気づけないの?
間違いを認めることができないタイプなのかな。

>>54
それ以前に質問者は同期したいなどと一言も言っていない。

57 :デフォルトの名無しさん:05/03/10 13:52:03
>>53
Windowsにうらみは無いよw。Windowsで飯食ってるし
稚拙だから付き合ってるだけ。今暇だし

58 :デフォルトの名無しさん:05/03/10 13:52:44
ロートルポーリング厨とイベント同期原理主義派が自作自演してるだけ。

59 :デフォルトの名無しさん:05/03/10 13:53:38
>>56
スレッド停止手順も同期処理の一部じゃないのか。

60 :デフォルトの名無しさん:05/03/10 13:54:25
自分の理論を完成させるために質問内容を曲解させていく姿勢には感動した。

61 :デフォルトの名無しさん:05/03/10 13:54:28
現在、同期原理主義派がやや優勢と見た。
ロートル派がんばれw

62 :デフォルトの名無しさん:05/03/10 13:55:24
>>55
おそらく無職の集いですね。

63 :デフォルトの名無しさん:05/03/10 13:56:44
静的変数派のスレッドの使い方が知りたい

64 :デフォルトの名無しさん:05/03/10 13:57:50
>>59
TerminateThreadは同期して無いが

65 :デフォルトの名無しさん:05/03/10 14:03:18
>>61
・同期オブジェクトを自作してWaitForXXX()を使いたい人と、
・OSが提供するスレッドハンドルで同期するなりなんなりしたらいいと考える人
の違い。

自分としては、前者の意図がわからない。
前者の脳内では、いつの間にか他の同期オブジェクトまで待つことになってる。
さらに前者は、子スレッドがWaitForXXX()でポーリングする羽目になることに気づいていない。

66 :デフォルトの名無しさん:05/03/10 14:04:53
>>64
TerminateThreadは既に議論の対象外かと。

67 :デフォルトの名無しさん:05/03/10 14:07:13
>>65
>・OSが提供するスレッドハンドルで同期するなりなんなりしたらいいと考える人

謎。
スレッドハンドルだけでどうやって同期すりゃいいのよ。
子スレッドを終了させたいって時に。


>さらに前者は、子スレッドがWaitForXXX()でポーリングする羽目になることに

どうせ後者も静的変数とやらでポーリングするんでしょ。

68 :デフォルトの名無しさん:05/03/10 14:07:55
なんかロートル厨がアホの子に見えるんですが・・・。

69 :デフォルトの名無しさん:05/03/10 14:08:07
今の話題って
1.スレッドに終了するように通知する
2.スレッドハンドルで終了を待機
3.待ちきれなくなったらTerminateThread

の1.の段階でどうやってスレッドに通知するかって話題だろ?

70 :デフォルトの名無しさん:05/03/10 14:08:40
>>66
そうですか、蒸し返してスマンです。

71 :デフォルトの名無しさん:05/03/10 14:09:58
>>65で論点の挿げ替え試みるも失敗。

72 :デフォルトの名無しさん:05/03/10 14:15:53
ロートルポーリング厨は下請けゲームのべんちゃー会社なとこで数年働いたけど
Windowsプログラミングの流れについていけなくなって最近無職になった38歳。
て感じか。
仕事探そうぜ。

73 :デフォルトの名無しさん:05/03/10 14:18:14
>>65
論点を元に戻したのだが。
本格的に頭おかしいのかな、君は?

親スレッド側で子スレッド終了を同期したければすればいい。
子スレッド終了を無視したければ無視すればいい。
上記の目的を達するためだけに、CreateXXXX()で同期オブジェクトを自作する必要はない。

74 :デフォルトの名無しさん:05/03/10 14:21:29
>>72
わかってないのは、君の方だ。
自覚がないのか?

75 :デフォルトの名無しさん:05/03/10 14:24:58
>>72
は自分の経験のことを言ってるぽいw

76 :デフォルトの名無しさん:05/03/10 14:26:21
>>65
なんか論点ズレまくりだな、>>25のせいで終了処理の話しなってる
>>20はその前の段階が知りたいんだろ
>>22で回答済み

77 :デフォルトの名無しさん:05/03/10 14:29:46
前スレと同じ展開だな。
質問されてから早い段階でスマートな模範回答が出ているのに、
同期機構を自作したくてたまらない輩が無駄にスレを荒らす。

78 :デフォルトの名無しさん:05/03/10 14:36:18
同期問題を解決したらノーベル賞?ものだ

79 :デフォルトの名無しさん:05/03/10 14:43:43
主スレッド主体なら >>21
副スレッド主体なら >>22
そもそも >>20 が安全にスレッドを停止させたいのかは不明。

80 :デフォルトの名無しさん:05/03/10 14:46:34
>>25>>22の言う「静的変数」じゃなくて、イベント+タイムアウト0のWaitForSingleObjectで
状態変化を知らせた方がいいよ、ってかことを書いてるんだと思うな。

そのワーカスレッドが「特に何もしないアイドル状態」ってのを持ってるんなら、
漏れも>>25に同意。
そうではなくいつもぐるぐる回ってるんならIA64やらAlpha AXPなんか無視して静的変数を使う。

81 :デフォルトの名無しさん:05/03/10 14:54:04
>>80
少なくとも20のスレッドにはアイドル状態なんてないと思う。
アイドル状態を持つには、何らかの通知手段が必要だと思うが、
その通知手段について質問しているわけだし。

あと、誰も書いてないけど、複数のスレッドに個別に通知をしたいなら
PostThreadMessageが便利。

82 :デフォルトの名無しさん:05/03/10 15:00:35
イベントの状態情報はシグナルと非シグナルの1ビット情報。
わずか1ビット。たったの1ビット。今日日1ビット。

かたや、静的変数は何ビット情報かな?

83 :デフォルトの名無しさん:05/03/10 15:04:27
>>82
オイイーー、
分かるが、それいったら、同期オブジェクトを作るための
システムリソースはもっと膨大だろうw

84 :デフォルトの名無しさん:05/03/10 15:05:19
>>81
>あと、誰も書いてないけど、複数のスレッドに個別に通知をしたいなら 
>PostThreadMessageが便利。 


それは通知相手がUIスレッド限定。

85 :デフォルトの名無しさん:05/03/10 15:07:22
>>80
イベント+タイムアウト0のWaitForSingleObjecをわざわざ使う
メリットが見いだせない。
別にそれでもいいんだけど、無駄。

86 :デフォルトの名無しさん:05/03/10 15:11:02
汚名返上したい気持ちはわかるが、
謙虚になることも大切だよ。

87 :デフォルトの名無しさん:05/03/10 15:11:21
>>20
大漁ですな。

88 :デフォルトの名無しさん:05/03/10 15:30:03
>>82
こいつ何が言いたいんだ
メモリの領域が1ビットだとでも思ってるのか
変数でも0か1なら1ビットだろ

89 :デフォルトの名無しさん:05/03/10 15:30:49
>>85
上司や同僚に volatile 厨やメモリモデル厨がいた時のための安全策ですよ。

ってのはおいといて、イベントにしとかないとスレッド側でオーバーラップドIOとか
何かでMsgWaitForMultipleObjectExとかが使えないから、ってのもある。
完全に計算だけみたいなワーカスレッドなら不要だろうけど。

90 :デフォルトの名無しさん:05/03/10 15:47:34
>>88
本当に何が言いたいか理解できないの?

自作厨に見習って勝手に脳内で仕様変更してみる。
「子スレッドの途中終了処理を分岐させたくなったら・・・・?」

君はよく頑張った。
・・・もういいんだ。ゆっくりお休み。

そして、転職しよう。

91 :85とか:05/03/10 15:51:46
>>89
まあ、なんだか異なる前提条件を想定してるってところで、
スレの伸びの原因になってるみたいですね。

変数派:
何も書いてないからスレッドと言えばワーカスレッドだろ。
カーネルオブジェクト使ったりしたらリソース食う。

イベント派:
条件が揃えば何かと便利に使えるシーンがある。
今時のWindowsで多少リソース無駄遣いしても気にすんな。
(言ってないけど想像)

92 :デフォルトの名無しさん:05/03/10 15:57:13
最近の子供に、非同期IOを教えるのに苦労する、
リクエスト、ウエイトわかんないだって、氏ね

93 :デフォルトの名無しさん:05/03/10 16:04:07
なんか盛り上がってマスネ
まあケースバイケースって事で次逝ってみましょうか

94 :デフォルトの名無しさん:05/03/10 16:06:08
>>89

終了通知(むしろ終了要求と言った方がよいか?)と同期を混同するのはもうやめれ。全く別のことだ。
一緒になってしまうのは、そいつの設計・実装が悪いだけ。
悪い設計の道連れになったからといって、ミイラがミイラ捕りになる必要はあるまい。

95 :デフォルトの名無しさん:05/03/10 16:21:33
ミイラはおとなしくミイラに徹して棺で寝てろってこった。

96 :デフォルトの名無しさん:05/03/10 16:28:24
>>94
同期処理等で待ち合わせが発生する可能性があるなら、
終了要求(の仕方)はそれらの同期処理を考慮した上で設計する必要がある。
とうわけで、どう設計しても多くの場合「全く別」にはならないと思うよ。

メンドクサイのは確かだけれども、避けられない。
同期オブジェクトなんか使わないでポーリングで全部済ませるなら別だけど。

97 :デフォルトの名無しさん:05/03/10 16:32:06
お前らに質問。

Unicodeビルドで__TIMESTAMP__マクロを使う時、
_T(__TIMESTAMP__)がちゃんと機能する?

俺の環境だとタイムスタンプが更新されないのだが。
無論、リコンパイルして確認してる。
__TIMESTAMP__を普通にASCIIリソースとして組み込む分には大丈夫なのだが。

ようするに
○__TIMESTAMP__ ちゃんと更新される。
×_T(__TIMESTAMP__)  更新されない。つか、一体いつの時刻なんだ?

98 :デフォルトの名無しさん:05/03/10 16:35:37
>>97
_T マクロが定義されたヘッダファイルがプリコンパイルされた時刻だと思う。

99 :デフォルトの名無しさん:05/03/10 16:35:47
>>96
しつこいようだが、要求通知と完了通知がごっちゃになってないか?
似て非なるものだ。
ごっちゃになってる。

機能が、ではなく言葉の定義が。

100 :81:05/03/10 16:38:00
>>84
ワーカスレッドもメッセージキュー持てるよ。

101 :デフォルトの名無しさん:05/03/10 16:38:31
ACPもあるし

102 :デフォルトの名無しさん:05/03/10 16:40:02
Asynchronus Procedure Callね

103 :デフォルトの名無しさん:05/03/10 16:41:36
>>99
漏れは要求の通知の仕方についてしか書いてないと思うけど。
他の人もそうじゃない?
変数派とカーネルオブジェクト派がいるだけで。

104 :デフォルトの名無しさん:05/03/10 16:43:31
>>103
シー、お前嫌いw

105 :デフォルトの名無しさん:05/03/10 16:45:04
意外と、勉強なるよ、教え方が間違っているなと反省、


106 :デフォルトの名無しさん:05/03/10 16:55:41
goto文信者に近いものがあるな。
切り分けることができないと思い込んでいる。
てめえが自分で組み込んでおいて、絶対に同期が必要だと信じ込んでいるだけ。
相当に痛い。


>>84
ワーカースレッドがメッセージキューを持った時点でUIスレッドとみなされるのでは?
誰もワーカースレッドがUIスレッドに変化できないとは言ってない。
そもそもUIスレッドをいきなり作るAPIを知らないのですが。あるのでしたら是非教えてください。

107 :106:05/03/10 16:56:46
訂正します。>>84じゃなくて、>>100への質問です。

108 :デフォルトの名無しさん:05/03/10 16:57:16
>>106
gotoを否定するやつは嫌い。
エラーはすべてgotoにまとめてるw

109 :デフォルトの名無しさん:05/03/10 17:00:03
WIN32だとどのスレッドにもメッセージキューは存在してるんじゃないか?

110 :デフォルトの名無しさん:05/03/10 17:02:21
私はワーカスレッドのループ内でこげなことしとる。
int request = InterlockedExchange(requestCodeAddr, Accept);
switch (request) {
case DoQuit:
return 0;
}
InterlockedExchange()はこの板のどっかで知った。

111 :デフォルトの名無しさん:05/03/10 17:09:09
メッセージ処理機構は存在するんじゃない。自分で作るんだ。

112 :デフォルトの名無しさん:05/03/10 17:13:59
>>106
俺はウィンドウを持たずにメッセジキューだけを持つスレッドを
UIスレッドとは呼ばないぞ。

>>109
UI関係のAPIや、GetMessage/PeekMessageを一度も呼んでいない
スレッドにはキューは存在しない。
その状態でPostThreadMessageを実行すると失敗する。

113 :デフォルトの名無しさん:05/03/10 17:15:36
つくづく用語の定義が大事だな。

114 :デフォルトの名無しさん:05/03/10 17:20:06
>>112
AfxBeginThread()でUIスレッドを開始できたと思うが、
あれってウィンドウあったっけ?中の人はどうやってるのかねぇ。
いや、それ以前にウィンドウとは一体な(ry

115 :デフォルトの名無しさん:05/03/10 17:23:20
参考:UI
  http://e-words.jp/w/UI-1.html
  http://e-words.jp/w/UI-2.html

116 :デフォルトの名無しさん:05/03/10 17:29:27
レベル低いな、ホント。
所詮2ちゃんねるだってのを痛感してる。
キモイ信者が大手を振って歩いてる所だな。

117 :デフォルトの名無しさん:05/03/10 17:33:29
ぶっちゃけ、20はどこか行っちゃったから、もうこの話は終わりでいいよ。

118 :デフォルトの名無しさん:05/03/10 17:35:22
フレームってのは最初に話題振った奴なんかどうでもいいんだよ。

119 :デフォルトの名無しさん:05/03/10 17:37:45
UIスレッド
ワーカースレッド
言葉自体はMFC用語なんだよね確か

MFC使わないスレッドでも便宜上使い分けたりするけどね。
メッセージキュー = UIスレッド
にはならないと思うよ。
GetMessageとかつかってても実際UI無しの場合もあるし
COMコンポーネントの同期にも裏でこっそり使われてたような。

120 :デフォルトの名無しさん:05/03/10 17:43:29
>>106
MSDNのPostThreadMessageを見れ

121 :デフォルトの名無しさん:05/03/10 17:43:37
どちらかといえばメッセージループ主体のスレッドか否かって問題。

122 :120:05/03/10 17:46:27
スマン、UIスレッドをいきなり作るAPIだったな orz

123 :デフォルトの名無しさん:05/03/10 17:52:17
もう、俺なんぞ、スレッドの気分うかがいながらやるか、
スレッド殺すかどっちかだw

124 :デフォルトの名無しさん:05/03/10 20:37:25
>>20-124
だから、Advanced Windows 買えと。

125 :デフォルトの名無しさん:05/03/10 20:44:24
いい加減そのネタも飽きた

126 :デフォルトの名無しさん:05/03/10 21:26:56
>>109
そんなことはない。
AdvancedWindowsによるとだね、
キューはスレッドに対してメッセージ処理関数が使われた時に
初めて作成されるとなっている。
AdvancedWindowsに限らず、ちゃんと日頃から参考書を読んでおくと
余計な調べ事も減るってものだよ。

127 :デフォルトの名無しさん:05/03/10 21:35:45
>>126
かなり内側の話だね。一般プログラマが介入できる領域じゃないね。
ぶっちゃけ、( ´_ゝ`)フーンとしか言いようがない。

言葉の揚げ足取りに勤しむ者にとってはそれも重要だけどね。
物量に裏付けられた>>126の貫禄勝利。

・・・でも、ちょっと大人気ないよ。(´・ω・`)
Windowsプログラマ向けのトリビアネタなんだろうけどさ。

128 :デフォルトの名無しさん:05/03/10 21:39:38
>>127
被害妄想が強すぎです。

129 :デフォルトの名無しさん:05/03/10 21:41:26
結構、勉強になるよ、いかに、楽する方法を客と請負業者に納得させるか

130 :デフォルトの名無しさん:05/03/10 21:45:51
>>127
大人気ないのはおまえだろ。
一般書籍でしかも日本語訳までされて版数も重ねた古くからある定番本だというのに、
一般プログラマは介入できないってどうよ?
貧乏だと理由を付けても1日バイトすれば買える金額。
こんなとこ見てる暇を使って働いてこいよ。

131 :デフォルトの名無しさん:05/03/10 21:47:27
PSDKのアップデートを知ってる人はいますか?もう直ぐ新しいのが
出るのなら、今インストールするのはやめておこうかと。

132 :デフォルトの名無しさん:05/03/10 21:55:00
>>96
ワーカスレッドの代表みたいな通信系のスレッドを制御するとき、喪前は
while (true)
 WSAAsyncSelect
 WaitForMultipleObjects( { ↑のselectのイベント, 中断要求イベント ] )
 if (中断要求なら) 中断...
 通信処理
みたいにしろというんだろうけど、漏れは
while (true)
 適当なtimeoutで適当に普通の select
 if (中断要求フラグ) 中断...
 if (!タイムアウト) 通信処理
で済ましてる。なぜなら、後者はシンプルで簡単だし、
上のように書く必要があるほど性能が要求される仕事なんかしたことないから。

133 :デフォルトの名無しさん:05/03/10 21:59:12
>>132
selectはパイプがからんでくるとUnixのソケット知識が役に立たなくなる諸刃の剣。

134 :133:05/03/10 22:05:26
じゃあWiatFor・・・()ならパイプを同期オブジェクトとして待てるんですかといえば、そうでもない。
要するに俺が言いたいのは、俺はただの冷やかしだということだ。

135 :デフォルトの名無しさん:05/03/10 22:11:33
バークレイソケットインターフェース、有名ジャン

136 :デフォルトの名無しさん:05/03/10 22:18:06
有名だがあまり綺麗ではない。XTIの方がよい

137 :デフォルトの名無しさん:05/03/10 22:26:39
>>132
つまり仕事したことないんだね。
よくわかった。

138 :デフォルトの名無しさん:05/03/10 22:26:56
ぷ、歴史を考えろ、ウニックスは最高、ウニクソを馬鹿にするやつは
滅びる、たぶん

139 :デフォルトの名無しさん:05/03/11 01:15:13
ばーかばーか

140 :デフォルトの名無しさん:05/03/11 04:46:11
他のスレッドのウィンドウにSendMessageを呼ぶと、
自スレッドにキューがない場合、キューは作られますか。
作られたとしたら、GetMessage/PeekMessageを呼ばない場合
自スレッドはどうなりますか。

141 :デフォルトの名無しさん:05/03/11 05:01:52
それぐらい自分で試せ

142 :デフォルトの名無しさん:05/03/11 06:53:45
>>140
釣りだとは思うが、議論のための議論はやめれ。
プログラミングの実用に関係あるかどうかをまず考えろ。

143 :デフォルトの名無しさん:05/03/11 08:30:50
アドバンストなんか読まなくてもMSDNにこう書いてありますからー

>スレッドが Win32 のユーザー関数または GDI 関数のいずれかを最初に呼び出した時点で、
>システムはそのスレッドのメッセージキューを作成します。

144 :デフォルトの名無しさん:05/03/11 11:40:57
>141 スレッドがキューを持つかどうか、調べられません。
>142 キューに溜められるものがあると気持ち悪いので質問したのです。
>143 ワーカーからUIにPostMessageする手法はワーカーを変身させますか。


145 :デフォルトの名無しさん:05/03/11 11:44:24
PostThreadMessageのmsdnを読んでから質問してください

146 :デフォルトの名無しさん:05/03/11 13:22:35
2つの端末がケーブルでつながっていてActive Directory状態です。
端末A(kanri)から端末B(sagou)の中にあるプログラムで
端末B内のファイルを読み書きしようとしていますが、ハングして
しまいます。端末B内のプログラムをネットワーク越しに動作させる
にはどうすればよろしいでしょうか?
各端末ともIP等は振っていません。


147 :デフォルトの名無しさん:05/03/11 13:28:26
>>146
誰の権限でマシンAから、Bのローカルプログラムを実行したのか書かないの?

148 :146:05/03/11 13:56:18
すみません。
端末A(kanri)は端末B(sagou)で標準ユーザーで登録されています。
ファイルの読み書きをしようとすると落ちちゃうのですが・・・。

149 :デフォルトの名無しさん:05/03/11 14:08:46
>145 ご親切感謝します。読んで、試しました。
スレッドがキューを持つかどうかは、これで調べることが出来ました。
また、ワーカーは、PostMessage/PostThreadMessageを呼ぶと変身しました。
残る疑問は、ワーカー側のキューは放置していいのか、です。おつきあいください。


150 :デフォルトの名無しさん:05/03/11 22:53:49
クラス内でプロシージャ(コールバック関数)を宣言したところ
「overloaded-function から DLGPROCに変換できません」というエラーが出ました
これはどうゆうことなのでしょうか

151 :デフォルトの名無しさん:05/03/11 22:58:23
アドレスが取れない

152 :デフォルトの名無しさん:05/03/11 23:00:54
その関数を static にすれば、多分通る。

詳細は

thiscall
__stdcall

あたりでぐぐれ。

153 :デフォルトの名無しさん:05/03/12 13:24:51
質問です、キーを一回押すメッセージを他窓に送るにはどうしたらいいですか?
PostMessage(hWnd, WM_KEYDOWN, 0x41, ?????);
PostMessage(hWnd, WM_KEYUP, 0x41, ?????);
ここまではわかってるのですが、最後の引数の書き方が良くわかりません
0を入れてみたのですがダメでした
環境はXP+BCCです

154 :デフォルトの名無しさん:05/03/12 13:28:00
Spy++で適当なアプリでキー入力してどんな値が入ってるか見てみたら?

155 :デフォルトの名無しさん:05/03/12 14:29:21
MSDNに思いきり書いてあるわけだが。

156 :デフォルトの名無しさん:05/03/12 19:44:48
WM_KEYDOWNメッセージ
でぐぐるといっぱいでてくるなあ

157 :デフォルトの名無しさん:05/03/12 20:25:03
ITリテラシー

158 :デフォルトの名無しさん:05/03/12 20:27:50
森前首相はWIN32APIは知らないよ

159 :デフォルトの名無しさん:05/03/12 23:33:06
作ったプログラムがやけに遅いと思ったら Sleep( 1000 ); なんてコードがいたるところに…
自分で書いた記憶もないし、いったいなんなんだ?

160 :デフォルトの名無しさん:05/03/12 23:39:01
妖精さんの仕業じゃないの?

161 :デフォルトの名無しさん:05/03/12 23:40:49
Sleep坊主の仕業だな

162 :デフォルトの名無しさん:05/03/13 00:17:15
API(HTML含む)で質問です。 

任意のURLをブラウザ(IE)で表示させるときに、ShellExecuteを使用しています。 
ShellExecute(Handle, "open", URL, NULL, NULL, SW_SHOWNORMAL); 
上記だと、リンクするたびに同じIEウインドウ上に表示されてしまいます。 

これを別のウインドウに表示させる方法はありますか? 
具体的にイメージしているのはHTMLのtargetタグのようなコントロールです。 

よろしくお願い致します。

163 :デフォルトの名無しさん:05/03/13 00:25:46
>>162
c:\Program Files\Internet Explorer\iexplore.exe
を直接起動した後、DDEでメッセージを送りなされ。

164 :デフォルトの名無しさん:05/03/13 00:32:56
ShellExecuteEx

165 :デフォルトの名無しさん:05/03/13 00:38:40
>>162
openじゃなくてopennewで起動させる。

166 :デフォルトの名無しさん:05/03/13 02:37:15
行の長さを取得したいのですがどのapiを使えばいいか教えてくださいお願いします

167 :デフォルトの名無しさん:05/03/13 02:41:20
GetLineLength

168 :デフォルトの名無しさん:05/03/13 03:13:44
>>167
定義されていない識別子です

169 :デフォルトの名無しさん:05/03/13 06:56:05
lstrlen

170 :デフォルトの名無しさん:05/03/13 06:59:31
DIBで24ビットから8ビットとかにするときって自分で減色アルゴリズム組んで減色しないとできませんか?

171 :デフォルトの名無しさん:05/03/13 07:09:11
>>159
こんなコンパイラは嫌だ!その2
http://pc5.2ch.net/test/read.cgi/tech/1104805392/867

867 名前:デフォルトの名無しさん[sage] 投稿日:05/03/12(土) 23:52:18
ソースファイルの色んな所に、勝手にSleep( 1000 );を追加しているコンパイラ

172 :デフォルトの名無しさん:05/03/13 08:39:03
こんにちは

自作のテキストエディタを作っているのですが、
スクロール処理として描画を繰り返していくうちに、ウィンドウ内の表示がおかしくなります。

スクロール前
http://www.geocities.jp/devil_man_kekeke/_1.JPG
100回前後スクロールさせると、必ずこうなる。規則性がある。
http://www.geocities.jp/devil_man_kekeke/_2.JPG

これはなぜおきるのでしょうか?
ちなみに、ウィンドウを作った後、即、GetDCでデバイスコンテキストハンドルを一回取得し、それをアプリケーションが終了するまで使いまわします。
アプリケーションが終了する際に、一回だけReleaseDCを呼びます。

何か手順としておかしい点があるのでしょうか?

173 :デフォルトの名無しさん:05/03/13 09:06:55
GetDCの確保の手順がおかしい

174 :デフォルトの名無しさん:05/03/13 09:13:19
>>172,173
自演乙。

というか、消えろ。

175 :172:05/03/13 09:18:48
いえ、自演じゃなくて真面目に質問をしているんですが、
何か気にさわりましたか?

176 :デフォルトの名無しさん:05/03/13 10:54:52
>>175
だからDC確保周りがおかしいと思われるのでその辺りのソースを晒せ。

177 :デフォルトの名無しさん:05/03/13 11:32:13
OPENFILENAME構造体のlpstrFileメンバにstaticな
グローバル変数を指定してフルパスを保存してるのですが
モーダルダイアログボックスを生成すると変数の中身がおかしくなってしまいます。
原因と解決策を教えてください。お願いします

178 :デフォルトの名無しさん:05/03/13 11:43:06
>>177
素直にReleaseビルドして死を見届ける。

179 :デフォルトの名無しさん:05/03/13 11:52:23
ダウンローダを作るのはえらく簡単なことに気がついた。

180 :デフォルトの名無しさん:05/03/13 11:57:46
>>172
デバイスコンテキストはWM_PAINTの中で、
BeginPaint()で取得、EndPaint()で解放汁!

181 :デフォルトの名無しさん:05/03/13 12:00:44
>>172
任豚消えろ

182 :デフォルトの名無しさん:05/03/13 12:15:58
『猫でもわかる』を参考にテキストエディタを作っているのですが、
あえてグローバルにしたほうが良い変数ってありますか?
『猫でもわかる』だとやたらとグローバル変数が出てくるので。

183 :172:05/03/13 12:17:01
HDC hDC=GetDC(m_hWnd);
FillRect(m_hWnd,〜

これじゃ駄目なんですか。
必ず、WM_PAINTのBegin〜End間で描画ですか。
すいませんでした。

184 :デフォルトの名無しさん:05/03/13 12:17:58
Windowsの描画システムについてもっと理解するんだ。
つっても適当な本が見当たらないけど。

185 :172:05/03/13 12:21:51
>>184
すいません。
不甲斐ない自分です。

Invalidateを呼び出してイベントを送る場合、即座に描画することが出来ないと思うのですが、
アップデートイベントがくるまで描画を待たないといけなくなるので。

186 :179:05/03/13 12:22:01
簡単なんだけど分からないことがある。
InternetOpenUrl( or Others)で404errorを検出するにはどんなフラグを
設定すればいいのかな?
今は、第5引数のdwFlagsに
INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RAW_DATAを設定してます。
お願いします。

187 :179:05/03/13 12:23:45
>>186
追加
404errorでもInternetOpenUrlは成功しちゃう。

188 :デフォルトの名無しさん:05/03/13 12:27:45
>>185
WM_PAINTメッセージはシステムでの優先順位がとっても低いから、
必要なら直接GetDCで描画するのもアリだよ。
WM_PAINT呼ぶためにInvalidateRectする必要はないと思う。

189 :デフォルトの名無しさん:05/03/13 12:35:42
GetDCで確保したDCは使い終わったらとっととReleaseDCしろ。使いまわそうとか考えるな。

190 :172:05/03/13 12:38:45
>>188
だとすると
GetDCで一回取得したハンドルを使って、
何回も描画すると、必ずバグのような表示になるのですが。

m_hDC=GetDC(m_hWnd);

なぜなのでしょうか?
ReleaseDCを逐次よばないといけないのでしょうか?

191 :172:05/03/13 12:40:22
>>189
そうなんですか。
スクロール処理などで、何回も描画を繰り返す場合、一回スクロールするたびに、GetDC、ReleaseDCを呼び出すんですね。?

わかりました。
ありがとうございます。

192 :デフォルトの名無しさん:05/03/13 12:48:50
>>185
>>アップデートイベントがくるまで描画を待たないといけなくなるので。

んなことない。
InvalidateRect()の後に
すぐ描画したければUpdateWindow()
描画をやめたければValidateRect()を呼ぶ。
再描画のことを考えると、WM_PAINTで処理するのが定石だと思うが。

193 :デフォルトの名無しさん:05/03/13 13:21:46
>>182
自分の場合、1つのプロセスの中で値が変化せず、参照頻度の高いものはグローバル変数にしてる。
モジュールのハンドルとかプロセスヒープのハンドルとか。それら以外は基本的には使わないなあ。

194 :179:05/03/13 13:32:57
自己解決しました。一応ご報告まで。

195 :デフォルトの名無しさん:05/03/13 14:01:38
俺も自己解決したよ
ここの住人はスキル無さ杉

196 :デフォルトの名無しさん:05/03/13 14:09:19
>>193
どもっす。

197 :デフォルトの名無しさん:05/03/13 14:10:15
スキルがモリモリあるような奴がこんなスレじーっと見とるわけなかろ?


198 :172:05/03/13 14:28:39
原因がわかりました。

スクロールの際、

font=::CreateFontIndirect(&logfont);

SelectObject(hdc,font);

を度々呼び出していたので、途中でおかしくなってたようです。
これを外したら、直りました。

WindowUpdateも結構ですけど、GetDCで取り出して即特定の描画をするほうがやりやすいです。
どうもありがとうございました。

199 :デフォルトの名無しさん:05/03/13 14:39:11
>>198
いや、描画はBegin〜End間でしたほうがいいよ。
そうしないと、何かしら不具合出ると思う。
そのへん、うまくコードを組んで。

200 :デフォルトの名無しさん:05/03/13 15:03:39
デバイスコンテキストを「単なる描画時のおまじない」くらいにしか理解していないんだろ。
たのむからそんなテキストエディタ公開するなよ。

201 :デフォルトの名無しさん:05/03/13 15:11:38
>>200
頼まれてもしない

202 :デフォルトの名無しさん:05/03/13 15:17:44
アプリケーションが自分ひとりで動いているんじゃないんだから、
ちゃっとルールは守っとけ。

203 :デフォルトの名無しさん:05/03/13 15:33:03
初心者に無理いうな
育てはぐくむこと(後継者探し)も大切だ

204 :デフォルトの名無しさん:05/03/13 15:40:06
スクロールするたびにフォント作ってたんじゃ、おかしくなるわな(w

205 :デフォルトの名無しさん:05/03/13 15:41:55
>>198
http://www.kab-studio.biz/Programing/Codian/MxA/08.html
これ読めばモーマンタイだよ

206 :デフォルトの名無しさん:05/03/13 16:40:46
WM_PAINTの中で更新リージョンを有効にしないと
WM_PAINTメッセージがたまっていく
そのため領域を有効にするにはBeginPaintかValidateRectを
呼ぶ必要があるってことですか

この辺曖昧だったorz

207 :デフォルトの名無しさん:05/03/13 16:43:38
とあるプログラムで、mciSendStringを使ってMIDIを再生させています。
このプログラムはWin98で作成したものなんですけど、Win95/98では正常に動作していました。
で、このプログラムをWin2000/XPで実行させたところ、とりあえず動作はするんですが、
MIDIをOpenするところで3〜5秒程度時間が掛かるようになってしまいました。

同じプログラムをWinXPでCompileしても状況は変わりません。
Compile の環境はVC++6.0です。

mciSendStringでOpenさせているところのCodeは、
ファイル名とエイリアスは適当ですが、下のような感じです。
mciSendString("open "a.mid" type sequencer alias a00 wait", NULL, 0, NULL);

何か御存知の方いらっしゃいましたら、教えて下さると嬉しいです。

208 :デフォルトの名無しさん:05/03/13 16:53:49
ウィンドウズプログラミングしてる時点である程度頭イイと思われ。
そこら辺歩いてる雑草には、ウィンドウズプログラミングの「ウ」の字も理解できんぞ。
理解するだけの勉強もできんだろーし。

209 :デフォルトの名無しさん:05/03/13 17:03:52
ワラタ

210 :デフォルトの名無しさん:05/03/13 21:00:23
>>207
MIDI音源の所為だと思う

211 :デフォルトの名無しさん:05/03/13 21:07:05
>>206
WM_PAINTはキューに溜まらないんじゃなかったっけ?
なんか優先度が他と違うと聞いた事がある。
記憶が曖昧でスマソ。

212 :デフォルトの名無しさん:05/03/13 22:06:34
阿呆が馬鹿に回答するスレはここですか?

213 :デフォルトの名無しさん:05/03/13 22:12:34
>>212
いえ、ストレスが溜まってるドカチンWinプログラマーのはけ口です。

214 :デフォルトの名無しさん:05/03/13 22:37:52
>>211
WM_PAINTは更新リージョンが存在しメッセージキューが空の場合に生成される。
てことはBeginPaint〜EndPaint等で更新リージョンを無効化しない限りキューが空になるたび永遠に生成されつづけるってこった。

215 :デフォルトの名無しさん:05/03/13 23:39:20
WinAPIでの質問です。
HWNDから取り出したHBITMAP bm_fと、ファイルのHBITMAP bmを比較したいのですが
その比較の方法が分かりません。

BOOL chkimg(bm_f, bm, x, y)と言った感じで
bm_fのx,y地点からbmが同一であるかを取得したいです。


216 :デフォルトの名無しさん:05/03/14 00:15:41
>>215
メモリDCを作ってSelectObjectしてGetPixel

217 :デフォルトの名無しさん:05/03/14 00:35:36
DDBからDIBに変換してファイルかメモリで直接比較した方が速いだろうけど
面倒ならGetPixelでもいいかもね。
ビットマップの比較なんてしたことないからわからんないけど、
色とかって一致する保障あるのかねえ。
ICMとかは影響しないのかな。

218 :デフォルトの名無しさん:05/03/14 01:54:43
 || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
 || ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。
 || ○放置された荒らしは煽りや自作自演であなたのレスを誘います。
 ||  ノセられてレスしたらその時点であなたの負け。
 || ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを
 ||  与えないで下さい。                  Λ_Λ
 || ○枯死するまで孤独に暴れさせておいて   \ (゚ー゚*) キホン。
 ||  ゴミが溜まったら削除が一番です。       ⊂⊂ |
 ||___ ∧ ∧__∧ ∧__ ∧ ∧_      | ̄ ̄ ̄ ̄|
      (  ∧ ∧__ (   ∧ ∧__(   ∧ ∧     ̄ ̄ ̄
    〜(_(  ∧ ∧_ (  ∧ ∧_ (  ∧ ∧  は〜い、先生。
      〜(_(   ,,)〜(_(   ,,)〜(_(   ,,)
        〜(___ノ  〜(___ノ   〜(___ノ

219 :218:05/03/14 01:56:30
スマソ間違えた

220 :デフォルトの名無しさん:05/03/14 01:57:43
気にするな

221 :デフォルトの名無しさん:05/03/14 10:10:06
LoadLibrary()でexeファイルを指定できるわけだが、
これは何に利用するものなの?
GetProcAddress()でexeファイルがエクスポートした関数も呼べるみたいだし。
ただし、標準C/C++ライブラリとかの初期化がうまくいってないみたいなので、
標準C/C++の関数を使うと処理が失敗しているみたいだ。

あとひとつ質問が。
exeが関数エクスポートできるけど、これは何に使うものなの?

222 :デフォルトの名無しさん:05/03/14 10:27:55
アフォか?

223 :デフォルトの名無しさん:05/03/14 10:42:45
>>222
アフォっぷりを論理的に説明して貰えないかな?
失敗するのはC/C++関数だけではなく普通のWin32APIも失敗するみたい。
デバッグでちゃんとexe内のエクスポート関数に対話的にステップインできるし。

224 :デフォルトの名無しさん:05/03/14 10:50:10
>222ではないが、>223に質問。
dllとexeの違いは何と心得る?

225 :デフォルトの名無しさん:05/03/14 11:00:09
>>224
質問返しは全く得るものがない。邪魔です。荒らさないでください。
中国の方でしょうか?日本的でない論理展開を感じます。


>>224以外のどなたか、EXEが関数エクスポートできる理由を
ご存知の方いませんか?

226 :デフォルトの名無しさん:05/03/14 11:02:36
>>224
悪いが、>>225の言うとおりだ。
技術系スレで議論のための議論はやめれ。

227 :デフォルトの名無しさん:05/03/14 11:15:07
exe単体でグローバルフックをかけるソフトを昔見たけど。それは
そういうのをつかってたんじゃないかな。初期化できるようにする方法
もあるんだと思う。

228 :デフォルトの名無しさん:05/03/14 12:54:22
>>221
ランタイムの初期化がうまくいかないのは、
EXEに積んであるのがDLL用のスタートアップじゃないからだろうね。
LoadLibraryはDllMainとかのDLL形式のエントリポイント呼び出すから。
おそらく、EXEのGetModuleHandleで返されたハンドルからGetProcAddressを
使うことでうまくいく様な気がする。
EXEのエクスポートテーブルはollydebugとかにも入ってるけど、
プラグイン用のインターフェースに使えるんじゃないかな。
>>227の言うフックと関係あるのかは知らない。

229 :デフォルトの名無しさん:05/03/14 13:27:21
今実験してみたけどGetModuleHandleで問題ないみたい。


230 :デフォルトの名無しさん:05/03/14 13:59:04
前から、ちと疑問に思ってたんですが、
小さなexeの作り方は解っていますが、
メモリ使用量を小さくしたアプリはどう作られてるのか知ってる人いますか?

ウィンドウを持ずに、10秒程度スリープするだけのexe作って、
プロセスヒープサイズを小さくしてもタスクマネージャで見た
メモリ使用量が1M程度から下がりません。

System Idle Process見たいなメモリ使用量ってどうやって実現するのでしょうか・・・。

231 :デフォルトの名無しさん:05/03/14 14:03:24
>>230
アセ

232 :デフォルトの名無しさん:05/03/14 14:08:52
>>230
その1Mはたぶんスタックだ。
ぎりぎりまで減らせ。

233 :デフォルトの名無しさん:05/03/14 14:12:57
>>231 >>232
なるほど。
了解です早速試してみますね。
有難うございました。


234 :デフォルトの名無しさん:05/03/14 14:33:02
>>228,229
GetModuleHandle()の引数には他の外部EXEを渡して試した?
なんか、テスト前提が違ってるような・・・。

235 :デフォルトの名無しさん:05/03/14 14:44:35
EXE兼DLLってどうやって作るんだ?
自分自身がEXEとして起動したのかDLLとして起動したのかをどうやって判断するんだろう。



236 :234:05/03/14 14:59:28
あらかじめLoadLibrary()で外部EXEを読み込んでおかないと、
GetModuleHandle()できないはずだし。
いや、それ以前に、LoadLibrary()の返すHMODULEと
GetModuleHandle()の返すHMODULEは同じものだ。
ある意味、当たり前だけど。

237 :デフォルトの名無しさん:05/03/14 15:11:32
プラグインでコールバック云々っていうからにはDLLがGetModuleHandle(NULL)して得たEXEのHMODULEからGetProcAddress()するってことじゃないのか?

238 :デフォルトの名無しさん:05/03/14 15:19:28
>>237
それが意味のあることかどうか、よく考えてからレスしてくれ。

239 :デフォルトの名無しさん:05/03/14 16:25:33
EXEが関数をエクスポーとしているのはDLLに機能提供するためじゃないか?
あるアプリとそれ用のプラグインDLLとの間で、アプリからプラグインに対して、エクスポートした関数を使って
色々とやりとりしたりとか。

240 :デフォルトの名無しさん:05/03/14 16:47:00
>>234-235
何か勘違いしてるね。
EXEにエクスポートテーブルがあるからといって、
そのEXEがそのままDLLの代わりになるなんてことはない。
>>228はEXEの関数をDLL側に提供するって事。
DLLの仕組み的にEXEとの兼用はたぶん無理じゃないかな。


241 :デフォルトの名無しさん:05/03/14 16:48:45
まさかとは思うが、単にコンパイラとリンカが
exeの関数エクスポート生成の拒否を怠っているだけ、なんてこたーないよな?

242 :デフォルトの名無しさん:05/03/14 16:55:17
>>240
>EXEの関数をDLL側に提供するって事。

あいかわらず曖昧。
EXEのエクスポート関数を他DLLファイルの内部で呼べるようにするという意味?
EXEの関数をDLLとして提供するという意味?
文章の"DLL側"とは何を意味するかをまずはっきりさせてもらいたい。

243 :デフォルトの名無しさん:05/03/14 17:02:17
>>242
前者。

244 :デフォルトの名無しさん:05/03/14 17:29:00
>β版とは違う話題で恐縮ですが、こちらで質問させていただきます。
>
>プラグインSDKで利用できるAPIは、やはりメタセコ本体が起動していないと上手く動作しないのでしょうか?
>つまり、例えばプラグインからではなく、単体のアプリから本体exeファイルをLoadLibrary()して、APIのみGetProcAddress()でインポートして呼び出すような事では、使用できないのかなということです。
>
>一応簡単なテストプロで試してみた限りでは、エラーが発生してしまいました。
>もしかしたら使い方が悪かった可能性も残っているので、質問してみました。
>
>ちょっと単独のMQOデータを扱うツールを作る場合、曲面化とかミラーリングのフリーズ機能が使えると助かるなぁと思ったもので。

245 :デフォルトの名無しさん:05/03/14 17:46:21
なんか知らないけど痛いなあ・・

246 :デフォルトの名無しさん:05/03/14 21:01:49
質問ですが、

MyApp.cpp
void CMyApp::FuncA(){
m_hRgn==CreateRectRgn(5,5,100,100);
}

MyApp.h
class CMyApp{
public:
HRGN m_hRgn;
};

FuncA()でリージョンを作成したあと、ウィンドウプロシージャ内で、
描画のために再利用をしようとしても、正常に描画されません。
ウィンドウプロシージャにかかわらず、一度作成した後、他の関数内で再利用すると、
そのリージョンが機能しません。
リージョンだけ特別な仕様なのでしょうか?
他のブラシ、ペンなどのオブジェクトはそのような異常なことは起きず、
どこでも再利用できます。

これはどうしてなのでしょうか?

247 :246:05/03/14 21:02:32

//オーバーライド可能なウィンドウプロシージャ
LRESULT CXSWndBalloon::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hDC;

switch (message)
{
case WM_COMMAND:

(一部省略)

case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
HBRUSH hOrange;

hOrange=::CreateSolidBrush(RGB(250,124,134));
::FillRgn(hDC,m_hRgn,hOrange);
DeleteObject(hOrange);
EndPaint(hWnd, &ps);
break;

248 :デフォルトの名無しさん:05/03/14 21:08:10
>>246

> m_hRgn==CreateRectRgn(5,5,100,100);
>
"=="は転記ミス?

249 :デフォルトの名無しさん:05/03/14 21:10:01
>>246
m_hRgnはCMyAppのメンバではないのか?
CXSWndBalloon::WndProcの::FillRgn(hDC,m_hRgn,hOrange);で使ってるm_hRgnと何か関係があるのか?


250 :デフォルトの名無しさん:05/03/14 21:13:14
.NETじゃないの?<EXE兼DLL

251 :デフォルトの名無しさん:05/03/14 21:19:52
Build27より


756 名前: デフォルトの名無しさん 05/02/08 01:04:27
すみません教えてください

APP(A)からDLL(B)を呼び出しているのですが、DLL(B)からさらにDLL(C)をLoadLibrayでロードしています。
DLL(C)からDLL(B)の関数をGetProcAddress()で読んでいるのですが、DLL(C)はハードコーディングで
GetProcAddress(GetModuleHandle(NULL), "Foo")
みたいになっちゃっていてどうもAPP(A)の空間しか見れて無いらしくDLL(B)の関数がGetProcAddressできてません。
明示的にAPP(A)の関数の名前空間にDLL(B)に関数も含めるにはどうすればいいのでしょうか?


766 名前: デフォルトの名無しさん 05/02/08 14:14:47
>>756
APP(A)に"Foo"関数をエクスポートさせて(保障されてるかは知らない)
APP(A)の"Foo"からDLL(B)の関数を呼んでみてはどうだろか。


768 名前: デフォルトの名無しさん 05/02/08 15:12:06
>>756

>>766 と似たようなもんだけど、APP(A) で forwarder RVA で
DLL(B) の関数をエクスポートする。APP(A) の .def ファイルで、

EXPORTS
Foo = B.Foo

って書くのねん。(ファイル名が B.DLL の場合)

252 :デフォルトの名無しさん:05/03/14 21:23:28
>>250
それは事実だが、今問題なのはLoadLibrary関数の仕様だろ?

253 :デフォルトの名無しさん:05/03/14 21:30:49
>>252
メインへのクラスパスを含んだDLLが.NETのEXEだ
くらいなざっくりとした感覚でいいじゃん
世の中単純に行こうよ

254 :デフォルトの名無しさん:05/03/14 21:33:49
なあ、ここってWin32APIのスレだよな?

255 :246:05/03/14 21:53:39
m_hRgn==CreateRectRgn(5,5,100,100);

は、
m_hRgn=CreateRectRgn(5,5,100,100);です。すいません。

256 :デフォルトの名無しさん:05/03/14 22:25:27
>>254
ご安心下さい。
当機は操縦不能に陥っていますが管制塔との通信は繋がっております。


257 :デフォルトの名無しさん:05/03/14 23:14:49
>>246
とりあえず、
FuncA()で生成したリージョンを含むサイズの矩形リージョンを
描画直前にCreateRectRgn()でつくって
CombineRgn()で合成してできたリージョンを使ってみるとか・・・

258 :デフォルトの名無しさん:05/03/14 23:34:44
「リージョンは毎回作る必要があります」とドキュメントに書かれています


259 :デフォルトの名無しさん:05/03/15 00:03:37
>>246
SetWindowRgn()が成功すると、システムはhRgnで指定したリージョンを所有する。その際、リージョンのコピーは作成されないので、
これ以降はこのリージョンハンドルに対して関数を呼び出すべきではない。
必要ならGetWindowRgn()でコピーを作成し、使用する。

260 :デフォルトの名無しさん:05/03/15 00:26:34
>>259
>>246-247のどこでSetWindowRgnが使われていると言うのだ?

261 :259:05/03/15 00:46:19
>>260
勘違いですた。スマソ。

262 :デフォルトの名無しさん:05/03/15 01:10:47
ここって一人、キチガイが常駐してるよね。
なんとなく・・・

263 :デフォルトの名無しさん:05/03/15 01:13:03
俺のこと?

264 :デフォルトの名無しさん:05/03/15 01:17:32
よかった。そういう自覚は持ってるのね。

265 :デフォルトの名無しさん:05/03/15 01:18:51
>>262

266 :デフォルトの名無しさん:05/03/15 01:26:57
>>265がキチガイ。
なんとなくというか、非常にわかりやすいと思うが。

267 :デフォルトの名無しさん:05/03/15 07:14:54
>>266

268 :デフォルトの名無しさん:05/03/15 08:03:15
hwnd = GetForegroundWindow ();
で得たウィンドウを横スクロールしようと思って、
PostMessage (hwnd, WM_HSCROLL, MAKEWPARAM (SB_LINELEFT, 0), NULL);
PostMessage (hwnd, WM_HSCROLL, MAKEWPARAM (SB_ENDSCROLL, 0), NULL);
としてメモ帳などで試しても、スクロールしてくれませんでした。
どうすれば、スクロールするようになるんでしょうか?

269 :デフォルトの名無しさん:05/03/15 08:12:36
PostMessageとSendMessageの違いを教えてください。
Send:そのウィンドウプロシージャがメッセージを処理し終わったら
Post:メッセージをメッセージキューにポストして直ちに
制御を返す、と書いてあるんですが、よく分かりません。

270 :デフォルトの名無しさん:05/03/15 08:27:52
>>269
そのまんまじゃん・・・

そのメッセージの処理に10秒かかるとしたら、
SendMessageの次の処理を実行するまで、10秒以上かかる。

PostMessageだとキューにポストしたら、すぐに次の処理に移る。

271 :269:05/03/15 08:37:11
>>270
こんな感じですか?

マウスの左ボタンが押された

PostMessage or SendMessage

PostMessageなら、メッセージを送る

そのコールバックを終わらせず、10秒while文などで待つ

そのコールバックが終わる

SendMessageなら、メッセージを送る

272 :デフォルトの名無しさん:05/03/15 08:43:14
SendMessageはそのウィンドウのウィンドウプロシジャーをそのまま呼び出してる見たいな感じ
処理が終わるまで戻らない

PostMessageはメッセージを送るだけで返ってくる、あとはOS任せ

273 :デフォルトの名無しさん:05/03/15 08:45:16
>>271ちゃうでしょ

関数A内で << SendMessage >> によりマウスの左ボタンが押されたというメッセージを送る

WindowProcが送られたメッセージを処理

メッセージの処理が終わり次第、関数Aに処理が戻る
(SendMessageで送ったメッセージの処理が終わるまで処理を返さない)


関数B内で << PostMessage >> によりマウスの左ボタンが押されたというメッセージを送る

キューにメッセージを挿入し関数Bに処理が戻る
(キューにメッセージを挿入した時点ですぐに戻る)

WindowProcが送られたメッセージを処理
(メッセージ処理のタイミングはキュー次第)

要するに、SendMessageは同期関数で、PostMessageは非同期関数
と言ったほうが解りやすいかな。

274 :269:05/03/15 08:49:24
>>272
SendMessage:関数の再帰呼び出しみたいな感じ
PostMessage:単純なメッセージ送信
みたいな感じですか?

275 :269:05/03/15 08:56:04
>>273
詳しくて分かりやすいです。何となく分かった気がします。

お答えくださった皆様、どうもありがとうございました。

276 :デフォルトの名無しさん:05/03/15 09:28:45
PostThreadMessage()はあるが、SendThreadMessage()はない。
推して知るべし。

277 :269:05/03/15 11:13:11
>>276
なるほど。
それはまだ使った事が無いですが、その仰る意味は何となく分かりました。

278 :デフォルトの名無しさん:05/03/15 13:11:49
質問です。

Windowsのペイントにあるツールボックスやカラーボックスみたいに
ウィンドウの画面端に来るとピタッとくっつくようなものを作りたいんですが、
これはウィンドウクラスやCreateWindowEx()のスタイルの設定で
作れるようなものなんでしょうか?
それとも画面端に来ると自分でウィンドウサイズを変更して
そのような動作をするようにしているんでしょうか?

よろしくお願いします。m(__)m

279 :デフォルトの名無しさん:05/03/15 13:16:28
>>278
ドッキングウィンドウの事か?

280 :デフォルトの名無しさん:05/03/15 14:04:51
>>278
それはMFCでないと実現できないと思う。
もしくは、Win32を使って独自にシステムを作るか。

MFCの場合、
・CControlBar
・CToolBar
・CDockBar
を用いて実現するみたいだけど。
この辺グーグルすれば見つかるはず。

281 :デフォルトの名無しさん:05/03/15 14:41:30
>>276
お前は、>>224だろ。
何もわかってないくせに古老みたいな態度とってんじゃねーよ。
知識・経験の浅さがばれてんだよ。

自分でプログラムを走らせて確認せずに、
ドキュメント読んだだけで理解したと錯覚してるのは滑稽だぞ。

282 :デフォルトの名無しさん:05/03/15 14:47:11
ちょっと特定のアプリケーションの話になってしまうのですが、現在EdMaxという
メーラーで、メール本文の表示画面で選択された文字列を加工してファイルに
出力するプラグインを書いています。

プラグインのSDKで表示(ビュー)画面のウィンドウハンドルは取得できるのですが、
EM_GETSEL, EM_GETSELTEXT, EM_GETTEXTEX のどれを使っても正しく取得できません。
空文字列又は0が返ってしまいます。WM_GETTEXTでも空文字列になってしまいます。

ウィンドウハンドルはSpy++で確認した値と同じなので正しく取得できていると思うのですが、
これで選択文字列を取得するにはどのようにすればいいのでしょうか。

↓こんな感じのコードです
---
char buf[1024*64];
eda.GetStaticWindows(&phWnd, &phFolder, &phList, &phView, &phAttach);
SendMessage(phView, EM_GETSELTEXT, 0, (LPARAM)buf);


また、対象のウィンドウはRich Edit Controlだと思っているんですが、それを確認する方法
などはあるのでしょうか。

283 :デフォルトの名無しさん:05/03/15 14:50:19
>>277
腐った>>276みたいな野郎に騙されるなよ。

別プロセス・別スレッドのウィンドウにもSendMessage()できる。
どうしてSpy++がウィンドウキャプション文字列を取得できるのか、考えてみろ。

技術の世界においては、
悠然と構えてる奴・詩歌的記述を好む奴は、ただの無能者だと思え。

284 :デフォルトの名無しさん:05/03/15 14:52:59
>>282
>対象のウィンドウはRich Edit Controlだと思っているんですが、それを確認する方法などはあるのでしょうか。

Spy++ クラス名見ればわかるだろ。

285 :デフォルトの名無しさん:05/03/15 14:54:34
>>283
SendMessage()とPostMessage()の違いの話じゃないのか?

286 :284:05/03/15 14:55:34
>>284
×Spy++ クラス名
○Spy++ でクラス名

orz

287 :282:05/03/15 15:03:07
>>284
情報不足ですみません。
MFCで作られているためか、クラス名は「Afx:400000:b:0:1900010:0」でした。

これから元の(?)クラス名を調べることもできなさそうな感じでして…。
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/vccontn070mfcwindowclassnames.asp

288 :デフォルトの名無しさん:05/03/15 15:05:48
どっかからのSendMessage処理中に
その処理の中でまたSendMessageって呼んでも良いんですか?

289 :デフォルトの名無しさん:05/03/15 15:07:04
>>288
再帰処理がいつから禁止になったの?脳内限定?

290 :デフォルトの名無しさん:05/03/15 15:10:50
>>289
質問を質問で返すのはマナーに反します。
社会人になったらやってはいけませんよ。

291 :デフォルトの名無しさん:05/03/15 15:11:04
>>288
いいけど、AとBが別スレッドの時
AからBへSendMessage
応答したBからAへSendMessage
するとデッドロックする。

292 :デフォルトの名無しさん:05/03/15 15:12:28
それは恐ろしい。

293 :デフォルトの名無しさん:05/03/15 15:27:25
SendMessage(SendMessageCallBack)

ウィンドウプロシージャ直呼び出し・処理

ウィンドウプロシージャの処理終了したら

制御を返す(指定したコールバック関数を呼び出し、後処理)


PostMessage

メッセージキューに、メッセージを追加。

追加後、即制御を返す。
  →そのメッセージの順番がきたらOS側で処理



バス停で、皆が順番どおり並んでいる時、
 ・礼儀を知らないじーさんが突然先頭に割り込む→SendMessage
 ・常識どおり、列の後ろに並ぶ普通の人→PostMessage

294 :デフォルトの名無しさん:05/03/15 15:28:02
>>292
別に恐ろしいというほどでもないっしょ。

メッセージに応答しない(描画さえしない)糞アプリなぞ世の中に無数にあるじゃないか。
デッドロックが深刻な問題になるのはUIをもった可視アプリではなく、サービスなどの不可視アプリの話。

余談になるが、WindowsXPからは、
フリーズした糞アプリの可視ウィンドウの位置を強制移動できるようになってる。
XPを糞とみなす2000ユーザはこの密かな拡張をも軽視するのだろうがな。

295 :デフォルトの名無しさん:05/03/15 15:33:38
>>293
残念ながら、たとえ話として不完全だ。

>バス停で、皆が順番どおり並んでいる時、 
> ・礼儀を知らないじーさんが突然先頭に割り込む→SendMessage 
> ・常識どおり、列の後ろに並ぶ普通の人→PostMessage 

自分が運転手の立場ならそれでよいが、
自分が客の立場だった場合の意味が、間違ってさえいる。

296 :デフォルトの名無しさん:05/03/15 15:45:36
post - 郵便受けに入れる普通の郵便
send - 中の人に直接渡す書留

という例えはどうか?

297 :デフォルトの名無しさん:05/03/15 15:57:58
日曜日に困るな。

298 :デフォルトの名無しさん:05/03/15 16:03:21
年中無休24時間営業

299 :278:05/03/15 16:15:05
>>279>>230
ドッキングウィンドウで検索してみたら
ttp://techtips.belution.com/ja/vc/0004/
トップに↑のサイトが見つかりました。

そうです!まさにこれと同じようなことがしたかったんです!!

・・・が、MFCはさっぱり分からんので諦めることにしました。_| ̄|○
失礼しました。(´Д`;)

300 :デフォルトの名無しさん:05/03/15 16:18:16
いや、普通にsdk/cでコード書けばできるから。

301 :デフォルトの名無しさん:05/03/15 16:24:00
いや、むしろWin32よりMFCのほうが簡単なんだけど…。

302 :デフォルトの名無しさん:05/03/15 16:24:25
WTLつかっとけ

303 :デフォルトの名無しさん:05/03/15 16:26:47
自分で書くのは無理じゃね?似たようなのなら作れるだろうけど
WTLには無いでしょ

304 :デフォルトの名無しさん:05/03/15 16:32:44
DockコントロールあるクラスライブラリってMFCとVCL以外になにかあったっけ?

305 :デフォルトの名無しさん:05/03/15 16:35:42
というか、ドッキングツールバーってかなり使いづらいけどね。
ドッキング機能を使いこなしたことはないな。
いらない。

306 :デフォルトの名無しさん:05/03/15 16:56:49
wxWidgets にドッキングウィンドウライブラリが入ってますよ。

307 :デフォルトの名無しさん:05/03/15 17:04:58
ビットマップからトリミング(スケーリングはしない)されたビットマップを作成するにはどうしたら良いでしょうか?
元のビットマップが上書きされるのは構いません。


308 :デフォルトの名無しさん:05/03/15 17:09:57
>>307
BilBltのどこが不満なんだ?

309 :デフォルトの名無しさん:05/03/15 17:10:35
名前

310 :デフォルトの名無しさん:05/03/15 17:13:07
BilBlt ビルゲイツご用達のもの
通常はBitBltを使用する

311 :デフォルトの名無しさん:05/03/15 17:19:46
>>294
>余談になるが、WindowsXPからは、
>フリーズした糞アプリの可視ウィンドウの位置を強制移動できるようになってる。
>XPを糞とみなす2000ユーザはこの密かな拡張をも軽視するのだろうがな。

なんとなく役に立ちそうに見えて実は全然無意味なんだよね

312 :デフォルトの名無しさん:05/03/15 17:25:33
可視ウィンドウの位置を強制移動ができたからって、
なにかいいことでもあるの?

313 :デフォルトの名無しさん:05/03/15 17:29:15
>>312
ログ検索中のかちゅ〜しゃのウィンドウを移動させられる

314 :デフォルトの名無しさん:05/03/15 17:45:43
かちゅーしゃってログ検索するだけでフリーズするんだ(わらい

315 :デフォルトの名無しさん:05/03/15 18:10:11
>>308 >>310
CreateBitmapで欲しい大きさの空Bitmap作って
そこにBitBlt(to_mdc,0,0,width,height,from_mdc,x,y)で上書きでよろしい?


316 :デフォルトの名無しさん:05/03/15 18:10:41
SRCCOPY付け忘れた

317 :デフォルトの名無しさん:05/03/15 19:08:45
ビットマップに上書きというより、メモリDCに上書きってことでしょ?

318 :デフォルトの名無しさん:05/03/15 20:23:04
>>317
うう、違いがよくわかりません。

スクリーンショットの一部を書き出したかったのですがうまくいきません。
指定範囲が真っ黒に塗りつぶされるだけなのです。どうすればうまくいくのでしょうか?

HWND hDesktop = GetDesktopWindow();
HDC hdc = GetDC(hWnd);
HDC hDesktopDC = GetDC(hDesktop);
HDC mdc = CreateCompatibleDC(hDesktopDC);
HBITMAP hBitmap, hOldBitmap;
hBitmap = CreateCompatibleBitmap(mdc,1152,864);
hOldBitmap = (HBITMAP)SelectObject(mdc,hBitmap);
BitBlt(hdc,100,100,300,300,mdc,0,0,SRCCOPY);
SelectObject(mdc,hOldBitmap);
DeleteDC(mdc);
ReleaseDC(hWnd, hdc);
ReleaseDC(hDesktop, hDesktopDC);
UpdateWindow(hWnd);


319 :デフォルトの名無しさん:05/03/15 20:25:53
スクリーンショットじゃなくてデスクトップの背景でした。


320 :デフォルトの名無しさん:05/03/15 20:31:11
mdcに最初選択されているビットマップは2色ビットマップで
それと互換のビットマップhbitmapを作れといったから
hbitmapが2色だから

だから、そこはmdcじゃなくてhdcかhdesktopdcにする

321 :デフォルトの名無しさん:05/03/15 20:32:54
srcDCとdstDC逆じゃネ?

322 :デフォルトの名無しさん:05/03/15 20:38:13
hbitmapのDeleteは?

323 :デフォルトの名無しさん:05/03/15 20:42:21
>>320
出来ました。感動です。ありがとうございました。
そしてやはりスクリーンショットであってることを確認 orz

>>321
背景を窓に描く仕様ですので、あっとりました。

324 :デフォルトの名無しさん:05/03/15 20:42:53
>>322
うおっ、ありがとう修正します orz


325 :デフォルトの名無しさん:05/03/15 20:56:31
すごい初歩的なことですみませんが、フォルダの表示で詳細にすると
名前、サイズ、種類、更新日時と出ますよね。
このような感じで表示するのはどのAPIなんでしょうか?
リストボックスかなと思っていろいろとやってみたんですが、なんか違うみたいです


326 :デフォルトの名無しさん:05/03/15 20:57:36
リストビュウ

327 :デフォルトの名無しさん:05/03/15 21:01:48
>>326
おお、ありがとうございます
listviewですね

プログラムWindows買ったのに載ってないっぽい・・・
OTL

328 :デフォルトの名無しさん:05/03/15 21:10:55
>>327
MSDN

329 :デフォルトの名無しさん:05/03/15 21:17:30
コントロールを画像一覧にしてリンクしてないMSDNって何気に不便。
そういうサイトってあるのかな?

330 :デフォルトの名無しさん:05/03/15 23:49:52
>291 ネタか。良い子はあどを読みましょう。

331 :デフォルトの名無しさん:05/03/16 00:26:54
>>330
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
デッドロックの所見ると、SendMessageはコントロールを譲渡するから大丈夫だね。

332 :デフォルトの名無しさん:05/03/16 00:48:22
1行の文字数を取得したいのですがどのAPIを使えばいいか教えてください。お願いします

333 :デフォルトの名無しさん:05/03/16 00:53:52
デスクトップで右クリックすると出てくる「最新の情報に更新」。
コレって、WinApiから呼び出せるんでしょうか?
もしくはコレに近い関数があれば教えてください。

334 :デフォルトの名無しさん:05/03/16 01:12:07
>>332
その1行とやらはどこにあるんだ?

335 :332:05/03/16 01:13:54
エディットコントロールです

336 :デフォルトの名無しさん:05/03/16 01:19:38
任意のエディタ・ワープロ上で右クリックしたときに出る
コンテキストメニューに独自の項目を追加したいのです。
こういうことはやっぱりシステムフックでMenuの生成や選択の
メッセージをフックしてやるんですよね?
何か参考になるソースを探しています。

337 :デフォルトの名無しさん:05/03/16 02:05:28
>>336
ttp://www.codeguru.com/Cpp/COM-Tech/shell/article.php/c4505/

338 :332:05/03/16 02:13:52
解決しました

339 :デフォルトの名無しさん:05/03/16 02:30:55
どう解決したか書けよ

340 :332:05/03/16 02:35:25
>>339
自分で調べろよヴォケ。

341 :デフォルトの名無しさん:05/03/16 03:07:35
ワラタ

342 :デフォルトの名無しさん:05/03/16 04:18:38
>>340
フィードバックしないなら聞くなよカス。

343 :デフォルトの名無しさん:05/03/16 04:21:26
>>217
DIBだと広域検索の時何度もGetDIBitsして効率悪くない?
広域ならDDB、どんぴしゃならDIBとか?

344 :デフォルトの名無しさん:05/03/16 16:56:39
>>337
ありがとうございます、と言いたいですが、
これはShell Extensionの話ですよね。
Explorerとかデスクトップの右クリックじゃないですか?

エディットコントロールとかのデフォルトのコンテキストメニューのハンドルは
どうやって取得したらいいんでしょうね。
HMENUが取れたらサブクラス化で項目追加もできそうな気が。。

345 :デフォルトの名無しさん:05/03/16 17:30:09
>>344
サブクラスしてWM_INITPOPUPMENUでちょちょいとすればいいんじゃないの?

346 :デフォルトの名無しさん:05/03/16 19:21:16
テキストエディタを作ってるんですが、以下のコードで大きなファイルを読み込んだときにエラーが出ます。

dwSize = GetFileSize( hFile, NULL );
hMem = GlobalAlloc( GHND, sizeof( char ) * dwSize + 1 );
lpszBuf = ( char * )GlobalLock( hMem );

調べてみると、2行目のGlobalAllocは成功しているのに
3行目のGlobalLockからの戻り値はNULLです。
どうしてでしょう?

347 :デフォルトの名無しさん:05/03/16 19:27:43
なんでいまどきハンドル経由なの?

348 :デフォルトの名無しさん:05/03/16 19:35:06
>>346
GetLastErrorは?

349 :デフォルトの名無しさん:05/03/16 19:47:19
9xでは数MB以上ならVirtualAlloc(Ex)使えと書いてある。
そうでなくともWin32ではHeapAllocを使えと書いてあるがな。

350 :デフォルトの名無しさん:05/03/16 19:48:13
ウルセー俺の勝手だろ

351 :デフォルトの名無しさん:05/03/16 21:07:09
>>346
メモリ取得に失敗したから。

352 :デフォルトの名無しさん:05/03/16 21:25:46
if(SendMessage( hwnd_button, BM_GETSTATE, 0, 0) == BST_PUSHED) {
MessageBox(NULL, "押されたよ", "メッセージボックス", MB_ICONERROR);
}

とやって、ボタンが押された時にメッセージボックスが出るようにしたのですが、うまく機能しません
何が原因なんでしょうか?

353 :デフォルトの名無しさん:05/03/16 21:39:41
なぜに、WM_COMMANDをトラップして調べないのかが理解できない。
それと、上記コードがどこに書いてあるのかによっても現象は違ってくるんじゃないだろうか。

354 :デフォルトの名無しさん:05/03/16 21:41:09
>>352
ステータスはビットが立ってるかどうかで調べる。
==じゃなくて&

355 :デフォルトの名無しさん:05/03/16 21:42:28
>>353
>>354
どっちがカッコよくてどっちがカッコわるいの?

356 :デフォルトの名無しさん:05/03/16 21:42:54
>>352
ボタンが押されたらWM_COMMANDが送られてくるから普通そっちを見る。

357 :デフォルトの名無しさん:05/03/16 21:51:11
ゲームを作る時、sendmessageを使った方がいいかなと思いましたが、
WM_COMMANDのほう使うことにします

358 :デフォルトの名無しさん:05/03/16 23:26:12
EndPaintは、内部でDeleteDCもされているのでしょうか?
それとも、別にEndPaintのあとに、DeleteDCもしないといけないのでしょうか?

359 :デフォルトの名無しさん:05/03/16 23:26:27
すんません全角になってる部分があります。

360 :デフォルトの名無しさん:05/03/16 23:29:59
したらいけん

361 :デフォルトの名無しさん:05/03/16 23:30:18
DeleteDCは不要。こういう対応になるようにそれぞれ呼べば良い。
BeginPaint⇔EndPaint
GetDC(Ex)⇔ReleaseDC
CreateDC⇔DeleteDC

362 :346:05/03/16 23:31:12
エラーが発生するのが稀でGetLastErrorが意味を成さないんですよ
こういう場合だとVirtualAllocとHeapAlloc、どちらを使うべきですか?

363 :358:05/03/16 23:32:04
>>360 >>361
ご返答助かります。
ありがとうございました。

364 :デフォルトの名無しさん:05/03/16 23:36:29
どうでもいいことですが、sizeof( char )はいらないと思います。1バイトですから。
あと、GlobalAllocは使わない方向になったっぽいような。
HeapAllocで〜。

365 :デフォルトの名無しさん:05/03/16 23:38:53
自作エディタなら作ったことあるなぁ。
選択処理(マウスでクリックドラッグして、その部分を強調する)に手こずったな。あぁなつかSEA。

366 :デフォルトの名無しさん:05/03/16 23:39:05
>>364
そんなもんコンパイラが直すだろ
ソースの可読性を落としてどうする

367 :デフォルトの名無しさん:05/03/16 23:46:38
sizeof(char)は何があろうと1なんだからわざわざ書くほうが可読性落ちるだろアホ

368 :デフォルトの名無しさん:05/03/16 23:54:23
>>367
落ちないよ。バカ?

369 :デフォルトの名無しさん:05/03/16 23:54:34
うるせーな
がたがた細かいこと言うと禿げるぞ

370 :346:05/03/16 23:54:53
ありがとうございました

371 :デフォルトの名無しさん:05/03/16 23:55:05
今週の標語
余計な突っ込みで無駄なリソース

372 :デフォルトの名無しさん:05/03/16 23:57:16
GlobalAllocの引数に設定するのはバイト単位なんだから、sizeof(char)なんて書く必要はないと思うが。

373 :デフォルトの名無しさん:05/03/16 23:58:39
sizeof(_TCHAR)

なら意味あるけどな。

374 :デフォルトの名無しさん:05/03/16 23:58:58
型情報と必要量を同時に記述したほうが可読性高いよ

375 :デフォルトの名無しさん:05/03/16 23:59:12
Windows付属のメモ帳をあなどるなかれ。

メモ帳と同機能を「自作」するとなると、結構大変なんだよなw
完全自作だよ。

376 :デフォルトの名無しさん:05/03/16 23:59:45
>>375
チラシの裏シミュレータにいちゃもんですか?

377 :デフォルトの名無しさん:05/03/17 00:02:28
>>375
簡単だよ。EDIT_CLASSウィンドウ作ればいいだけ。

EDIT_CLASSと同等のものを作るのは初心者には結構骨だけど。

378 :デフォルトの名無しさん:05/03/17 00:02:53
喧嘩してる途中で、コーヒーブレイク。
オッパイポロリ
http://abcdane.net/blog/archives/200503/psp_la.html

379 :375:05/03/17 00:03:59
>>377
いや、そのEDITクラスを使わずに、さっき言ったように「完全自作」。

380 :デフォルトの名無しさん:05/03/17 00:06:44
     ノノノヽヽ
     (´・ω・`)从 優しくしてネ
      /  y/⌒ヽ_ 
   _/ ヽ/  i / 'ヽ 
 と\   /   イ\/'\ 
   ̄ヽ と\__ノ ̄  ノ
         /   -'"⌒'/
         ヽ,_____/つ
          \___/-'

381 :デフォルトの名無しさん:05/03/17 01:44:56
>>364
D&Dやクリップボードを使おうとすると
HGLOBALが手っ取り早い。

382 :デフォルトの名無しさん:05/03/17 09:44:04
そんなことよりさ、ううわーなにを

383 :デフォルトの名無しさん:05/03/17 13:27:32
>>381
MSDNもそれだけは仕方が無いと書いてある。

384 :デフォルトの名無しさん:05/03/17 16:03:07
初歩的な質問で申し訳ないのですが質問があります。
DialogBox関数で作られた複数のダイアログがあります。
このダイアログ間で変数の受け渡しをやるにはどうすればいいのでしょうか?

385 :デフォルトの名無しさん:05/03/17 16:07:32
>>384
「複数のダイアログ」は同一のプロセスでつくられたものなの?

386 :デフォルトの名無しさん:05/03/17 16:11:50
DialogBoxParam 関数を使って変数を渡して、
EndDialog 関数の呼び出しで指定された戻り値で受け取る

387 :デフォルトの名無しさん:05/03/17 16:56:29
>>385
言葉足らずですみません。
その通りで同一のプロセスで作られたものです。

>>386
調べてみたいと思います。

お二人ともありがとうございました。

388 :デフォルトの名無しさん:05/03/17 18:55:57
シリアルキー解析集「ALTEA」
大好評発売中!

http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960?


市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。


これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。

解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。

シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;

WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。

オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。

もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?


389 :デフォルトの名無しさん:05/03/17 20:10:10
↑ここだけよんでいない

俺様用しおり

390 :デフォルトの名無しさん:05/03/17 22:11:33
IEコンポーネントを使っています。
通常のナビゲーションはDocumentCompleteで検出できるのですが、
リロードはどんなイベントで検出できるのでしょうか?

391 :デフォルトの名無しさん:05/03/18 00:23:16
いくつかのファイルからなるプロジェクトがあります。
NotePad.h
関数プロトタイプ・グローバル変数の宣言と初期化

WinMain.cpp
WndProc.cpp
functions.cpp
のソースでグローバル変数を使用します。
すると、以下のようなエラーが出ます。いったいどうなっているんでしょう?
NotePad error LNK2005: "char * szClassName" (?szClassName@@3PADA) は既に functions.obj で定義されています。

392 :デフォルトの名無しさん:05/03/18 00:25:57
>>391
#ifndef __NOTEPAD_H
#define __NOTEPAD_H

//やりたいこと

#endif


393 :デフォルトの名無しさん:05/03/18 00:26:58
>>391
Cレベルの基本的なことだけども(つまりスレ違い)、
複数のソースで使われるヘッダでグローバル変数の初期化しちゃダメ。


394 :デフォルトの名無しさん:05/03/18 00:27:47
初期化じゃないや、定義


395 :デフォルトの名無しさん:05/03/18 01:07:43
>>393-394
知らなかった
どうすればいいんですか?

396 :デフォルトの名無しさん:05/03/18 01:19:52
どうせexternだろ
他人様には関係ないものなら#ifndefでいいじゃん

397 :デフォルトの名無しさん:05/03/18 01:26:33
>>395
ヘッダには宣言だけ書いて、ソースのどれか一箇所で実体を定義する。

398 :デフォルトの名無しさん:05/03/18 01:27:58
つーかWin32APIには関係ないな。

399 :デフォルトの名無しさん:05/03/18 02:24:36
1ミリビットも関係ないね。

400 :デフォルトの名無しさん:05/03/18 02:28:43
分割可能なbitってなんかやだなぁ。

401 :デフォルトの名無しさん:05/03/18 07:35:04
同じ拡張子に対して、エクスプローラなどで見たとき
任意のアイコンを表示させることはできるのでしょうか?

ご存知の方がいたら教えてください。

.exeとか.lnkではなく、自分で作ったファイルの拡張子
に対して行いたいです。

402 :デフォルトの名無しさん:05/03/18 07:52:59
タスクバーに出てくるアイコン(トレイアイコンではなく)を
動的に変更したいのですが、どうやったらいいのでしょう?

403 :デフォルトの名無しさん:05/03/18 08:30:38
>>401
レジストリを操作。

HKEY_CLASSES_ROOT\<HKEY_CLASSES_ROOT\<拡張子>の規定>\DefaultIconの規定

にアイコンのパスを書き込む。

404 :デフォルトの名無しさん:05/03/18 08:40:31
WM_SETICONメッセージかな

405 :401:05/03/18 10:58:04
>>403
すいません。説明がおかしかったです。

ある拡張子に対して、固定のイメージではなく、ファイルごとに
違うアイコンにしたいのです。

引き続きよろしくお願いします。

406 :デフォルトの名無しさん:05/03/18 13:25:06
>>405
無理なんじゃない?

407 :デフォルトの名無しさん:05/03/18 13:31:00
wisdomに8ビットの各ピクセルの情報は、
パレットの参照番号を表していると書いてありました

この8ビットの値を参照番号ではなくて、RGBの形に変換することは
できないでしょうか

408 :デフォルトの名無しさん:05/03/18 13:44:01
できるよ

409 :407:05/03/18 14:08:25
どうすればできるか教えてください
お願いします

410 :デフォルトの名無しさん:05/03/18 14:13:12
がんばればできるよ。

411 :デフォルトの名無しさん:05/03/18 14:33:53
春厨ばっかり・・・

>409
BITMAPINFO構造体のRGBQUAD bmiColors[ 可変長配列 ]を見る。
8ビット色なら256個のRGBQUADが並んでいる。
色の深度はBITMAPINFOHEADER構造体のbiBitCountメンバ。

412 :デフォルトの名無しさん:05/03/18 14:38:59
いっそのことシェルを自作すr

413 :デフォルトの名無しさん:05/03/18 14:49:43 ID:??? ?
エロイな。

414 :デフォルトの名無しさん:05/03/18 14:59:34
むしろ必要な数だけ拡張子を作るのが

415 :デフォルトの名無しさん:05/03/18 15:03:52
>405
HKEY_CLASSES_ROOT\lnkfile\shellex\IconHandler
とか見るとGUID書いてるから、COMとかその辺で出来そうな気はする。

416 :デフォルトの名無しさん:05/03/18 15:20:49
>>407
411みたいな、てきとーな事ぬかす奴を信用しなければ、できるよ。

417 :デフォルトの名無しさん:05/03/18 15:24:46
ありました
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_extending/extensionhandlers/iconhandlers.asp

418 :デフォルトの名無しさん:05/03/18 16:38:58
>401
各ファイルにアイコンイメージを持たせて
DefaultIcon = %1

…だった気がしないでもない。
違うかも…

419 :418:05/03/18 16:40:19
すまん、>417 のリンク先読んでなかった…
そに書いてあったな…

420 :デフォルトの名無しさん:05/03/19 01:31:24
Windowsプログラミングを本格的にやりたいのなら、
AdvancedWindows第4版は買っておいたほうがいいよ。

421 :デフォルトの名無しさん:05/03/19 02:36:33
>>405
シェルエクステンションのアイコンハンドラ

422 :デフォルトの名無しさん:05/03/19 02:39:36
>>421
頼むからスレを最後まで読んでからレスしてくれ。

423 :421:05/03/19 03:08:02
すまん、>417 のリンク先読んでなかった…
そに書いてあったな…
なんてね。orz

424 :デフォルトの名無しさん:05/03/19 03:27:38
>>405
IExtractIconを実装すればいいのでは?

425 :デフォルトの名無しさん:05/03/19 03:31:56
>>420
 マルチスレッドプログラミング相談室 その3
 http://pc5.2ch.net/test/read.cgi/tech/1098268137/488
 
 488 名前:デフォルトの名無しさん[sage] 投稿日:05/03/18(金) 14:59:13
  Windowsのマルチスレッドプログラミングを本格的にやりたいのなら、
  AdvancedWindows第4版は買っておいたほうがいいよ。


426 :デフォルトの名無しさん:05/03/19 06:32:46
コレがホントのマルチスレッド。

427 :デフォルトの名無しさん:05/03/19 08:16:32
AdvancedWindowsは昔よんだんですが、
描画関係があんまり詳しくなかったと思うんですが、
それについては何を読めばいいですか?

428 :デフォルトの名無しさん:05/03/19 09:13:17
Petzoldの上だか下だかわすれた。

429 :デフォルトの名無しさん:05/03/19 11:24:07
https://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-NIPS=9970208349
http://www.amazon.co.jp/exec/obidos/ASIN/4756136001/249-5256933-3106709
同じ本だけど内容が結構違うので、できれば両方嫁。

430 :デフォルトの名無しさん:05/03/19 13:46:28
他のプロセスから送信されたウィンドウメッセージの処理を拒否する
方法があれば教えてください。よろしくお願いします。

私はずっと WM_APP〜 を使えばこの要求は自動的に満たされると思っていたのですが、
どうやら WM_APP〜 は他のプロセスからも普通に送信することができるみたいで。

送信元を調べようにも、MSG構造体には送信元の情報は入っていないようですし…。

431 :デフォルトの名無しさん:05/03/19 13:53:26
>>430
ありません。
自分で送信した分についてフラグでも持っておいて、
それが立ってなかったら処理しない様にするしかないのでは。

432 :デフォルトの名無しさん:05/03/19 14:00:58
WindowMessageって8割くらいはシステムから送られてないか?
んで、おそらく>>430が無視したいメッセージつうのは
マクロソフトなどから送られるキーダウンとかなんじゃないかなぁ…

433 :デフォルトの名無しさん:05/03/19 14:05:40
>>430
思考の切り替え。
>>431が言うように他のプロセスを拒否するんじゃなくて自プロセスのみを処理する方向で考えてみては?
クリティカルセクションは他プロセスからしかアクセスできないことを利用するっててはどうよ。
クリティカルセクションのハンドルをlparamで渡すと。

>>432
WM_APP以降だけの話なら問題ない。

434 :デフォルトの名無しさん:05/03/19 14:06:21
>>433
誤植
他プロセスからしか→他プロセスから

435 :>>429:05/03/19 14:10:23
ありがとう。早速買ってみるよ。

436 :430:05/03/19 16:57:57
レスをくださった皆様、どうもありがとうございます。

>>431
もしかしたらと思って質問したのですが、システムではそのような手段は用意されていないんですね。

>>432
他のプロセスのバグ、もしくは悪意により送信されたメッセージを拒否したいと思ったのです。
でも、確かに、システム以外がシステムメッセージを送信する可能性だってあるんですよね…。

>>433
すべての自作メッセージにクリティカルセクションのハンドルを渡すってのも、ちょっと…(笑)
でも、そういう発想はありませんでした。今後の参考にさせていただきます。

437 :デフォルトの名無しさん:05/03/19 17:15:08
WPARAMにマジックナンバーでも埋めれば。

438 :デフォルトの名無しさん:05/03/19 17:24:58
発想を変えて、どんなメッセージが来ようと正常動作するような
つくりにすればいい。

439 :デフォルトの名無しさん:05/03/19 17:26:54
すいません
VisualStuido.net2003で、Tahomaフォントを選びたいのですが、
なぜか、Tahoma Boldしかえらべません。
これって仕様?

440 :デフォルトの名無しさん:05/03/19 17:29:51
>>436
RegisterWindowMessageならどうだ?
登録文字列をユニーク(GUIDとか)にすれば
他プロセスが意図的に同じ文字列を使わない限り同じメッセージは来ないと思うが。

441 :デフォルトの名無しさん:05/03/19 17:32:00
>>439
つうか、どこが?

442 :430:05/03/19 19:00:55
>>437
クリティカルセクションのハンドルを渡すのと同様、2つしかないパラメータのうちの
1つをそれで消費してしまうというのは、ちょっと厳しいものがありそうです。

>>438
パラメータの妥当性のチェックにかかるオーバーヘッドを気にして避けていたのですが、
それが最も現実的な対処法のような気がしてきました。
ただ、ポインタを必要としているときに面倒くさいことになりそうな気はしますが…。

>>440
それも、RegisterWindowMessage() を使わず、直接 0xC000〜 のメッセージが送信された
としたら、かち合う可能性がないとは言えないですよね。神経質過ぎるかもしれませんが…。

443 :デフォルトの名無しさん:05/03/19 19:14:44
パラメータの一つを構造体のポインタにしとけばいい。事実上パラメータ数無制限だ。

444 :デフォルトの名無しさん:05/03/19 19:18:10
それほどまでチェックを厳しくするなら、独自のメッセージ機構作った方が早いかもしれんね。

445 :デフォルトの名無しさん:05/03/19 23:48:09
アイコンの話題が出たので、ヘーと思って試していたら、ExtractAssociatedIcon()
を使うと、bmp ファイルも中身を見てくれるのを知り、便利と思ったのですが、
同じ 8 bit color bmp ファイルでも、その絵のアイコンを返してくれる場合と
くれないで、default の(絵筆の) .bmp のアイコンの場合があります。
これは、こんなものということでしょうか、何か制約条件があるのでしょうか。


446 :デフォルトの名無しさん:05/03/20 05:57:48
画像の大きさとか関係ないのかなあ
大きすぎるとか小さすぎるとか、4ビットとか2ビットのも出るのかな
あと、bmpフォーマットに従ってないとか
昔、写真屋で減色すると一部まちがったフォーマットで吐き出したことがあったような

447 :デフォルトの名無しさん:05/03/20 09:48:09
アイコンフォーマットに従ってないんだろうね

448 :デフォルトの名無しさん:05/03/20 09:53:43
独自のデスクトップでアプリを動かせば
他アプリからのメッセージは届かないかも、
と、制限事項の多いことを言ってみる。

449 :デフォルトの名無しさん:05/03/20 13:35:50
Win32のファイル操作APIを使うのと、
ANSI-C標準ライブラリのファイル操作関数を使うのとでは、なにがちがうの?

450 :デフォルトの名無しさん:05/03/20 13:39:22
出来上がるバイナリ的には、Cランタイム使うか使わないか。
使い分けによる、移植性などのメリット、デメリットは↓よろすく。

451 :デフォルトの名無しさん:05/03/20 13:42:06
おっと、スタティックリンクすれば、どっちもランタイム使わないか。あほすぎorz


452 :デフォルトの名無しさん:05/03/20 13:46:47
>>449
標準ライブラリは機能が抽象化されてる。
環境に依存するような細かい操作はできない。
Win32APIを使えばOSが提供するサービスをフルに使えるが移植性は落ちる。

453 :449:05/03/20 13:49:59
どーもです。
一応、CAnsiFileというクラスを作って、ANSI-CLibを用いたファイル操作クラスも作ろうと思います。
Win32APIを用いた自作クラスはすでに完成してます。

454 :デフォルトの名無しさん:05/03/20 14:06:14
>>453
意気込んでるところ失礼だが、そんなものは全くいらんよ。
例外処理の使い方を覚えたほうがいい。goto文的使い方。

455 :449:05/03/20 14:20:26
ええ、使わないクラスですが、勉強用に作るだけです。
このくらいなら数時間でできちゃうし。
例外処理も深く勉強したいです。
まだまだ発展途上です。

456 :デフォルトの名無しさん:05/03/20 14:22:38
>>453
fstreamで十分じゃないか?
必要ならこんな感じでWindowsのファイル操作のAPIを使うクラスをstreambufから継承して作ってみろ。
http://www.jah.ne.jp/~naoyuki/Writings/ExtIos.html

457 :449:05/03/20 14:26:53
>>456
ありがとうございmす。
今からそれを熟読してみたいと思います。

458 :デフォルトの名無しさん:05/03/20 15:59:31
別のプログラムに構造体(ポインタ)を渡す(送る)事は出来るのでしょうか。
出来るなら、やり方、またはヒントを教えてください。
CreateProcessで文字列、PostMessageで2つの整数の渡し方は
知っているのですが、構造体の渡し方が分かりません。

459 :デフォルトの名無しさん:05/03/20 16:09:46
struct foo data;
SendMessage(hwOthers,WM_APP,(WPARAM)0,(LPARAM)&data);

460 :デフォルトの名無しさん:05/03/20 16:12:52
>>459
キャストして渡せばいいんですか。
渡し先のプログラムにも同じ構造体があれば、正しく動作するんですね。
ありがとうございました。

461 :デフォルトの名無しさん:05/03/20 16:15:47
他のプログラムってのが別プロセスならポインタ送っても無駄。

462 :デフォルトの名無しさん:05/03/20 16:21:22
>>458
WM_COPYDATA

>>459
駄目。

463 :デフォルトの名無しさん:05/03/20 16:25:26
>>461
勉強不足ですが、ポインタ(アドレス)って、パソコンで共通のものだと思うから、
構造体の始めの位置と、そのサイズが分かれば、渡せると考えていたんですが。

464 :デフォルトの名無しさん:05/03/20 16:26:55
>>458
プロセス毎にアドレス空間が違うから他のプログラムにはそのまま渡せないよ。
WM_COPYDATAというメッセージで渡すのが安全。

COPYDATASTRUCT cds;
cds.dwData = 0; // 32bit値。識別用に使う
cds.cbData = sizeof(Struct); //データサイズ
cds.lpData = &Struct; // データアドレス
SendMessage(hTo, WM_COPYDATA, (WPARAM)hFrom, (LPARAM)&cds);


>>459
おっさんおっさん
それじゃダメだよ・・・

>>460
正しく動作しないよ。
他のプロセスから渡されたポインタは全て無効になるよ。

465 :デフォルトの名無しさん:05/03/20 16:27:17
えー

466 :デフォルトの名無しさん:05/03/20 16:31:42
>>462>>464
WM_COPYDATA、すごく安全で使いやすそうです。
ありがとうございました。

467 :デフォルトの名無しさん:05/03/20 16:35:19
>>466
このスレ住人の言う事は嘘も混ざってるから気をつけてね。
もしプロセスとかの詳細が知りたかったらAdvancedWindows読んだほうがいい。
今回みたくWM_COPYDATAとかキーワードがわかったらMSDNで検索する手もある。


468 :デフォルトの名無しさん:05/03/20 16:53:51
>>467
ありがとうございます。
今までは、別のプログラムに何か渡すとか使い方はしなかったんですけど、
ファイル分割をすると便利なように、プログラムを機能毎に分割すると、
単体で起動して、小さい機能としても使えて便利な事が分かったんで、
質問をさせていただきました。その本を読んで勉強したいと思います。

469 :デフォルトの名無しさん:05/03/20 17:03:46
CreateWindowExでWS_CHILDと親ウィンドウのハンドルを設定して、
親ウィンドウに子ウィンドウを貼り付けたのですが、
キーボードから文字を入力しても子ウィンドウにWM_CHARが来ないようなのですが、どうすれば解決できるでしょうか。
子ウィンドウの上でマウスをクリックするとWM_LBUTTONDOWNは来ます。

470 :デフォルトの名無しさん:05/03/20 17:21:29
WM_CHARは親ウィンドウへ飛びます飛びます♪

471 :469:05/03/20 17:31:32
>>470
親ウィンドウのメッセージをフックしたりしないとだめなのかな・・・
独立したボタンコントロールみたいなの(ボタンコントロールのオーナードローという意味じゃなくて)を実現するdllを作ろうと思ってるので・・・
ところでWindowsのエディットコントロールとかはどうやってるの?

472 :デフォルトの名無しさん:05/03/20 17:45:51
>>471
自作のUI作ろうとしてるんですか?
何人くらいで作るつもりですか?

一人でつくるとなると、かなり大変ですよ。
あの有名タブブラウザSleipnirもUIを企業から購入してるんですから。
http://www.bcgsoft.com/bcgcontrolbar.htm

大変でしょうが、頑張ってください。

473 :469:05/03/20 17:53:32
>>472
そういうすごいもん作るんじゃないんだけど・・・
ただ絵が表示されててクリックしたら親ウィンドウにメッセージを送るだけのボタン。
なんだけど、Enterとか(A)とかの動作をさせるのにメッセージが取れなかっただけ。
誤解されそうな書き方スマソ。

474 :デフォルトの名無しさん:05/03/20 17:58:50
たぶん、SetFocusで解決

475 :デフォルトの名無しさん:05/03/20 18:35:45
ウィンドウの拡縮できる幅を制限したいのですが、
方法が思いつきません。どうすればいいでしょうか?
教えてください。

476 :デフォルトの名無しさん:05/03/20 18:42:38
>>475
WM_MINMAXINFO

477 :デフォルトの名無しさん:05/03/20 18:43:36
じゃねぇ、WM_GETMINMAXINFOだ。

478 :デフォルトの名無しさん:05/03/20 18:49:33
>>468
そういう分割の仕方は中途半端でよろしくない。

メッセージの仕様を厳格に規格化するならともかく、
単に個別のプログラムにしても再利用しにくいし、
メッセージのやり取りが増えるとリソース消費量も大きくなる。
普通にDLL使うのが無難。
DLLなら一般的には呼び出し元と同一のメモリ空間で動く。

479 :デフォルトの名無しさん:05/03/20 18:54:08
一般的には?

480 :デフォルトの名無しさん:05/03/20 19:03:28
>>479
そういう風に作れば DLL が独自にメモリ空間を確保することもできなくはない。

481 :デフォルトの名無しさん:05/03/20 19:08:15
>477
dクス

482 :469:05/03/20 19:11:08
>>474
うまくいきました。
でも別のソフトのウィンドウをアクティブにしてから戻すとフォーカスが解除される模様。
当然といえば当然だけど親ウィンドウがアクティブになったらSetFocusを呼び出すにはどうしたらいい?

483 :デフォルトの名無しさん:05/03/20 19:15:32
WM_ACTIVATE

484 :445:bmpIcon:05/03/20 19:26:10
>>446, >>447
レスをありがとうございます。
画像処理のスレで聞いて、自分で ImageList へ追加する処理をやっていて、
bmp から直接 icon を返してくれるなら、そうしようと思ったのですが、
ImageList へ渡すところで ExtractAssociatedIcon() を使っても HICON
は default のものしか返って来ませんね。(bmp を縮めて ImageList へ
今は Add しています)

別にテスト用にメニューを作って、bmp ファイルを指定して、この API を
呼び、返って来た HICON を表示させると、bmp の絵が出ます。で、このとき
も絵が出るときと default icon の場合があります。デジカメの 2240x1780
でも jpeg -> bmp -> xpadie による 8 bit color 化のは出ます。
レタッチしたほぼ同サイズの 4 bit color のは出ません。

485 :469:05/03/20 19:26:56
>>483
親に貼り付けた子ウィンドウには来ないみたい。
親で対処するしかないのか・・・

486 :デフォルトの名無しさん:05/03/20 19:28:18
>>485
親でSetFocusすればいいんじゃねえの?

487 :469:05/03/20 19:33:50
>>486
やっぱりそうしたほうがいいですか・・・
親もCで組みなおせばウィンドウメッセージ取れるし。

488 :デフォルトの名無しさん:05/03/20 19:41:36
バルーンファイト面白いな
初めて遊んだけど感動した。

489 :デフォルトの名無しさん:05/03/20 19:56:03
>>488
ファミコン?というかそれだったら板違い

490 :デフォルトの名無しさん:05/03/20 20:21:36
>>485
WM_KEYDOWN もこない?

491 :469:05/03/20 20:35:18
>>490
親がアクティブでもSerFocusしない限り
子にはWM_KEYDOWNは来ないみたい

492 :デフォルトの名無しさん:05/03/20 20:37:24
キーフォーカスの意味勉強しようね、ねっ?

493 :デフォルトの名無しさん:05/03/20 21:19:57
質問です。

OS は Windows XP で、コンパイラは mingw-jp の gcc です。
コマンドプロンプトのウインドウの現在の縦サイズ(行数)をプログラムから得るには
どうすればよろしいのでしょうか。

よろしくお願い致しますm(_ _)m

494 :デフォルトの名無しさん:05/03/20 21:32:43
>>493
自分でウィンドウ作ればいいじゃん。

495 :458:05/03/21 00:27:12
>>464のやり方は、いわゆる値渡しなんでしょうか。
同じような感じで、HBITMAPを渡そうと思っているんですけど、
値渡しだと重くなるんでダメだなと思いまして。

496 :デフォルトの名無しさん:05/03/21 00:31:57
>>495
msdnみろ

497 :デフォルトの名無しさん:05/03/21 00:32:02
>>472
次はそれを使わないとか何とか。

498 :493:05/03/21 00:33:42
>>494
実は、コマンドプロンプトで (Linux 環境にある) less コマンドを作りたいのです。
自分でウインドウを作る以外に方法はないのでしょうか?

499 :デフォルトの名無しさん:05/03/21 00:36:39
>>495
ハンドルもそのままじゃ他プロセスに渡せない。

500 :デフォルトの名無しさん:05/03/21 00:44:30
LinuxでWin32API

501 :デフォルトの名無しさん:05/03/21 01:01:18
>>500
よく読め。

>>498
Linuxなんか持ち出さずとも、less一言で充分だろ。
で、素直にcygwinのless使えば?

502 :デフォルトの名無しさん:05/03/21 01:05:16
一言多いな

503 :デフォルトの名無しさん:05/03/21 01:32:43
>>495
・ハンドルもポインタも32ビットでデータ量は同じだろ
・ていうかそれぐらいで速度低下するなら、設計を見なおすべき
・既に指摘あったけど、他プロセスに渡したら無効
・ビットマップデータ本体とか、でかいものを渡すなら、
ファイルマッピング使え

504 :498:05/03/21 02:33:30
>>501
確かにおっしゃる通りで、cygwin の less を使えばいいのですが、
自分で less コマンドを作ってみたいという純粋な技術的好奇心です。
無理なら諦めますし、可能なら作ってみたいと思います。
必要な情報はコマンドプロンプトウインドウの縦サイズ(行数)のみなので、
何か方法がありそうな気がするのですが・・・・・・

505 :デフォルトの名無しさん:05/03/21 02:43:01
>>503
偉そうですね。

506 :デフォルトの名無しさん:2005/03/21(月) 07:24:06
>>503
WM_COPYDATAはファイルマッピング使ってデータをプロセス間で渡しているわけだが。

507 :デフォルトの名無しさん:2005/03/21(月) 08:46:09
>>493
GetConsoleScreenBufferInfo()?
試したこと無いから使えるかわかんないけど。

508 :デフォルトの名無しさん:2005/03/21(月) 10:59:04
DLLでDLLプライベートなメモリ空間を確保する方法、教えて欲しい
(どこを調べればいいのかも含めて)

509 :デフォルトの名無しさん:2005/03/21(月) 11:13:22
DLLプライベートなメモリ空間
の定義からはじめようか。

510 :デフォルトの名無しさん:2005/03/21(月) 11:47:43
>>480

511 :デフォルトの名無しさん:2005/03/21(月) 11:54:11
480は共有メモリのこと言ってるんじゃないのか
プライベートってどこから出てきたんだ?

512 :デフォルトの名無しさん:2005/03/21(月) 12:02:35
>>511
兵卒

513 :デフォルトの名無しさん:2005/03/21(月) 12:23:36
DLL!弾持ってこーーーーーい!DLーーーL!

514 :デフォルトの名無しさん:2005/03/21(月) 12:31:15
>>503
ありがとうございます。
仰っている感じを見ると、データ渡しっぽいです。
それに、ポインタとかプロセスとか、まだ僕のレベルに早すぎたようです。

515 :デフォルトの名無しさん:2005/03/21(月) 12:31:46
AAが欲しいところだな。
実際に貼り付けるほどこのスレの住人は無粋じゃないけどな。

516 :デフォルトの名無しさん:2005/03/21(月) 12:32:49
でも地位が一番低いWindows関連スレだ。

517 :デフォルトの名無しさん:2005/03/21(月) 13:22:18
LPCTSTR str[] = {TEXT("アアア") ,TEXT("イイイ") }

str[0]>str[1] ってやった場合コンパイラは何を基準に比較してるか教えてください



518 :デフォルトの名無しさん:2005/03/21(月) 13:29:30
>>517
メモリ上の配置。コンパイラが恣意的に配置するので結果は予測不能。

519 :デフォルトの名無しさん:2005/03/21(月) 13:37:06
メモリ上の配置ってアドレスで比較してるってこと?
それならコンパイラが恣意的に決めてても特定のアドレスから
配列の要素が連続してることに変わりなくて必ず0番目の要素が最小になるってこと?

520 :デフォルトの名無しさん:2005/03/21(月) 13:47:53
>>519
>517の例では"アアア"と"イイイ"がどこに配置されるかが、恣意的であると書いた。
また、str[0] > str[1]は要素同士の比較であるから、この場合はポインタ同士の比較になる。
配置が恣意的である以上、ポインタ同士を比較しても無意味。

521 :デフォルトの名無しさん:2005/03/21(月) 13:54:31
>"アアア"と"イイイ"がどこに配置されるかが、恣意的である
これが恣意的ならどうやって順番区別してるんですか?

*str[0]>*str[1] ってやった場合コンパイラは何を基準に比較してるか教えてください


522 :デフォルトの名無しさん:2005/03/21(月) 13:58:46
>>521
2つの文字列の1つめの要素(TCHAR型)で比較。
UnicodeとMBCSで評価結果が違う。


523 :デフォルトの名無しさん:2005/03/21(月) 14:16:59
>>520>>522
>>517=>>519=>>521はどう見ても釣りだろう。
スレ違いだし、放置しとけ。

524 :デフォルトの名無しさん:2005/03/21(月) 14:17:34
>>523
はぁ?デブは黙ってろよ

525 :デフォルトの名無しさん:2005/03/21(月) 14:19:26
自作自演するなら30分はあけろ

526 :デフォルトの名無しさん:2005/03/21(月) 14:22:20
自演する意味がどこにあって、自演だと思うお前の思考回路を疑う。
要は話に関係のないデブが横からしゃしゃり出てくんなってことだ。
わかったら黙っとけデブ

527 :504:2005/03/21(月) 14:24:32
すみません、>>504もお願いします。

528 :デフォルトの名無しさん:2005/03/21(月) 14:25:42
>>507は無視かよスルーかよ。ひでえな。

529 :523:2005/03/21(月) 14:28:56
>517=>519=>521はとぼけてレスしている香具師がいなければ間違いないとして、
>518=>520だとは思うが、>522は違うかな?
>524=>526として、もし=>517なら寒い限りだな。
>525はそうすると、=>522かな?
#どうでもいいけど、>>が多いと書き込めないんだね。

530 :デフォルトの名無しさん:2005/03/21(月) 14:30:24
>>504
自分でlessを作ってみようと思うのはいいが、それなら何故他人に頼る?
他人に聞かないとできないなら自分でやる意味ないと思うが。
仮に、コンソールの行数を得る手段がどうしても判らないなら、引き数で指定するようにでも作ってみればいいと思うが。
#つーか、行数だけ得られてもインタラクティブな操作もできないと思うが。

531 :デフォルトの名無しさん:2005/03/21(月) 14:30:41
なにくだらない考察してんだこのデブは?

532 :デフォルトの名無しさん:2005/03/21(月) 14:41:50
C言語質問スレがいいんじゃねえか?

533 :デフォルトの名無しさん:2005/03/21(月) 14:42:52
>>528
ハムラビ法典マジでお勧め

534 :デフォルトの名無しさん:2005/03/21(月) 14:46:23
>>504
WriteConsoleとかSetConsoleAttribiteなんとかみたいにコンソールいじるAPIがあるからMSDNでそのへん検索しなさい。

>>517
とりあえずおまえさんはポインタと配列の区別付けるとこからやり直してきなさい。

535 :デフォルトの名無しさん:2005/03/21(月) 18:02:48
>>527
12時間前の自分と、572を書き込んだときの自分
成長しましたか?

536 :デフォルトの名無しさん:2005/03/21(月) 18:04:12
画像表示のことで質問があります。
最初に、画像A,Bを、裏画面A,Bを作ってそれぞれ裏画面に表示させ、その裏画面A,Bの画像を裏画面Cに貼り付けて、裏画面Cを表画面に出すというプログラムを書きたいのですがどうやればいいのでしょうか?

537 :デフォルトの名無しさん:2005/03/21(月) 18:04:20
Linuxのlessのソースでもみて該当するAPIがWindowsにあるか調べればいいんじゃないの?

538 :デフォルトの名無しさん:2005/03/21(月) 18:06:19
>>536
裏画面A,B用のバッファを用意
それぞれのバッファにA,Bを展開
そして、裏画面C用のバッファを用意し、
裏画面A,Bを裏画面Cに展開して、裏画面Cを表画面に表示させればいいんじゃないの?

539 :デフォルトの名無しさん:2005/03/21(月) 18:11:26
>>572

540 :536:2005/03/21(月) 18:12:14
>>538
裏画面バッファの用意は
win_hdc=GetDC(hwnd);
hdc = CreateCompatibleDC(win_hdc);
hbmp = CreateCompatibleBitmap(win_hdc,640,480);
SelectObject(hdc,hbmp);
みたいな感じで良いんですよね?

それをどう組み合わせて、いつBitBltで表示させればいいのですか?

541 :デフォルトの名無しさん:2005/03/21(月) 18:17:03
>>536
裏画面て、メモリDCの事?
ABCについてそれぞれメモリDC作って、
ABをCに転送し終わったらCを画面に転送。
メモリDCについては
CreateCompatibleBitmap
CreateCompatibleDC
辺りで検索。

542 :デフォルトの名無しさん:2005/03/21(月) 18:25:38
>>540
>それをどう組み合わせて、いつBitBltで表示させればいいのですか?
描画したいとき・・・。
普通はWM_PAINT。
猫でもわかる〜でも読んどけ。

543 :536:2005/03/21(月) 18:53:13
メモリDCだと思います。
ABをCに表示する際、毎回ABを読み込ませないとCに表示されないんです・・・
最初に一度だけABを読み込ませて後はそれをCに転送しまとめて表に転送したいのですが・・・。
毎回画像を読み込ませなくて良いようにできますよね?

544 :デフォルトの名無しさん:2005/03/21(月) 19:12:06
DLLで本体アプリケーションのウィンドウプロシージャをサブクラス化して、
DLLで追加したメニューだけオーナードローしたいのですが、WM_DRAWITEMと
WM_MEASUREITEMで自分のだけ処理したら他で追加されたメニューが
描画されなくなってしまいました。

サブクラス化したウィンドウプロシージャで、自分が処理しなかったものは
本来の処理に任せるようなことはできるのでしょうか?


545 :デフォルトの名無しさん:2005/03/21(月) 19:16:51
>>544
CallWindowProc()?

546 :544:2005/03/21(月) 19:21:32
DLLの中で本体のウィンドウプロシージャをフック(?)しています。
このとき switch で受け取らなかったメッセージは CallWindowProc() で元のウィンドウ
プロシージャに送られて正しく処理されますが、caseに合致して処理を行った場合は
return後にそのメッセージは処理されない…という認識は間違ってますでしょうか。

---
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg){
    case xxxx:
      // 処理
      break;
  }

  return (CallWindowProc((WNDPROC)OriginalProc, hWnd, uMsg, wParam, lParam));
}

547 :デフォルトの名無しさん:2005/03/21(月) 19:31:20
矩形やBitmapをアニメーションさせたいのですが、
WM_PAINT内にInvalidateRectで何度も再描画すると
ちらつきが酷すぎてしまいます。
より良いの方法を教えてください。お願いします。

548 :デフォルトの名無しさん:2005/03/21(月) 19:36:53
>>547
なんでWM_PAINT内で無効にすんのよ。
タイマーかなんかのタイミングにすべき。
あとWM_ERASEBKGND来たら何もせずに1返して背景描画を省略するとか、
上の質問じゃないけどメモリDCにあらかじめ描画内容を書いておいて、
WM_PAINT時にBitBlt一発で済むようにするとか。

549 :デフォルトの名無しさん:2005/03/21(月) 20:21:34
>548
アイサー

550 :デフォルトの名無しさん:2005/03/21(月) 21:25:29
Win32コマンドラインツールで利用出来る、昔のDOS版xargsのような
汎用のコマンドライン引数展開ルーチンはどこかにないでしょうか?

551 :デフォルトの名無しさん:2005/03/21(月) 21:32:46
cygwin\bin\xargs

552 :デフォルトの名無しさん:2005/03/21(月) 21:35:33
>>550
getopt

553 :デフォルトの名無しさん:2005/03/21(月) 21:36:45
Ocamlに標準で付いているArgモジュールだったらものすごく簡単に書けるのになぁ。

554 :デフォルトの名無しさん:2005/03/21(月) 21:57:33
>>550
Win32 APIのFindFirstFile & FindNextFile でワイルドカード展開できるよ。

555 :デフォルトの名無しさん:2005/03/22(火) 00:06:45
555 ∈(・◎・)∋

131 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)