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


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

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


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