Win32API質問箱 Build29

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
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
95:05/03/08 23:14:50
>>8
解決しました。ありがとうございます。
おかげ様で、また一つ賢くなれました。
106: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
お礼遅れました。ありがとうざいます。
146:05/03/09 00:26:50
>>11
いろいろ試してみての結論を一応。
範囲は0-32でOKっぽい。
で、90°回転させる時のみ3頂点の座標xy全てを-1ずらす。
156: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
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ちゃんねらの鑑。
4025: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
本当に何が言いたいか理解できないの?

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

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

そして、転職しよう。
9185とか: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
しつこいようだが、要求通知と完了通知がごっちゃになってないか?
似て非なるものだ。
ごっちゃになってる。

機能が、ではなく言葉の定義が。
10081: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を知らないのですが。あるのでしたら是非教えてください。
107106: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
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
どちらかといえばメッセージループ主体のスレッドか否かって問題。
122120: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のソケット知識が役に立たなくなる諸刃の剣。
134133: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のローカルプログラムを実行したのか書かないの?
148146: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
自演乙。

というか、消えろ。
175172: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
『猫でもわかる』を参考にテキストエディタを作っているのですが、
あえてグローバルにしたほうが良い変数ってありますか?
『猫でもわかる』だとやたらとグローバル変数が出てくるので。
183172: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の描画システムについてもっと理解するんだ。
つっても適当な本が見当たらないけど。
185172:05/03/13 12:21:51
>>184
すいません。
不甲斐ない自分です。

Invalidateを呼び出してイベントを送る場合、即座に描画することが出来ないと思うのですが、
アップデートイベントがくるまで描画を待たないといけなくなるので。
186179:05/03/13 12:22:01
簡単なんだけど分からないことがある。
InternetOpenUrl( or Others)で404errorを検出するにはどんなフラグを
設定すればいいのかな?
今は、第5引数のdwFlagsに
INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RAW_DATAを設定してます。
お願いします。
187179: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しろ。使いまわそうとか考えるな。
190172:05/03/13 12:38:45
>>188
だとすると
GetDCで一回取得したハンドルを使って、
何回も描画すると、必ずバグのような表示になるのですが。

m_hDC=GetDC(m_hWnd);

なぜなのでしょうか?
ReleaseDCを逐次よばないといけないのでしょうか?
191172: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つのプロセスの中で値が変化せず、参照頻度の高いものはグローバル変数にしてる。
モジュールのハンドルとかプロセスヒープのハンドルとか。それら以外は基本的には使わないなあ。
194179: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
スキルがモリモリあるような奴がこんなスレじーっと見とるわけなかろ?
198172: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
 || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
 || ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。
 || ○放置された荒らしは煽りや自作自演であなたのレスを誘います。
 ||  ノセられてレスしたらその時点であなたの負け。
 || ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを
 ||  与えないで下さい。                  Λ_Λ
 || ○枯死するまで孤独に暴れさせておいて   \ (゚ー゚*) キホン。
 ||  ゴミが溜まったら削除が一番です。       ⊂⊂ |
 ||___ ∧ ∧__∧ ∧__ ∧ ∧_      | ̄ ̄ ̄ ̄|
      (  ∧ ∧__ (   ∧ ∧__(   ∧ ∧     ̄ ̄ ̄
    〜(_(  ∧ ∧_ (  ∧ ∧_ (  ∧ ∧  は〜い、先生。
      〜(_(   ,,)〜(_(   ,,)〜(_(   ,,)
        〜(___ノ  〜(___ノ   〜(___ノ
219218: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として起動したのかをどうやって判断するんだろう。

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

これはどうしてなのでしょうか?
247246: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のスレだよな?
255246: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が使われていると言うのだ?
261259: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
266デフォルトの名無しさん:05/03/15 01:26:57
>>265がキチガイ。
なんとなくというか、非常にわかりやすいと思うが。
267デフォルトの名無しさん:05/03/15 07:14:54
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だとキューにポストしたら、すぐに次の処理に移る。
271269: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は非同期関数
と言ったほうが解りやすいかな。
274269:05/03/15 08:49:24
>>272
SendMessage:関数の再帰呼び出しみたいな感じ
PostMessage:単純なメッセージ送信
みたいな感じですか?
275269:05/03/15 08:56:04
>>273
詳しくて分かりやすいです。何となく分かった気がします。

お答えくださった皆様、どうもありがとうございました。
276デフォルトの名無しさん:05/03/15 09:28:45
PostThreadMessage()はあるが、SendThreadMessage()はない。
推して知るべし。
277269: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()の違いの話じゃないのか?
286284:05/03/15 14:55:34
>>284
×Spy++ クラス名
○Spy++ でクラス名

orz
287282: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時間営業
299278: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
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行とやらはどこにあるんだ?
335332:05/03/16 01:13:54
エディットコントロールです
336デフォルトの名無しさん:05/03/16 01:19:38
任意のエディタ・ワープロ上で右クリックしたときに出る
コンテキストメニューに独自の項目を追加したいのです。
こういうことはやっぱりシステムフックでMenuの生成や選択の
メッセージをフックしてやるんですよね?
何か参考になるソースを探しています。
337デフォルトの名無しさん:05/03/16 02:05:28
338332:05/03/16 02:13:52
解決しました
339デフォルトの名無しさん:05/03/16 02:30:55
どう解決したか書けよ
340332: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
362346:05/03/16 23:31:12
エラーが発生するのが稀でGetLastErrorが意味を成さないんですよ
こういう場合だとVirtualAllocとHeapAlloc、どちらを使うべきですか?
363358: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
うるせーな
がたがた細かいこと言うと禿げるぞ
370346: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
379375: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メッセージかな
405401: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
できるよ
409407: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:??? BE:86419878-
エロイな。
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
418デフォルトの名無しさん:05/03/18 16:38:58
>401
各ファイルにアイコンイメージを持たせて
DefaultIcon = %1

…だった気がしないでもない。
違うかも…
419418: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
頼むからスレを最後まで読んでからレスしてくれ。
423421: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
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
ありがとう。早速買ってみるよ。
436430: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
つうか、どこが?
442430: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が提供するサービスをフルに使えるが移植性は落ちる。
453449:05/03/20 13:49:59
どーもです。
一応、CAnsiFileというクラスを作って、ANSI-CLibを用いたファイル操作クラスも作ろうと思います。
Win32APIを用いた自作クラスはすでに完成してます。
454デフォルトの名無しさん:05/03/20 14:06:14
>>453
意気込んでるところ失礼だが、そんなものは全くいらんよ。
例外処理の使い方を覚えたほうがいい。goto文的使い方。
455449: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
457449: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は親ウィンドウへ飛びます飛びます♪
471469: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

大変でしょうが、頑張ってください。
473469: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クス
482469:05/03/20 19:11:08
>>474
うまくいきました。
でも別のソフトのウィンドウをアクティブにしてから戻すとフォーカスが解除される模様。
当然といえば当然だけど親ウィンドウがアクティブになったらSetFocusを呼び出すにはどうしたらいい?
483デフォルトの名無しさん:05/03/20 19:15:32
WM_ACTIVATE
484445: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 のは出ません。
485469:05/03/20 19:26:56
>>483
親に貼り付けた子ウィンドウには来ないみたい。
親で対処するしかないのか・・・
486デフォルトの名無しさん:05/03/20 19:28:18
>>485
親でSetFocusすればいいんじゃねえの?
487469: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 もこない?
491469: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
自分でウィンドウ作ればいいじゃん。
495458: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
次はそれを使わないとか何とか。
498493: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ビットでデータ量は同じだろ
・ていうかそれぐらいで速度低下するなら、設計を見なおすべき
・既に指摘あったけど、他プロセスに渡したら無効
・ビットマップデータ本体とか、でかいものを渡すなら、
ファイルマッピング使え
504498: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
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
自演する意味がどこにあって、自演だと思うお前の思考回路を疑う。
要は話に関係のないデブが横からしゃしゃり出てくんなってことだ。
わかったら黙っとけデブ
527504:2005/03/21(月) 14:24:32
すみません、>>504もお願いします。
528デフォルトの名無しさん:2005/03/21(月) 14:25:42
>>507は無視かよスルーかよ。ひでえな。
529523: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
540536: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。
猫でもわかる〜でも読んどけ。
543536: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()?
546544: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 ∈(・◎・)∋
556デフォルトの名無しさん:2005/03/22(火) 17:10:58
テスト
557デフォルトの名無しさん:2005/03/23(水) 00:27:02
C/C++室から移動。

HWND hWND = GetActiveWindow();

と書いても現在アクティブなウインドウハンドルが取得できないが、どうしてでしょう?
(デバッガで見た)
コンパイルは通ります
558デフォルトの名無しさん:2005/03/23(水) 00:29:52
GetForegrounWindowと勘違い?
559デフォルトの名無しさん:2005/03/23(水) 00:31:27
>>557
>The return value is the handle to the active window attached to the calling thread's message queue.
>Otherwise, the return value is NULL.

MSDNにはこう書いてある。
560557:2005/03/23(水) 00:32:11
それもやってみたけどだめだった。
詳しいソースはC/C++室にあるので見てほしい
GUITHREADINFO もやってみたんだが。
561デフォルトの名無しさん:2005/03/23(水) 00:38:07
>>560
>The foreground window can be NULL in certain circumstances, such as when a window is losing activation.

GetForegrounWindowがNULLを返す状況があるみたいだね。
562デフォルトの名無しさん:2005/03/23(水) 00:45:57
デバッガではいつやっても hWNDのとこで、 エラーです: 式を評価できません と出るんですが。 NULLとは違う気がします。
vc自体ほとんど初めてなので他に書くことが足りないかも知れません。
563デフォルトの名無しさん:2005/03/23(水) 00:48:18
違う気がしますって…NULLか調べろよ
564557:2005/03/23(水) 00:52:30
NULLではなかったです。以下がデバッグのウインドウです

-hWND0x00b40330 {unused=??? }HWND__ *
unusedCXX0030: エラーです : 式を評価できませんint
565557:2005/03/23(水) 00:57:04
すみません、さっきのは間違い
デバッガ使わず呼び出してみたらNULLでした。
566デフォルトの名無しさん:2005/03/23(水) 02:18:20
リストビューについての質問です。
チェックボックス付きリストビュー (LVS_EX_CHECKBOXES) を使用しているのですが、
四角の部分をクリックしないとチェックボックスが変化しません。
横の文字をクリックしてもチェックボックスが反応するようにするにはどうしたらいいでしょうか?

WM_NOTIFY - NM_CLICK を拾ってみたのですが、
四角の場合も文字の場合もメッセージが来るので、うまく判別できませんでした。

ListView って情報が少ないような気がする・・・
567デフォルトの名無しさん:2005/03/23(水) 02:35:34
クリックされた時に座標見て区別とか
568デフォルトの名無しさん:2005/03/23(水) 02:36:01
>>566
比較的最近の実装であるにも関わらず、VC6にはFlexGridがバンドルされてたりしたので
仕様が中途半端なことと相俟って使い込む人が少ないからじゃないだろか。
CodeGuruに行くといろんな拡張を目にするが、微妙だったりやり過ぎだったりしてこれまた決め手に欠ける。

で、肝腎のチェックボックスの仕様だが、それで気が済まないなら自前でやるしかないと思われ。
569557:2005/03/23(水) 02:59:34
GetForegroundWindow でいけました。メモ帳のタイトル取れました。
しかしまたその後でうまく動かないです…
その後の ImmGetContext で IMEがONでもOFFでも hIMCに常にNULLが返ってきます。
いろいろ探したサンプルソース全部こんな感じだったんだけどなぁ。
MSDNも見たけどNULLになる条件等の記述はなかったです。

HWND hWND = GetForegroundWindow();
HIMC hIMC = ImmGetContext(hWND);
BOOL bRet = ImmGetOpenStatus(hIMC);
ImmReleaseContext(hWND,hIMC);
570デフォルトの名無しさん:2005/03/23(水) 04:44:14
>>569
おめーさん、GetForegroundWindowでもハンドル取れない
つってたじゃん。何で取れるようになった?

でさ、よく知らないんだけど、他プロセスのinput contextって
取得できるの?
GetLastErrorでアクセスできないとか返ってきてない?
571デフォルトの名無しさん:2005/03/23(水) 06:13:18
リッチテキストボックスを使用してるんですが、キーワードの文字色を自動で変える処理をやってるんですが、
Rtfコードを弄るとカーソルが先頭に来てしまいます。
カーソル位置の保存・スクロール状態の保存ー>Rtf編集後適応
とやっても瞬間的なスクロールがぱぱっと出てしまって画面がちらついてしまいます。
他にはリッチテキストボックスのプロシージャ内で、WM_PAINTメッセージを処理中には停止したりしたんですが、
どうにもちらつきが直りません。
スクロールの動きというか状態を一時停止する事は出来るんでしょうか?
572デフォルトの名無しさん:2005/03/23(水) 07:37:42
LockWindowUpdate?
573デフォルトの名無しさん:2005/03/23(水) 13:33:36
実行しているPCのタイムゾーン名をロケール設定に依存せずに"JST"、"EST"などの形で取得できる方法はないのでしょうか?
GetTimeZoneInformationを使用すると「東京 (標準時)」とか帰ってきますorz
574デフォルトの名無しさん:2005/03/23(水) 14:47:02
たしか、環境変数TZを指定しないと、だめだったっぽい。
標準では、日本語版Windows2000/XPでは設定されていない。
このための、日本語版Windows2000/XP限定の仕様(バグ?)だったはず。

ためしに、環境変数にTZ=JST-9を設定してみることをオススメする。
575デフォルトの名無しさん:2005/03/23(水) 14:48:50
waveファイルを再生するAPI教えて
576デフォルトの名無しさん:2005/03/23(水) 14:52:49
>>575
wave api でぐぐる位の事はしたんだろうな。おい。
577デフォルトの名無しさん:2005/03/23(水) 15:01:34
>>576
当たり前だろカスが、そんなレスいらねーよ
578デフォルトの名無しさん:2005/03/23(水) 15:05:05
「waveファイルを再生するAPI」でぐぐれ。
そして二度と来るな。
579デフォルトの名無しさん:2005/03/23(水) 15:31:43
アーカイバのC言語ソースって何処かに有るかな?
580デフォルトの名無しさん:2005/03/23(水) 15:32:27
ああ。どっかにあるよ。
581デフォルトの名無しさん:2005/03/23(水) 15:38:16
>580詳細キボンヌ
582デフォルトの名無しさん:2005/03/23(水) 15:40:10
>>578
レスするなつったろ!!消えろカスが
583デフォルトの名無しさん:2005/03/23(水) 15:41:21
>575≠>580ジャネーノ?
584デフォルトの名無しさん:2005/03/23(水) 15:41:45
>579か・・・
585デフォルトの名無しさん:2005/03/23(水) 15:49:06
ム板全体ID表示にしてくんねぇかなぁ。
586デフォルトの名無しさん:2005/03/23(水) 15:52:58
それは困る。自作自演ができない。
587デフォルトの名無しさん:2005/03/23(水) 17:09:16
僕も困る。
まったく別の複数の質問をしたい時、次の日まで待たないといけない。
588デフォルトの名無しさん:2005/03/23(水) 17:23:21
別に待たずに複数質問すりゃええやん。答える答えないは別にして。
589デフォルトの名無しさん:2005/03/23(水) 18:26:55
自作自演はにちゃんの華
590デフォルトの名無しさん:2005/03/23(水) 18:40:01
>>588
質問する時に、質問の要点が分かり難かったり、言葉使いが悪かったり、
質問側に不備があると答えてもらいにくくなるけど、
何回もの質問もそれに当たるかなと思って。

その質問や、それに似た質問に、一度答えてもらえないレッテルが貼られると、
マルチとか言われたりして、当分その関連の質問が出来なくなるから、
質問する時はかなり気を使う。
591デフォルトの名無しさん:2005/03/23(水) 19:11:05
まぁ、質問の前に自分の調べた範囲と、
その結果現れた問題に対する質問を明記するのは最低限の礼儀だろう。

さらに、疑問が複数あるなら、
1回の書き込みでうまく伝わるようにまとめる事も必要だろう。
複数回一気に投稿すりゃ、そりゃ投稿者は楽だろうが、
それを見た方は必然的にやる気あんの?ってことになるべ。

それを踏まえた上でなら、1回の質問で解決しない物は、
1回提出>解決>次を提出
なんてのも、普通にやることだろ?それが出来てりゃ答える人は答えるだろうさ。

答えてもらえない奴は、何処かで手抜きしてんだよ。
教えてもらってハイ終了なんて甘い考えで聞くからそれが相手にも伝わるんだろうさ。
んなもん、ここに限らず社会に出りゃ当然のことだと思うがな。
592デフォルトの名無しさん:2005/03/23(水) 20:16:07
複数のウィンドウを使うプログラムを作っています。
中心のウィンドウ以外には終了ボタンを付けたくないのですが、
終了ボタンの使えないウィンドウの作り方を教えてください。

最大化ボタンを使えなくする時は、^ WS_MAXIMIZEBOXで出来るのですが、
WS_CLOSEBOXみたいなのは無いようなので、分かりませんでした。
^ WS_SYSMENUだと、全部のボタンが使えなくなってしまいますし。
593デフォルトの名無しさん:2005/03/23(水) 20:20:05
EnableMenuItemをSC_CLOSEで。
594592:2005/03/23(水) 20:28:06
>>593
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_CLOSE, MF_GRAYED);
こんな感じで使って出来ました。ありがとうございました。
595550:2005/03/23(水) 21:12:20
>>551-554
シンプルで公開されているのがないかと思ったのですが、結構無いもんですね。
自前でやってみます...
596デフォルトの名無しさん:2005/03/23(水) 23:49:27
>>575
ShellExecute
597573:2005/03/24(木) 01:26:08
結局、環境変数TZ設定して_tzset(); _tzname[0]でお茶を濁すことに決定しますた(´・ω・`)
TZ=JST-9あってもGetTimeZoneInformationはしっかり日本語で返してくるようです‥‥
598557:2005/03/24(木) 02:02:31
GetLastError を ImmGetContext の直後に挟んでエラー情報を取得して表示してみたけどエラーは無かった…
ImmGetOpenStatus の直後でも同じだった。
行き詰った…
599デフォルトの名無しさん:2005/03/24(木) 02:04:20
メモ帳のウインドウプロシージャを交換するにはどうすればいいですか?
600デフォルトの名無しさん:2005/03/24(木) 02:23:44
>>599
メモ帳のプロセスに進入し、
ウインドウプロシージャに該当する箇所を挿げ替える。
601599:2005/03/24(木) 02:29:16
>>600
すいません、そのための関数や構文がわからないのです。
602デフォルトの名無しさん:2005/03/24(木) 02:37:39
>>601
AdvancedWindows読め。
603599:2005/03/24(木) 02:54:31
あい、入手してきます
604デフォルトの名無しさん:2005/03/24(木) 04:02:02
>>603
そうか。
入手してきたら「DLLの〜」という章(AdvancedWindows改修第4版では22章)を読むんだ。
そこに他のプロセスに介入する手段が載っている。
プロセスへ進入できればメモ帳のウィンドウハンドルから
サブクラス化するなりの手段で完全に乗っ取る事ができるはずだ。
605デフォルトの名無しさん:2005/03/24(木) 04:43:39
>>598
環境ないから試してないけど、

HWND hIme = ImmGetDefaultIMEWnd( hForeground );
LRESULT lr = SendMessage( WM_IME_CONTROL, IMC_GETOPENSTATUS, NULL );

こんなかんじでできそうという記述が、検索してたらちらほら見つかった。
606557:2005/03/24(木) 05:42:09
できた、!!!!!!
>>605 に感謝します。

IMC_GETOPENSTATUS ってぐぐっても7件しかヒットしないし、
MSDNに載ってないしこんなの見つけられない…
全ソースコードでも10行ぐらいのこのプログラムにすごく長期間苦しめられた。
607デフォルトの名無しさん:2005/03/24(木) 21:15:19
Visual Basic .NET 2003 + WIN32API でシリアル通信するプログラムを作ってるのですが
winXP上でコンパイルすれば、どのバージョンのWindowsからでも動くようになるのでしょうか。
それともコンパイラオプションなりで、ターゲットを明確にした方がよいのでしょうか。
writefileとかで簡単に出来るのは良いのですが、APIから下がどういう風に動いてるのかよくわからない・・・
608デフォルトの名無しさん:2005/03/24(木) 22:19:08
MSDNにAPIが使えるOSのバージョンって書いてないんだっけ?
609デフォルトの名無しさん:2005/03/24(木) 22:42:52
#define WINVER 0x0400
#define _WIN32_WINNT 0
#define _WIN32_WINDOWS 0
#define _WIN32_IE 0
#include <windows.h>
#include <windowsx.h>
いつもこうしている。
610デフォルトの名無しさん:2005/03/24(木) 22:43:25
>>608
例えばwritefileだったらいろいろ書いてあるけど、ページの最後の方に、
>Windows NT/2000:Windows NT 3.1 以降
>Windows 95/98:Windows 95 以降
ってかいてありますね。ということは、NT系と9x系両方対応してるのかな?
初心者なので良く分からないんだけど、APIで書いた部分はネイティブコードだろうから、
コンパイルした時点でハード制御の動作は決まってしまいますよね?
ということはコンパイルした時のDLLにNT系と9x系両方のコードが入ってるのかな?よくわからん。
611デフォルトの名無しさん:2005/03/24(木) 22:48:39
>>610
DLLってのは実行時に読み込まれる。
したがってコンパイル時にHやLIBに存在していた関数が
読み込んだDLLには存在していなかった、ということがありえる。
従って、Win2000以上などと限定された関数を含むプログラムを
WinMe以下にも対応させたければ、GetProcAddressを使って
関数が存在するかどうかを調べて、存在していなかったら関数を
呼ばないようにしないとならない。
612デフォルトの名無しさん:2005/03/24(木) 23:09:26
>>611
なるほど。ということは使いたい関数が実行時に存在していれば、
そのOS上では動作するということですね。
実行時にDLLを呼び出して機械語に変換できる仕組みというのが
いまいち不思議ですが・・・

613デフォルトの名無しさん:2005/03/24(木) 23:15:34
>>612
泥臭い事をするだけで不思議なことなんて何もないよ。
614デフォルトの名無しさん:2005/03/24(木) 23:16:48
>>612
DLLはすでに機械語になったプログラムだ。
615デフォルトの名無しさん:2005/03/24(木) 23:21:40
実行時リンクと言った方がわかりやすいかな
616デフォルトの名無しさん:2005/03/24(木) 23:24:30
>>614
信じられない
617デフォルトの名無しさん:2005/03/24(木) 23:27:28
コンピュータって不思議。



ですか?
618デフォルトの名無しさん:2005/03/24(木) 23:30:59
女って不思議。
619デフォルトの名無しさん:2005/03/24(木) 23:32:04
ダイナミックリンキングという方法は理解にしくいものなのかなあ?
620デフォルトの名無しさん:2005/03/24(木) 23:33:15
ageウザ
621デフォルトの名無しさん:2005/03/24(木) 23:34:03
>>619
いや、おそらくスタティックリンクがどういうことかも分かってないと思われ
622デフォルトの名無しさん:2005/03/24(木) 23:34:18
ageウザっていうやつがウザ


















という俺ウザ
623デフォルトの名無しさん:2005/03/24(木) 23:40:45
>>619
抽象的には理解できるが具体的にどう動くように作られるかが分からないんだよ。
コンパイル時には一意の機械語にはなってないんだろ。
その後に機械語を呼び出して動くというのが信じられないわけ。
もう寝る。
624デフォルトの名無しさん:2005/03/24(木) 23:43:42
>>623
コンパイル時もEXE側は〜というところにある関数を呼び出すと言うコードで一意になっている。
実行時に〜に関数のアドレスを埋めるのがダイナミックリンク。
625デフォルトの名無しさん:2005/03/24(木) 23:44:58
とりあえずスレ違いの話題がずっと続いていることだけは確か
626デフォルトの名無しさん:2005/03/24(木) 23:46:34
>>623
EXEファイルもロードされるまでは一意の機械語にはなっていない訳だが
627デフォルトの名無しさん:2005/03/24(木) 23:48:42
628デフォルトの名無しさん:2005/03/24(木) 23:52:22
「一意の機械語」ってどういう意味で使ってるんだ?
629デフォルトの名無しさん:2005/03/24(木) 23:53:17
そのままメモリ上に置くだけで動くって意味だろ?
comファイルならそうだが、exeはそうじゃない。
630デフォルトの名無しさん:2005/03/24(木) 23:53:53
金物表現と論理表現のあるアセンブラ(w
631デフォルトの名無しさん:2005/03/24(木) 23:59:08
リロケーションってやつか。
632デフォルトの名無しさん:2005/03/25(金) 00:04:29
なるほどー。DLLやEXEが絶対アドレスで記述されていると考えているわけか。
633デフォルトの名無しさん:2005/03/25(金) 01:45:27
デマンドページングだから相対アドレスの処理は現代のCPUにはないだろ。
むしろシンボルの解決とか。
634デフォルトの名無しさん:2005/03/25(金) 02:03:06
>>633
は?
635デフォルトの名無しさん:2005/03/25(金) 05:58:48
DLLのロードってシンボルの解決そのものだから
636デフォルトの名無しさん:2005/03/25(金) 08:09:24
シンボルの解決というよりシンボルをキーにしたIATの解決といった方が。
637デフォルトの名無しさん:2005/03/25(金) 18:07:00
あるアプリケーション(たとえばOutlookなど)の子ウィンドウをEnumChildWindows()で
列挙した場合、その順番は常に一定なのでしょうか。MSDNを見ましたが、Zオーダーと
いうのがいまひとつ分かりません。

アプリケーション(列挙される親ウィンドウ)側のファイルが変更することはありません。
試してみた限りでは一定なのですが、確証がないのでどなたか教えてください。
宜しくお願いします。
638デフォルトの名無しさん:2005/03/25(金) 18:30:33
>>637
まず、Zオーダーについて勉強すればいい。
639637:2005/03/25(金) 18:48:30
Zオーダーがウィンドウの前後関係(?)のようなものであることは
理解したんですが、重なっていないときの扱いがどうなるのかが
分かりません。

たとえばエディットコントロールを複数CreateWindow()したときに
必ずあとに生成されたものがZオーダーで前に来ることが保証されて
いるんでしょうか。
640デフォルトの名無しさん:2005/03/25(金) 19:06:18
641637:2005/03/25(金) 19:30:35
>>640
ありがとうございました。

> When an application creates a window, the system puts it
> at the top of the z-order for windows of the same type.

ということで、生成された順番で上に重なっていくという認識で良いのですね。

もともとの質問に戻ってEnumChildWindows()で列挙される順番も同じになるかと
思ったのですが、よく考えるとアプリケーション側でウィンドウ生成の順番が一定
とは限らないのカ…orz
642デフォルトの名無しさん:2005/03/25(金) 19:56:12
Windows が起動されたときの時刻を記録したいのですが、
どのような方法があるでしょうか?
とりあえず、次のような方法があることは分かっています。

(1) レジストリの Run キーに時刻記録プログラムを指定する。
(2) 時刻記録プログラムをサービスとして実装する。

これらの他に方法はないでしょうか?
643デフォルトの名無しさん:2005/03/25(金) 20:05:30
>>642
スタートアップに入れる。
見つかりにくい場所に隠したいのなら別だがw
644デフォルトの名無しさん:2005/03/25(金) 20:08:21
>>643
そうなんです。見つかりにくいところに隠したいんです。
スタートアップに入れると、他のユーザーでログインされたときに、
検知できませんよね。
645デフォルトの名無しさん:2005/03/25(金) 20:10:17
explorer.exeに寄生する
646デフォルトの名無しさん:2005/03/25(金) 20:10:23
スタートアップじゃログインしない限り実行されないから、
OS起動時ではない。
647デフォルトの名無しさん:2005/03/25(金) 20:12:22
>>645
それはどのようにやるのでしょうか?
648デフォルトの名無しさん:2005/03/25(金) 20:34:26
>>647
explorer.exe尻に自分のプログラムをくっつけて、
explorer.exeの先頭に
  jmp 時刻を記録の処理

時刻記録の処理:
  処理
  jmp ds:本来のアドレス


OSの復元機能等をオフにして、ウイルス扱いされないようにケアも必要
649デフォルトの名無しさん:2005/03/25(金) 20:35:43
PEでそれやるくらいなら漏れならサービス作るな。
あるいはNW上の他の機械からpingでも打つか。
650デフォルトの名無しさん:2005/03/25(金) 20:42:37
GetTickCountはWindowsが起動されてからの時間を返すわけだが。
651デフォルトの名無しさん:2005/03/25(金) 20:45:57
うん知ってるよ。それで?
652デフォルトの名無しさん:2005/03/25(金) 20:47:03
>>650 それで?話題がつながってないような。。
653デフォルトの名無しさん:2005/03/25(金) 20:49:08
>>642
起動してしばらく経ってからでいいのなら、現在時刻からGetTickCountを差し引いた
時刻を記録するプログラムをスタートアップに入れる。
おそらく、これがもっとも正確にWindows(の時刻サービス)が起動した時刻を求められる。
654デフォルトの名無しさん:2005/03/25(金) 20:53:09
>>653
話がずれてる。
起動時間も記録方法もわかっているはず…

> 643 名前:デフォルトの名無しさん[sage] 投稿日:2005/03/25(金) 20:05:30
> >>642
> スタートアップに入れる。
> 見つかりにくい場所に隠したいのなら別だがw
>
> 644 名前:デフォルトの名無しさん[sage] 投稿日:2005/03/25(金) 20:08:21
> >>643
> そうなんです。見つかりにくいところに隠したいんです。
> スタートアップに入れると、他のユーザーでログインされたときに、
> 検知できませんよね。
655デフォルトの名無しさん:2005/03/25(金) 20:54:41
>>644
AllUsersのスタートアップに入れればいいじゃない。
656デフォルトの名無しさん:2005/03/25(金) 20:58:18
>>644
どういう理由かは知らんが、
そういういけすかないアプリをインスコされる方はたまったもんじゃないな。
657デフォルトの名無しさん:2005/03/25(金) 20:58:49
> Windows が起動されたときの時刻を記録したいのですが、
> (1) レジストリの Run キーに時刻記録プログラムを指定する。
> (2) 時刻記録プログラムをサービスとして実装する。
> これらの他に方法はないでしょうか?

> 見つかりにくいところに隠したいんです。
658デフォルトの名無しさん:2005/03/25(金) 20:59:39
>>655
あそこは意外と盲点だな
659デフォルトの名無しさん:2005/03/25(金) 21:15:07
>>648
そんなことしなくても
explorerに好きな時に進入してプロセスが起動した時刻調べりゃいいじゃん。
660デフォルトの名無しさん:2005/03/25(金) 21:25:44
>>657
ドメインコントローラがあるならログインスクリプトを流すという手も。
661644:2005/03/25(金) 21:27:51
>>656
>どういう理由かは知らんが、
>そういういけすかないアプリをインスコされる方はたまったもんじゃないな。

他人のパソコンに仕込むんじゃなくて、
自分のパソコンが不正使用されていないかを確認したいんです。

>>659
できるだけ気づきにくいところに入れたいのと、
あと、できるだけ削除しにくいところに入れたい。
相手がシステムのことをよく知っていれば、
仕込んでも回避されてしまいますから。
662デフォルトの名無しさん:2005/03/25(金) 21:28:58
タスクスケジューラの自動化か何かで
指定時刻に休止状態から復帰できるようにするにはどうしたらいいですか?
663デフォルトの名無しさん:2005/03/25(金) 21:31:26
664デフォルトの名無しさん:2005/03/25(金) 21:37:42
>>644
> できるだけ気づきにくいところに入れたいのと、
> あと、できるだけ削除しにくいところに入れたい。
> 相手がシステムのことをよく知っていれば、
> 仕込んでも回避されてしまいますから。
鼬ごっこになるだけ。648みたく何らかのカーネルプログラムに寄生するしかない。

未確認だが、OSのブートログの日付をみて判断すればいいじゃん。
665デフォルトの名無しさん:2005/03/25(金) 21:39:56
諜報機関から身を守りたいんです。
666デフォルトの名無しさん:2005/03/25(金) 21:40:12
もう一つ未確認だが、ページファイルを解析?する方法もある。
667デフォルトの名無しさん:2005/03/25(金) 21:41:03
そうだね。
つーかイベントログみりゃいい話。
668デフォルトの名無しさん:2005/03/25(金) 21:41:31
ブートローダーとかにパスワードをかければ良さそうな…
669デフォルトの名無しさん:2005/03/25(金) 21:41:42
>>666
それはどうやるんですか?
670デフォルトの名無しさん:2005/03/25(金) 21:41:56
>666
未確認なのに方法もある、じゃねーだろこのチンカス
671デフォルトの名無しさん:2005/03/25(金) 21:42:18
>>668
ブートローダを書き換えられたら?
672デフォルトの名無しさん:2005/03/25(金) 21:43:10
>鼬ごっこになるだけ
起動と同時にメール送信すれば。
673デフォルトの名無しさん:2005/03/25(金) 21:44:01
>>671
不正アクセスと判断する。
674デフォルトの名無しさん:2005/03/25(金) 21:44:30
おおかた会社でエロ画像でもダウソしてんだろw
大事なファイルなら暗号化しとけばいいじゃん。
675デフォルトの名無しさん:2005/03/25(金) 21:45:29
>>671
書き換えをした時点で「不正使用されていないかを確認」する必要はなくなるよね
676デフォルトの名無しさん:2005/03/25(金) 21:46:37
>>675
不正使用後に、元のブートローダに復元されたら?
677644:2005/03/25(金) 21:47:57
>>674
ちがいます。失礼なっ!
678デフォルトの名無しさん:2005/03/25(金) 21:48:59
>>676
多分判らない。

鼬ごっこになってるぞ。それに、もう、プログラムでなくセキュリティ系…
679デフォルトの名無しさん:2005/03/25(金) 21:52:02
まぁ、Win32APIには関係ない話になっていってるな。
680デフォルトの名無しさん:2005/03/25(金) 22:01:49
ソフトじゃどうにもならない問題だと思う
681デフォルトの名無しさん:2005/03/25(金) 22:14:45
たしかに鼬ごっこだが、何層にも防壁を入れておけば、
1回の起動という機会で破られることはないだろう。
682デフォルトの名無しさん:2005/03/25(金) 22:32:14
つうか
そこまでするような奴と共用しなければ良いと思うのは俺だけ?
683デフォルトの名無しさん:2005/03/25(金) 22:49:19
Windowsのパスワード機構の何が不満なのか
684デフォルトの名無しさん:2005/03/25(金) 23:32:11
AdvancedWindows買ってきた
685デフォルトの名無しさん:2005/03/25(金) 23:44:31
LoadLibraryで読み込んだDLLは必ずFreeLibraryで開放しなくてはいけないのでしょうか?
こちらのプログラムが終了したときに開放されているようなのですが・・・
これも、malloc,freeなどと同じようなものなのでしょうか?
686デフォルトの名無しさん:2005/03/26(土) 00:57:48
>>685
終了時には開放される。
687デフォルトの名無しさん:2005/03/26(土) 01:07:27
イベントログに起動時刻残ってるのに・・・
688デフォルトの名無しさん:2005/03/26(土) 01:18:06
Windowsプログラム初心者なのですが

HICON(HANDLE)が指すデータポインタとサイズを取得するには
どうしたらよいでしょうか?
データをリードするときにハンドルをロックする必要があれば
ロックする方法も教えてください。

データごとファイルに書き出したいのです。
よろしくおねがいします
689デフォルトの名無しさん:2005/03/26(土) 01:22:33
>>688
.icoファイルを作りたいと言う意図なら、その方法では不可能だぞ?
690デフォルトの名無しさん:2005/03/26(土) 01:24:26
>>688
まず、Handleとは何か?から勉強汁。
ちなみに、おそらく藻前が思い描いている方法では、
アイコンファイルは作れない。
691デフォルトの名無しさん:2005/03/26(土) 01:53:03
>>642
シェルをすり替えるという方法も
692デフォルトの名無しさん:2005/03/26(土) 02:00:17
>>691
syslogでFAだっちゅーの!!
693688:2005/03/26(土) 02:17:28
どちらかというと、icoファイルを読み込んで得たHICONのデータを
他のデータと一緒にファイルに書き出したいのです

ご教授よろしくお願いします
(API名だけでもヒントいただければ、がんばってみます)
694デフォルトの名無しさん:2005/03/26(土) 02:23:16
>>693
>>690

そもそもHANDLE形式になっているのは、
HANDLE形式にすることによって、
内部で実際に扱っているデータを隠蔽する為。
あとはわかるな?
695デフォルトの名無しさん:2005/03/26(土) 02:23:19
>>693
そういうことはできないってば。
ttp://msdn.microsoft.com/library/techart/msdn_icons.htm
でも見て勉強汁。
696566:2005/03/26(土) 02:35:12
>>567-568
遅くなりましたが回答ありがとうございました。
調べたら座標は取れたので 567 さんの方法を採用しましたが、他にも動きに不満があるので
568 さんのいう FlexGrid も調べてみます。
697デフォルトの名無しさん:2005/03/26(土) 03:24:16
>>693
GetIconInfo とか。
698デフォルトの名無しさん:2005/03/26(土) 12:51:23
>>694
その論法は間違っている。
アイコンは無理だが、多くのGDIオブジェクトのハンドルからは
GetObject()で情報を取得することが出来る。
699デフォルトの名無しさん:2005/03/26(土) 13:10:54
ユーザーがログオンおよびログオフしたときのイベントって、
ウィンドウやサービスから知ることはできますか?
700デフォルトの名無しさん:2005/03/26(土) 13:41:47
できなけりゃWindowsなんぞ使わない。そんなOS無い
701デフォルトの名無しさん:2005/03/26(土) 14:10:32
>>700
解ってて答えてるんだろうけど、質問スレで「できますか?」の質問に
「できる」「できない」で答えてるのは馬鹿に見えるよ。
702デフォルトの名無しさん:2005/03/26(土) 14:14:57
へいへいわたしゃ馬鹿でいいです
703デフォルトの名無しさん:2005/03/26(土) 14:41:19
>>702
× 馬鹿でいい
○ ばっかで〜す
704デフォルトの名無しさん:2005/03/26(土) 14:54:38
なんだとー、<`八´> 謝罪と賠償するニダ
705デフォルトの名無しさん:2005/03/26(土) 16:05:27
>>704
勝手にしてくれ。
706デフォルトの名無しさん:2005/03/26(土) 16:14:34
>>699
できますよ
707デフォルトの名無しさん:2005/03/26(土) 16:16:35
↑というわけで、おまいに馬鹿2号の称号を授ける
708デフォルトの名無しさん:2005/03/26(土) 16:36:23
>>699
できる
709デフォルトの名無しさん:2005/03/26(土) 17:24:09
>>699
できるよ
710デフォルトの名無しさん:2005/03/26(土) 17:36:58
つか>>701は相当馬鹿だな
初心者か
711デフォルトの名無しさん:2005/03/26(土) 18:22:11
できるかもよ
712デフォルトの名無しさん:2005/03/26(土) 18:23:03
できちゃった
713デフォルトの名無しさん:2005/03/26(土) 18:37:46
やん
714デフォルトの名無しさん:2005/03/26(土) 18:38:24
リッチエディット(2.0)でファイル以外にRTFを入出力するにはどうしたらいい?
ファイルに保存とかファイルから読み込みとかはいっぱい見るけど応用の仕方がわからない・・・
715デフォルトの名無しさん:2005/03/26(土) 19:06:35
>>699
きっと君なら出来る
716699:2005/03/26(土) 19:08:32
結局みなさん知らないのですね。
それならそうと言ってくださればいいのに。
717デフォルトの名無しさん:2005/03/26(土) 19:11:44
             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ
718デフォルトの名無しさん:2005/03/26(土) 19:12:44
>>714
EM_STREAMOUT EM_STREAMIN

>>699
できます!!
719デフォルトの名無しさん:2005/03/26(土) 19:27:57
>>714
>>ファイル以外にRTFを入出力する
という意味がわからないが、「猫でも分かる...」に、rtf format の使い方が
載っている。自分は、C のソースの表示などで、用語の色付けとか、検索結果
の該当用語の強調に使っている。色付き文字の画面を作って bmp で保存して
貼り付けに使うとか。(MSwordで作って Print Screen でも出来るが)
720デフォルトの名無しさん:2005/03/26(土) 19:35:34
>>693
自分も HICON から辿れないか、調べましたが、行きつけませんでした。
また、HICON がもつデータは(説明によれば)RT_ICON と同じで、DIB に
mask bit が付加されたものだけのようで、.ico ファイルにするには、
更に2種類のブロックを追加しなければなりません。また、通常の .ico には
表示装置や表示環境に合うよう、複数の icon を持っていますので、これらを
全部揃えないと、補完された表示になって、汚くなります。
従って、HICON からではなく、元のデータの所在を探さざるを得なくなります。
721デフォルトの名無しさん:2005/03/26(土) 19:47:24
exeとかから抽出しろと。
722デフォルトの名無しさん:2005/03/26(土) 19:56:32
>>688
やりたいことがよく分かんないけど、.icoの読み書きなら↓をどうぞ。
HICONからicoファイルを作りたいなら、BITMAPの読み書きの要領で構造体を埋めて
ファイル出力するしかないかと。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_icons.asp
http://www.geocities.jp/gthu1df564/ico.html
723714:2005/03/26(土) 20:52:00
ファイル以外にRTFを入出力する
というのはディスク上のファイルを介さずにメモリ上(string,char[]とかに)にテキストを読み出せたらいいな、という意味

どこかにRTFの仕様ないかな・・・英語のやつがMSにあるのは知ってるけど日本語のやつが見つけられない。
誰か基本的な部分だけでも教えてほしい。文字のフォントや強調表示とか。
724デフォルトの名無しさん:2005/03/26(土) 21:01:28
>>723
だからEM_STREAMOUT/EM_STREAMINだろ? 別にファイルに書き込まなきゃなんないなんて仕様があるわけじゃなし。
725デフォルトの名無しさん:2005/03/26(土) 21:08:53
プログラムでパスワードを保存したいのですが、みなさんはどうしていますか?
エンコードして単純にINI ファイルやレジストリに記録しておくのはちょっと心配ですよね。
何かよい方法はないものでしょうか。。。
726デフォルトの名無しさん:2005/03/26(土) 21:19:57
つまりデコード出来る形でどこかに書いておきたいという事なのか?
727デフォルトの名無しさん:2005/03/26(土) 21:20:05
暗号化
728725:2005/03/26(土) 21:22:42
具体的に言いますと、アプリからメール送信をしたいので、
SMTP サーバーへの認証情報を記録したいのです。
ですから、不可逆の暗号化はできなくて、
デコードできる形で記録したいです。
729デフォルトの名無しさん:2005/03/26(土) 21:25:40
可逆の暗号化だな
730デフォルトの名無しさん:2005/03/26(土) 21:26:58
その暗号化に使うパスワードをどこに保存すれば・・・
731デフォルトの名無しさん:2005/03/26(土) 21:27:40
>>729
どういうのが安全でしょうか?
よく Crypt が使われますが、すぐに破られそうです。
732デフォルトの名無しさん:2005/03/26(土) 21:28:58
実行バイナリにパスワードを入れておけば、
分かりにくいけど、デバッガで追跡されたら終わりだしな。
それから、オープンソースにできないという欠点もある。
733デフォルトの名無しさん:2005/03/26(土) 21:29:53
notpasswordってファイル名にすれば
スーパーハカーもスルーすると思う
734デフォルトの名無しさん:2005/03/26(土) 21:30:44
そういやASMTPで送信されるパスワードって
エンコードされてるけどおもいっきり可逆なんだよ
だからディスク上に暗号化して置いてあっても
トラフィック盗聴されればおしまい
735デフォルトの名無しさん:2005/03/26(土) 21:30:55
自分の実行ファイルを書き換えて
パスワードを保存するってのは。
736デフォルトの名無しさん:2005/03/26(土) 21:31:38
>>734
CRAM-MD5 認証なら大丈夫。
737725:2005/03/26(土) 21:40:27
NTFS であれば、パスワードを記録したファイルに対して
ファイルのプロパティで暗号化を施せば、
そのユーザー以外から見られることはなくなるので、安全ですね。

ただ、サービス プログラムなどの、特定のユーザーと
結びつかないプログラムでは、この方法は使えなさそうです。
738デフォルトの名無しさん:2005/03/26(土) 21:41:30
そしてFATが使われているときにも使えない。
739デフォルトの名無しさん:2005/03/26(土) 21:46:50
DllMain内でDLL_PROCESS_ATTACHがきた時にRegisterClassExをしようとしているのですが、
DllMainの引数で渡されるインスタンスハンドルを使うとRegisterClassExは成功しますが、
その後CreateWindowExが失敗します。(EXE側でWM_CREATEがきた時に。)
GetModuleHandle(0);だと成功するのですが、これで解決させたくありません。

どんな原因が考えられるのでしょうか?
740デフォルトの名無しさん:2005/03/26(土) 21:49:00
>>739
GetLastError() は何と言っている?
741デフォルトの名無しさん:2005/03/26(土) 21:49:25
Windows 98です。
CreateWindowExにはGetLastErrorが使えない…… orz
742デフォルトの名無しさん:2005/03/26(土) 21:52:39
これは関係ないのか?

Windows 95/98/Me: All window classes registered by a dynamic-link library (DLL) are unregistered when the .dll is unloaded.

Windows 95/98/Me: RegisterClassEx fails if the cbWndExtra or cbClsExtra member of the WNDCLASSEX structure contains more than 40 bytes.
743デフォルトの名無しさん:2005/03/26(土) 21:52:54
98ではCreateWindowExは使えないが
744デフォルトの名無しさん:2005/03/26(土) 21:53:22
745デフォルトの名無しさん:2005/03/26(土) 21:55:00
>>741
>CreateWindowExにはGetLastErrorが使えない

そんなことどこに書いてある?
746デフォルトの名無しさん:2005/03/26(土) 21:55:47
>>742
ごめん、全然関係ないや
747デフォルトの名無しさん:2005/03/26(土) 21:56:36
748デフォルトの名無しさん:2005/03/26(土) 21:56:37
749デフォルトの名無しさん:2005/03/26(土) 22:07:57
Windows98やMEでCreateWindowExを使うとバグが出て
ウィンドウを2つ3つ作ったところでAPが落ちるらしい。
まあ素直にダイアログ作っとけってこった。
750デフォルトの名無しさん:2005/03/26(土) 22:09:14
すなおに 9x は捨てろってこった。
751デフォルトの名無しさん:2005/03/26(土) 22:15:37
>>749
詳細キボン
752デフォルトの名無しさん:2005/03/26(土) 22:17:26
そうだな、リソースなんて概念に縛られてるようじゃ今時やってられん
753デフォルトの名無しさん:2005/03/26(土) 22:26:20
>>751
どうしてもそれが必要になった事があってAPを
2000とXPでテストして客先に、提出したのよ。
(一応98とかは、サポート外だった)
そんでもって客の都合で、たまたまAPを98で動かしてみたら
落ちたって言うから、調べてみたらそいつが原因だったってわけ。
754デフォルトの名無しさん:2005/03/26(土) 22:39:40
>>753
CreateWindowExなんて良く使うAPIでバグがあるんならもっと話題になってもいいようなもんだが
ググっても見つからんし、信用できんな。
755デフォルトの名無しさん:2005/03/26(土) 22:59:07
>>753
そんな話は初めてだし普通にEx使って何の問題も出たことないよ。
別のところに問題あったのが偶然致命傷にならずに動いてて
最終的にExの部分で発現しただけでは?
756デフォルトの名無しさん:2005/03/26(土) 23:00:17
2000系では落ちないけど9x系では落ちる……。
十中八九、>749のアプリケーションのバグだな。

だから俺はMeが手放せない。些細なバグでも落ちてくれる。
757デフォルトの名無しさん:2005/03/26(土) 23:07:00
CreateWindowはCreateWindowExを呼び出すマクロだった気が
758デフォルトの名無しさん:2005/03/26(土) 23:10:27
マクロになってるね。
759デフォルトの名無しさん:2005/03/26(土) 23:19:46
>>723
EDITSTREAM の構造体の callback に ReadFile(), WriteFile() を普通は
書いていると思いますが、例えが、WriteFile() の代わりに、格納先のメモリ
に MoveMemory() して、メモリのポインタをそのバイト進めるという処理を
続ければ、メモリに書き出した内容が置かれます。(GlobalReAlloc() すれば
どんどん書けます)
rtf の仕様は、ヘルプで出てくるのを見た憶えがあります。
また、MSword があれば、拡張子を .rtf にして書き出せば、どんな風に出て
来るかわかるでしょう。同じ内容を .txt でも書き出せば、対比できます。
文字を着色するだけなら、色指定と文字の格納の方法だけわかれば、txt->rtf
は簡単なので、私はCのソースは、txt で読んで、rtf に変換して、画面へ
送りこんでいます。文字列が英字だけなら文字列はそのまま rtf に置かれます。
760720:2005/03/26(土) 23:42:11
>>693, >>721
(続き)
アイコン・データの所在を例示すると、一般的なものは、Shell32.dll に多くあります。
今、win98 で見たら、大小 342 個(RT_ICON ベース)ありました。
RT_GROUPE_ICON が ico ファイルに対応していて、この中に要素のアイコンを示す index
があり、RT_ICON を参照するようになっています。
.bmp ファイルのアイコンは、ペイントにあり、MSword のは MSword, Excel のは
Excel にあります。以下同様。
で、.exe, .dll の中を見るには resource editor があれば容易だと思いますが、
VC++ のサンプルの PeFile にアクセス方法が載っています。MSN には、今や PeFile
はないようですが。
.ico ファイルに復元する個数が少ないなら、個々のアイコンの DIB には、
相対アドレスを参照する値はないので、バイナリ・エディタで、hex を切り出して、
自分で hex 編集して、バイナリに戻せば、.ico ファイルにできないことはないで
しょう。
(しかし、決まりきったアイコンを使うだけなら、ExtractIconEx(),
ExtractAssociatedIcon() などの API を使うのが、早道です。)
761デフォルトの名無しさん:2005/03/27(日) 00:13:50
>>745
SetLastError(0xffffffff);
CreateWindowEx(〜);
GetLastError();とすると失敗するときはffffffff、成功するときには57が常に表示されます。
(その0x57をFomatMessageに通すと「パラメータが正しくありません。」となります)

ちなみにCreateWindowExに渡すインスタンスハンドルをEXEのものからDLLのモジュールハンドルに変えたらこれでも成功しました。
ただ、これだったらDLL内でGetModuleHandle(NULL);する方にします。
DLL内のクラスにはDLLのインスタンスハンドルを指定しろとMSDNには書いてあるのが気がかりですが。
762720:2005/03/27(日) 00:32:03
>>760
忘れたので。
Shell32.dll は Windows フォルダにあるままでは、使用中で読めないことが
あるので、コピーを作って、開きます。
763デフォルトの名無しさん:2005/03/27(日) 00:32:03
嫌ならwindows使うな
764デフォルトの名無しさん:2005/03/27(日) 00:32:18
>>761
C Magazineの2004年12月号 125ページをみるべし
765デフォルトの名無しさん:2005/03/27(日) 00:37:05
>>761
ウィンドウクラスは、インスタンスハンドルとクラス名で特定される
ということを知ってるか?
766デフォルトの名無しさん:2005/03/27(日) 02:34:27
>761
CreateWindowEx()をいつ呼んでいるのかが気になるのだが…
767デフォルトの名無しさん:2005/03/27(日) 03:52:07
>>761
RegisterClassに渡すインスタンスは、プロシージャのアドレスを解決するためのものだから
DLLにプロシージャを書いてるならDLLのインスタンスハンドルを渡すべし。

CreateWindowは実際に動いているプログラムのインスタンスを渡すべし。
Win32のコントロールとかDLLに入っててもCreateWindowにはプログラムのインスタンスを
渡してるでしょ、それと同じ。
要するにGetModuleHandle(NULL)だなー。
768デフォルトの名無しさん:2005/03/27(日) 06:53:59
漏れの古いプロジェクト見るとWinNT/2000/XP系用と
Win98/Me系用でReleaseが分かれていた。
あたりまえといえばそうなんだが、確かソースは同じで
コンパイルオプションかリンクオプションか何か変えないと
Win98/Me系でCreateWindowExがまともに動かんかったと記憶してる。
769デフォルトの名無しさん:2005/03/27(日) 07:09:41
>>768
自分の管理してるソースだろがw
知らない間に妖精さんが書いたとか言うなよ。

CreateWindowExそのものじゃなくて、顧問コントロールを使うときの
マクロ切り替えだったんじゃないの?
今、思いつくだけでもバルーンチップ。
770デフォルトの名無しさん:2005/03/27(日) 08:54:02
>>767
> RegisterClassに渡すインスタンスは、プロシージャのアドレスを解決するためのものだから
> DLLにプロシージャを書いてるならDLLのインスタンスハンドルを渡すべし。

コレマジっすか?
771デフォルトの名無しさん:2005/03/27(日) 09:45:48
>>770
ウソ。サブクラスするときにはインスタンスハンドルを渡さないだろ。

EXEとDLL、あるいは複数のDLLが同一のクラス名でRegisterWindow()
したときに(一般にそれらの作り手は別であるので、名前が被る可能性は
十分にある)、CreateWindow()で目的のクラスを確実に指定するには、
クラス名だけでなくインスタンス固有の値も一緒に指定する必要がある。
逆にいうと、インスタンスハンドルにはクラスを特定するための意味しかない。
実際、インスタンスとして無効な値を渡しても動くしな。
772デフォルトの名無しさん:2005/03/27(日) 10:07:17
>>771
NT系ならCreateWindowのインスタンスハンドルは無視すると書いてある。
773デフォルトの名無しさん:2005/03/27(日) 11:50:15
>>769
いや、妖精ではないが、何年も前のものなのでもう忘れた。
昨日の自分は明日の他人だ。
774デフォルトの名無しさん:2005/03/27(日) 12:48:38
DLLをロード/アンロード/ロードしたりすると、
インスタンスハンドル変わる時があるから、
偶発的なバグになって苦労するよ
775デフォルトの名無しさん:2005/03/27(日) 12:52:58
>>772
どこに?
776デフォルトの名無しさん:2005/03/27(日) 12:56:24
人に聞く前にMSDNぐらい見ようぜ。
777デフォルトの名無しさん:2005/03/27(日) 13:48:47
>>776
すまん、古いのを見てた。
MSDNもわざわざ間違いを追記することないのにな。
778デフォルトの名無しさん:2005/03/27(日) 13:50:57
MSDN見る前に人に聞こうぜ。そのほうが早いよ。
779デフォルトの名無しさん:2005/03/27(日) 14:39:39
人に聞くまえにMSDN見ようぜ。そのほうが早いよ。
780714:2005/03/27(日) 14:42:48
>>759
thx.
コールバック関数にくるのはReadFile特注のデータじゃないのね。少しわかってきた。

RTF先頭の
{\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}}
とかいうヘッダみたいなのはそのまま使えばいいものなのかな?
781714:2005/03/27(日) 15:41:07
http://www.users.gr.jp/ml/archive/viewer.aspx?name=vb&no=1848
↑ここに書いてあることって正しいよね?日本語はエスケープしたほうがいいと思うけど
782デフォルトの名無しさん:2005/03/27(日) 15:44:25
コンソールアプリでタイマを使いたい場合は、どの関数を用いればいいのでしょうか。
ある処理を一定の間隔で繰り返すようなプログラムを作りたいのですが・・・
783デフォルトの名無しさん:2005/03/27(日) 15:51:53
>>773
今日はどっち?
784デフォルトの名無しさん:2005/03/27(日) 15:54:21
>>782
コンソールアプリでって言うのはメッセージループもなし?だとしたら
タイマは使えないよ、WM_TIMERを処理できないわけだから。
785デフォルトの名無しさん:2005/03/27(日) 15:55:08
SetTimerでHWNDにNULLを指定してlpTimerFuncに特定のコールバック関数を指定したら
ウィンドウやWM_TIMERの受け皿がなくてもできるかもしれない。
と思ったけどMSDNに「WM_TIMER メッセージを処理する代わりに TimerProc 関数を使う場合も、呼び出し側スレッド内でメッセージをディスパッチ(転送)する必要があります。」
って書いてあるから多分無理。。。
786デフォルトの名無しさん:2005/03/27(日) 16:00:08
マルチメディアタイマなら使えるんじゃない?
787デフォルトの名無しさん:2005/03/27(日) 16:20:33
>>786
ありがとうございます。
これってコンソールから割と簡単に使えるものなんでしょうか。
Windowsのプログラミングにあまり詳しくないもので・・・
あまり実用例がないものならGUIに乗っけてつくろうかなと思います。
788デフォルトの名無しさん:2005/03/27(日) 16:47:47
GUIアプリとしてスケルトンを作って、AllocConsoleでコンソールを開き、メインウィンドウを
不可視にしたうえでWM_TIMERを受け取るとか。
789デフォルトの名無しさん:2005/03/27(日) 17:04:39
別に
while(1){
func();
Sleep(1);
}
みたいにすれば良いと思うが。
790デフォルトの名無しさん:2005/03/27(日) 17:09:37
>>788
なんか複雑そうですが、
timeGetTime()というのがコンソールから使えそうなので、これにしようと思います。
あとついでなのですが、コンソールではSleep関数は使えるのでしょうか。
コンソールってWindows上ではスレッドで動いてるのかな?
どうもWindowsは単純プログラマではわからんことが多い・・・
791デフォルトの名無しさん:2005/03/27(日) 17:11:52
>>790
スレッドで動いてるって何だろう…何も特別なことをしなければ
シングルスレッドで動いてるよ。もちろんマルチスレッドにも出来る。
コンソールアプリだろうとGUIアプリだろうと同じ。
792デフォルトの名無しさん:2005/03/27(日) 17:11:53
>>789
それも使う予定ですが、どうしても相対時間を測りたい部分があるので。
793デフォルトの名無しさん:2005/03/27(日) 17:23:45
>>791
シングルスレッドというのは、windowsの他のプログラム(例えばWORDとか)と
基本的に同じってことでしょうか。
Windowsにしろ処理の流れは一本だから、どっかで無限ループなどに陥ったら
全体がとまってしまうのではないかと心配なんですけど。
794デフォルトの名無しさん:2005/03/27(日) 17:26:56
マルチプロセス
795デフォルトの名無しさん:2005/03/27(日) 17:28:19
MSWORDはマルチスレッドだが
796デフォルトの名無しさん:2005/03/27(日) 17:40:12
DLLのプログラミングで自分自身のパスを知るにはどうしたら良いですか?
797デフォルトの名無しさん:2005/03/27(日) 17:48:32
>>796
DllMain() に渡されるインスタンス ハンドルを、
GetModuleFileName() に指定する。
798デフォルトの名無しさん:2005/03/27(日) 17:51:15
>>796
DllMainに渡されるモジュールハンドルをGetModuleFileNameでいいんじゃね?
DllMainって自分で書く機会ってあんまりないよね。
799798:2005/03/27(日) 17:51:56
>>797
ケコーン
800796:2005/03/27(日) 18:01:28
>>797-799
謝謝
801759:2005/03/27(日) 18:36:01
>>780-781
何年も前にやったので、細部はよく憶えていないけど、いいみたい。
漢字(shift-JIS)は、自分は下記の format で、1バイト目、2バイト目を書き出している。
"\\\'%02x\\\'%02x"  // 結果は、\'xx\'yy という形なる。

細かいことですが、unicode の漢字で、第1バイトと第2バイトとか逆転しているケースとか
あるようだけど、対応してません。(ソースを見たら、コメントに書いてあった)
802デフォルトの名無しさん:2005/03/27(日) 19:19:46
HRESULTとLRESULTの違いってなんですか?
803デフォルトの名無しさん:2005/03/27(日) 19:22:51
さあね
804デフォルトの名無しさん:2005/03/27(日) 19:35:21
>>802
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp
HRESULTはCOM関数・インターフェイスの戻り値に使われる使われるLONGからのtypedef
LRESULTはメッセージの戻り値に使われるLONG_PTRからのtypedef
805デフォルトの名無しさん:2005/03/27(日) 20:13:06
HRESULTはビットごとに意味があるよ
806714:2005/03/27(日) 20:19:49
>>801
日本語はそのエスケープであってるんだ。安心。
というわけでワードパッドで出力したファイルと照らし合わせて研究中。
いろいろありがとう。
807デフォルトの名無しさん:2005/03/27(日) 20:52:23
>804-805
レスありがとうございます
MSDNライブラリってこういうのも載ってるんですね
日本語のページ見難くて見つけられなかった;
808デフォルトの名無しさん:2005/03/27(日) 21:07:33
>>807
日本語のページが見づらいのと英語のページで見つけられないってのは別物だぞ
809デフォルトの名無しさん:2005/03/27(日) 23:22:34
俺だと日本語のページは見づらい以前に文字化けして読めない……。
どうしても英語のほうを読むしかない
810デフォルトの名無しさん:2005/03/28(月) 00:15:05
encode
811デフォルトの名無しさん:2005/03/28(月) 02:08:48
>>783
今日の自分は、
1)過去の自分が他人に見える
2)未来の自分からみると他人に見られる存在
っていう意味だろ?
812809:2005/03/28(月) 03:59:44
>>810
いや、エンコードは一通り試したつもりなんだ。
参考までに、他の人が正常に見れる場合の文字コードを教えてくれ
813デフォルトの名無しさん:2005/03/28(月) 08:05:20
ただのShift JISだがもしかしてIEでしか見れないようにしているとかの罠があるんじゃないか?
814デフォルトの名無しさん:2005/03/28(月) 09:25:03
便乗すると、漏れの場合は文字化けというか、左側のフレーム内が意味不明になります。
こんな感じ。これが普通?

□MSDN ?????
□????????
□???? ??? Embeaded ??
□.NET ??

米国サイトなら普通に読めるんだけどね。
815デフォルトの名無しさん:2005/03/28(月) 09:28:18
IEの言語設定は?
816814:2005/03/28(月) 09:45:59
日本語(自動設定)またはShift-JISです。
IEとFirefoxでエンコードをあれこれ試したけど、
右側部分はS-JISでないと文字化けするし、左側は設定に関係なく読めないみたいです。
817デフォルトの名無しさん:2005/03/28(月) 09:49:43
IEのバージョンは?
IE6ならWin98でも読めたがIE4だと化けるねー。
818814:2005/03/28(月) 09:58:48
OSはWin-XPで、IEは6.0.2900.2180.xpsp_sp2.rtm...なのにorz
米国サイトじゃないと出てこない情報もあるみたいだし、日本語版はあきらめました。
819デフォルトの名無しさん:2005/03/28(月) 10:12:41
自動選択のチェックを外して、Shift_JISにするとどうなる?
IEの自動設定はバグだらけなので、自社サイトも読めない可能性がある。
820デフォルトの名無しさん:2005/03/28(月) 10:12:51
「フォントキャッシュの破損」なんかじゃないよね?
821デフォルトの名無しさん:2005/03/28(月) 10:13:31
バグだらけという表現は適切ではないか。とにかく挙動はおかしい。
822デフォルトの名無しさん:2005/03/28(月) 10:15:54
再インスコ
823デフォルトの名無しさん:2005/03/28(月) 10:19:30
自分の作ってたプログラムで、CreateWindow の hinstance を指定する部分で、NULL を
指定していたことに今日気付きました。けど、普通に動いていました。
もし、NULL にしていたままだとして、どんなバグが出ると予想できますか?
よろしければ、ご教授ください。
824デフォルトの名無しさん:2005/03/28(月) 10:39:41
hInstanceの部分は2000/XPでは無視されたはず。
9xで不具合が出るかも知れんけど具体的には知らん。
825デフォルトの名無しさん:2005/03/28(月) 10:49:11
なるほど、確かに自分は Windows2000 を使っております。
はじめて知りました。ありがとうございました!
826デフォルトの名無しさん:2005/03/28(月) 11:35:07
リッチエディットにC++のstd::stringに入っているRTFを読ませようとして
コールバック関数を組もうとしたんだけど、
具体的にどうしたらいいのかわからない(テキストの末尾に来たときの*pcbの処理とか、string.substr()とか)
んで、誰かわかる人いない?
827デフォルトの名無しさん:2005/03/28(月) 11:36:39
いる
828デフォルトの名無しさん:2005/03/28(月) 11:38:42
>>814
俺も。
Firefoxで見られない。
829デフォルトの名無しさん:2005/03/28(月) 17:29:57
bmpファイルの特定の範囲を読みこむ関数ってありますか?
LoadImageで読みこんだイメージの特定の範囲をコピーでもいいんですが
830デフォルトの名無しさん:2005/03/28(月) 18:21:17
複写の BitBlt(), 表示の SetDIBitsToDevice(), StretchBIBits() には
部分の指定が可能だが、読むときに一発てのはないんじゃない?
bitmap data のところを、ま、1行ずつ読んで、対象外のところは読み飛ばす
とか出来るが。
831デフォルトの名無しさん:2005/03/28(月) 18:28:25
>>829
ない。
832829:2005/03/28(月) 19:07:23
あいうえお
かきくけこ

↑こういうBMPファイルから「あ」とか「く」を取り出して表示したかったんですが
こういうのはどうやってるんですか?
833デフォルトの名無しさん:2005/03/28(月) 19:16:32
LoadImageしたHBITMAPをCompatibleDCにSelectDCして、
BitBltすれば解決とかそう言う話?
834デフォルトの名無しさん:2005/03/28(月) 19:21:20
>>832
メモリデバイスコンテキストはわかりますか?
835デフォルトの名無しさん:2005/03/28(月) 19:25:27
BMPファイルなんて単純な形式だから、
ファイルフォーマット調べて書き出せばいいんでない?
2時間もあれは出来ると思うけど。
836デフォルトの名無しさん:2005/03/28(月) 20:09:24
>>833をやった方がはやい
837デフォルトの名無しさん:2005/03/28(月) 21:14:27
質問です。DeleteObject(NULL)は安全ですか?
838デフォルトの名無しさん:2005/03/28(月) 21:26:11
>>837

ヘルプ見ると

戻り値
 関数が正常に終了した場合は、 TRUEを返します。
 指定されたハンドルが有効でない場合や現在デバイス コンテキストに選択されている場合は、 FALSEを返します。

とあるが、はて
839デフォルトの名無しさん:2005/03/28(月) 21:27:32
>>837
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_1vsk.asp

NULLについて書かれてないし、MFCのソース見てもNULLチェックしてるから
やらないほうが無難だと思う。
840デフォルトの名無しさん:2005/03/28(月) 21:30:17
GetFileSizeで4Gバイト以上のファイルサイズを取得したいのですが、
なぜか下位DWORDが1バイト多く返ってきます。
この場合、どこが問題なのか教えてください。
841840:2005/03/28(月) 21:40:24
なんか、WinXPProSP2でファイルのプロパティを見ても1バイト多いです……
842デフォルトの名無しさん:2005/03/28(月) 21:43:51
>834
CreateCompatibleDCでメモリに描画したりはなんとかできます

あい
かき

というBMPファイルを読みこんでBitBltで描画しようとすると
「き」だけ描画することはできるんですが


き  とか  「かき」 見たいになって 「あ、い、か」だけ描画することが出来ません;

BitBlt(コピー先のデバイス、コピー先で描画したい座標X、同上Y、コピー先の幅、コピー先の高さ、コピー元のデバイス、
       コピー元のx?、コピー元のy?、オプション)までは理解しているんですが?の部分がよくわかりません
x、yで点を指定してそこからコピー元の画像をコピーするみたいなんですが
これで「あ、い、か」は抽出できますか?
読みづらくてすみません;
843840:2005/03/28(月) 21:47:05
すみません、プログラム以前のイージーミスでした。忘れてください。
844デフォルトの名無しさん:2005/03/28(月) 21:48:42
何でわざわざコピー元座標引数を無視するんだよ。
845デフォルトの名無しさん:2005/03/28(月) 21:59:14
「あ」 の左上座標と縦横サイズがわかれば「あ」だけコピーできるでしょ
846デフォルトの名無しさん:2005/03/28(月) 22:00:33
コピー元の座標引数って上記のコピー元のx?、コピー元のy?
以外にあるんですか?
847デフォルトの名無しさん:2005/03/28(月) 22:04:02
複数回BitBltを実行するという発想がないような予感
848デフォルトの名無しさん:2005/03/28(月) 22:06:08
FAQでしょうが教えてください。

今までFreeBSDやCygwinでプログラムを作ってきたのですが
Windows NativeのGUIアプリケーションを作りたくなったので
(TkをインストールしてとかJavaをインストールしてとかは説明がめんどい)
Win32APIを入門しようかと思いました。

んで、
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
を読んでいるのですが
http://wisdom.sakura.ne.jp/system/winapi/win32/win2.html
の目的プログラムの作成でWin32 Applicationを選ぶとあるのですが
うちのVisualC++.Netにはありません。
Win32プロジェクトを選ぶといろいろ記述されたファイルが作成されてしまいます。

できるだけ素の状態からはじめたいのですがどのようにすればよいでしょうか ?

もっと言うとMeadowやxyzzyでソースを書いて、gccでコンパイルみたいな感じで
使いたいです。

ぐぐったのですがいい検索キーワードが思いつきません。
教えてください。
849デフォルトの名無しさん:2005/03/28(月) 22:08:30
>>848
Meadowやxyzzyでソースを書いて、clでコンパイルすれば解決。
850デフォルトの名無しさん:2005/03/28(月) 22:23:11
>>848
「空のプロジェクト」って選んでる?
851デフォルトの名無しさん:2005/03/28(月) 22:28:31
>>848
何がやりたいのかいまいちよくわかりませんが。
VisualC++6.0とVisualC++.Netでは最初の選択画面が少し違うからそのせいで戸惑っているのかな?と思います。

メニューの
[ファイル] -> [新規作成] -> [プロジェクト]を選択
作るプロジェクトを択するダイアログがでるのでその左側から
[VisualC++ プロジェクト]のフォルダを開くと
Win32コンソールプロジェクト
Win32プロジェクト
がでるのでWin32プロジェクト選んで後は適当に。

IDE使いたくないならnmake.exeってのがあるので適当にMakefile書いてガンガレ
852デフォルトの名無しさん:2005/03/28(月) 22:30:56
>847
あーそういう発想は無かったです;
だめだ私orz
853851:2005/03/28(月) 22:31:40
ああ、
>>851
でWin32プロジェクト 選んだ後さらにダイアログが出る。
その左側の[アプリケーションの設定]っての選ぶと初期設定みたいのが選べるので
[空のプロジェクト]とかにチェックつけるとIDE用のプロジェクトやらソリューションだけの状態で
ソースは一切無しの状態になるっぽ
854デフォルトの名無しさん:2005/03/28(月) 22:48:20
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
855848:2005/03/28(月) 22:55:06
みなさんありがとうございます。
空のプロジェクトを作ることが出来ました。

ですが、windows.hをインクルードするWinMainを使うサンプルが
コンパイルできません。


とりあえずIDE ? の作ってくれる雛型を土台にいろいろいじっていこうと思います。

重ね重ねありがとうございました。
856デフォルトの名無しさん:2005/03/28(月) 23:19:46
>>855
main()を使うようにコンパイルされてるんじゃない?
ならばコンパイラの設定や引数で指定してみれ。
857デフォルトの名無しさん:2005/03/29(火) 00:00:12
>>824
無視されないって言ってんべ。
858デフォルトの名無しさん:2005/03/29(火) 00:35:04
LoadIcon関数は将来サポートされなくなる可能性があるので
LoadImage関数を使うほうがいいと「猫」に書いてあったのですが本当ですか?
859デフォルトの名無しさん:2005/03/29(火) 00:38:31
>>858
MSDNを見ろ
860デフォルトの名無しさん:2005/03/29(火) 00:43:44
>>859
ゴメン
861デフォルトの名無しさん:2005/03/29(火) 02:03:44
ディスプレイが32bitカラーモードのときに
32bitアイコンに含まれる16色や256色のアイコンを選んで
描画する方法を知りませんか?
862デフォルトの名無しさん:2005/03/29(火) 02:17:59
知ってます
863デフォルトの名無しさん:2005/03/29(火) 02:22:27
>>861
僕はそのやり方を知らないけど、質問する時は念のために、
「もし知っているならそのやり方を教えてください」も追加した方がいい。
864861:2005/03/29(火) 02:40:48
>>863
いえ、私は皆さんが方法を知っているかどうかを知りたかったのです。
865861:2005/03/29(火) 03:04:47
864は偽者です。
>>863
忠告ありがとうございます。

866デフォルトの名無しさん:2005/03/29(火) 03:27:38
>>865
それで終わりかいっ!
実現方法は聞かないのかよw
867デフォルトの名無しさん:2005/03/29(火) 03:28:44
ごめん、wと!は逆の方がしっくりくるので脳内変換よろ
868861:2005/03/29(火) 03:57:21
>>866
いや揚げ足を取られやすい質問の仕方だっただけで
こちらの意図は伝わってると思ったので…

ちなみに32bitアイコンのリソースを直接読みこんで
つまりアイコンファイルのフォーマットを解析して
ビットマップ情報から表示みたいな方法ではなく
もっとスマートな描画方法があるのなら教えてほしいのです。
869デフォルトの名無しさん:2005/03/29(火) 04:05:33
870デフォルトの名無しさん:2005/03/29(火) 07:49:08
>>868
explorer のような tree view でファイルを表示するのを、自分もやっていて
最近知ったのですが、tree view に付ける ImageList の生成のときに 16x16 に
するか、32x32 にするか、指定できますね。32x32 にすると tree view の行の
高さは高くなります。color depth も指定できます。
普通は、4 bit color のを使うか、8 bit color のを使うかは、モニタの指定に
従い、判別されるようです。該当するものがないときは、近いものが選ばれたり、
他のものから生成されるようです(ぼやけた絵になりますが)。
HICON を作るときや DrawIconEx() でも、サイズは指定しますが、depth は書く
必要がないのは、OS に任せろと言っているのか、サイズとdepthは、略リンクして
いるので、それに従うということではないかと想像しています。
古い MSDN サンプルに aniEdit, imagedit というのがあり、これ以降、新しい
資料がなさそうなので、ご覧になるといいかと思います。
871デフォルトの名無しさん:2005/03/29(火) 13:33:15
DefaltGateway,DNSServerを取得できる関数ってないですか?
IPアドレスとサブネットマスク、MACアドレスなどは取得できる関数はあったのですが。
872デフォルトの名無しさん:2005/03/29(火) 14:43:31
Win32_NetworkAdapterConfigurationクラスにあったような・・・
873デフォルトの名無しさん:2005/03/29(火) 17:55:07
>>871
GetAdaptersInfo
874861:2005/03/29(火) 18:43:12
>>870
貴重なサンプルについて教えて頂いてありがとうございます。
仰る通り、何ビットのアイコンをロードするかはOSが判断しているようです。
MSDN で LookupIconIdFromDirectory の解説を見ると、
LoadIcon も LoadImage も現在の表示デバイスに合ったものを検索するとあります。

で、調べていて気がついたのですが、LoadImage のオプションで LR_VGACOLOR フラグを立てれば
16色に指定することだけはできるようです。でもその他の色数は指定できません。
結局、リソースから直接読み出す方法を試していたところ、以外と簡単にできてしまいました。
FindResource, LoadResource, LockResource, CreateIconFromResourceEx を使用する方法で
>>722 のリンク先に完全なサンプルがあります。
875デフォルトの名無しさん:2005/03/29(火) 22:31:38
DrawTextは、char型のポインタを指定しますが、
wchar_t(ワイド文字)に対応した文字列描画関数はありますか?

無いとしたら、ワイド文字をマルチバイト文字へ変換させてから描画しないといけないのでしょうか?

よろしくお願いいたします。
876デフォルトの名無しさん:2005/03/29(火) 22:37:40
>>875
MSDNより。

int DrawText(
HDC hDC, // handle to DC
LPCTSTR lpString, // text to draw
int nCount, // text length
LPRECT lpRect, // formatting dimensions
UINT uFormat // text-drawing options
);

LPCTSTR だが…?
877875:2005/03/29(火) 22:43:19
>>876

「error C2664: 'DrawTextA' : 2 番目の引数を 'wchar_t *' から 'LPCSTR' に変換できません。」
LPCSTRとなってしまいます。

ソースコードでは、
::DrawText(m_hDC,pString,length,pRect,uFormat);
とDrawTextと指定してるんですが。。。
DrawTextA?
878デフォルトの名無しさん:2005/03/29(火) 22:48:26
#define UNICODE もしくは #define _UNICODE
直接wchar_t版使いたいなら、DrawTextWを呼べ。
879デフォルトの名無しさん:2005/03/30(水) 01:55:03
すみませんお聞きしたいのですが
HBITMAPを開放するのでDeleteObjectを読んでたのですが
MSDNによると

戻り値
・指定したハンドルが有効でない場合、またはデバイスコンテキストでそのオブジェクトが選択されている場合は、0 が返ります。

解説
・デバイスコンテキストで選択されている描画オブジェクト(ペンまたはブラシ)は削除しないでください。

とありますが、SelectObjectで選択されていても0以外の値を返すのですがHBITMAPの場合問題無いのでしょうか?
880デフォルトの名無しさん:2005/03/30(水) 02:11:57
普通は使い終わったらSelectObjectで選択解除してからDeleteObjectする
おそらくWindowsプログラミングの常識じゃないか?
SelectObjectしたまんま開放なんてありえない。
881デフォルトの名無しさん:2005/03/30(水) 02:27:33
>>877

// winuser.h

int DrawTextA(HDC hDC, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

int DrawTextW(HDC hDC, LPCWSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif
882デフォルトの名無しさん:2005/03/30(水) 05:29:10
DDBビットマップの、透過表示に使う、マスク画像の作り方についての質問です。
今は、GetPixelで色を調べながら、SetPixelで描画みたいにしているのですが、
BitBltのラスタオペレーションの組み合わせで、うまい事出来ないでしょうか。
出来るなら、やり方を教えてください。
883デフォルトの名無しさん:2005/03/30(水) 09:09:58
プロセス間で、共有メモリを使ってBSTR型の文字列をやり取りする方法ないでしょうか?
文字列のサイズを気にせずにプロセス間で受け渡ししたいのですが・・・
やり方まで教えていただけると嬉しいです
884デフォルトの名無しさん:2005/03/30(水) 11:42:25
>>883
「やり取り」というものの詳細がいまひとつわからんが
メモリマップトファイルとかは調べた?
885デフォルトの名無しさん:2005/03/30(水) 12:02:57
886デフォルトの名無しさん:2005/03/30(水) 12:48:21
>>883
ウィンドウ間ならWM_COPYDATAで楽に出来る。
887デフォルトの名無しさん:2005/03/30(水) 13:01:06
>>883
ひょっとしたらWM_SETTEXTだけでOKだったりして
888デフォルトの名無しさん:2005/03/30(水) 13:06:51
888 そう鴨
889882:2005/03/30(水) 13:55:39
>>885
出来ました。ありがとうございました。
890883:2005/03/30(水) 14:31:56
>>884
すみません。
もうちょっと詳しく状況書かないといけませんでしたね。。
「やり取り」というのは、共有メモリを使って他プロセスにBSTR型の文字列を渡したり受け取ったりしたい、という意味です。
今まで、CreateFileMappingとMapViewOfFile使ってchar*で文字列の受け渡ししてました。
これをBSTRでやりたい・・という魂胆です
とりあえず、BSTRのポインタだけ渡すのは明らかにダメだったので、実体全部を・・などと考えているんですが・・
ここでのプロセスで動かしてるのは両方コンソールアプリ型のWin32サービスです。

いい方法ないでしょうか。。

>>886
>>887
即レスありがとうございます。説明不足でした。
コンソール型のWin32サービスなので、ウィンドウメッセージは×なのです。
すみません。
891デフォルトの名無しさん:2005/03/30(水) 14:39:07
BSTRサーバーでも作れば?
892デフォルトの名無しさん:2005/03/30(水) 15:11:08
>>890
えーと、FileMappingではいけない理由は?
893デフォルトの名無しさん:2005/03/30(水) 15:13:25
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
static char* moji;
// TODO: この位置にコードを記述してください。
for(int i=0; i<10; i++)
{
wsprintf(moji,"ループ%d回目です。",i+1);
MessageBox(NULL,mojip,"ループ",MB_OK);
}

return 0;
}

wsprintfを使用してループ回数を毎度表示するプログラムを組みたいのですが、コンパイルは通るもののこれを実行するとエラーで終了させられてしまいます。
char配列にすれば問題なく作動するのですがstatic char*で動かすにはどうすればよいのでしょうか。
894893:2005/03/30(水) 15:14:55
書き忘れました、static char*にかぎらずchar*のように配列ではなくポインタを使用したいのです。
よろしくおねがいします。
895デフォルトの名無しさん:2005/03/30(水) 15:15:14
>>893
メモリを確保しろ

というか、Cの基礎をやり直して来い
896デフォルトの名無しさん:2005/03/30(水) 15:16:17
×:MessageBox(NULL,mojip,"ループ",MB_OK);
○:MessageBox(NULL,moji,"ループ",MB_OK);
です。何度もスミマセン。
897デフォルトの名無しさん:2005/03/30(水) 16:16:51
>>893
たぶん君の頭だとVB使ったほうがいいよ。
898デフォルトの名無しさん:2005/03/30(水) 16:23:19
>>894
ポインタがなにも指してないからダメですよ

static char* moji = "ほげほげ";

とかやるとか、ちゃんと実体のあるものを指すようにしましょう
899デフォルトの名無しさん:2005/03/30(水) 16:28:51
>>898
説明できないなら出てくるなよ
900デフォルトの名無しさん:2005/03/30(水) 16:31:47
ポインタとか話すのは素人、値とか参照、名前といえれば高級言語の
エキスパートといえる
901デフォルトの名無しさん:2005/03/30(水) 16:34:34
LPSTRやらHANDLEやら、Win32で定義されてるのは沢山あると思うんですが、
それの内容一覧とかありませんか?
902デフォルトの名無しさん:2005/03/30(水) 16:35:47
>>901
PlatformSDKのヘッダーファイル
903デフォルトの名無しさん:2005/03/30(水) 16:38:34
>>902
どうもありがとうございました。。
904デフォルトの名無しさん:2005/03/30(水) 16:40:51
>>902
すいません、PlatformSDKのヘッダーファイルってwinbase.hとかですか?
905デフォルトの名無しさん:2005/03/30(水) 16:42:10
>>904
正解
906デフォルトの名無しさん:2005/03/30(水) 16:43:10
907デフォルトの名無しさん:2005/03/30(水) 16:50:45
>>893
char* moji;

moji = (char*)malloc(256);
:
wsprintf(moji,"ループ%d回目です。",i+1);
MessageBox(NULL, moji ,"ループ",MB_OK);
:
free(moji);

908890:2005/03/30(水) 17:04:26
883です。
>>891
BSTRサーバ!!
なるほど。確かにこれなら・・。
こういう選択肢もあるんですね!
共有メモリに固執するあまり、考えてもいませんでした。
選択肢の1つとして、検討してみます。
ありがとうございます!

>>892
すみません、FileMappingにこだわる理由、書いてませんでしたね。。
依頼主からの要望なんです。
「なんとか共有メモリ使ってBSTRを渡すようにできないか」、と。

できない理由はいろいろ試してみていくつか挙がってきてるのですが、
それを解決する方法がどこかにあるんじゃないか・・と。
909デフォルトの名無しさん:2005/03/30(水) 17:08:54
すみません質問させてください。
シフトを5回連続で押した際に発生する固定キー機能の
ダイアログを出ないようにしたいために以下のようなコードを書いたのですが
動作時に、「無効になったはずです。」のメッセージは出せるのですが
その後にシフトを5回連続で押すと、やっぱりダイアログがでてしまいます。
これで良さそうな気がするのですが、何か見落としでもあるのでしょうか?
何かありましたら、宜しくお願いします。
910909:2005/03/30(水) 17:11:42
STICKYKEYS StickKeys;

//STICKKEYS 構造体の初期化
StickKeys.cbSize= sizeof(STICKYKEYS);
StickKeys.dwFlags= 0;

//固定キー機能の値を取得するユーザプロファイル更新のために SPIF_UPDATEINIFILE を指定
if(SystemParametersInfo(SPI_GETSTICKYKEYS,sizeof(STICKYKEYS),&StickKeys,SPIF_UPDATEINIFILE) != 0)
{ }
else{ /*失敗*/ return FALSE;}

//現在5回シフトで、固定キーダイアログ発生が有効
if(StickKeys.dwFlags & SKF_HOTKEYACTIVE)
{  MessageBox(NULL,"なので、でないようにしたいです。","",MB_OK);
  StickKeys.dwFlags &= !SKF_HOTKEYACTIVE;

if(StickKeys.dwFlags & SKF_HOTKEYACTIVE)
{}
else
{ MessageBox(NULL,"5回シフト押下でダイアログがでないようになったはず。","",MB_OK);}
}
911デフォルトの名無しさん:2005/03/30(水) 17:19:04
ネタか?
912909:2005/03/30(水) 17:22:03
>>911
すみません本気で書いてるつもりっす…。
何故そんなこと言われるのかも解らん状態です。><
913デフォルトの名無しさん:2005/03/30(水) 17:24:47
>>912
911のような奴を相手にしないこと
この板にふさわしくないバカはほっとけ
914デフォルトの名無しさん:2005/03/30(水) 17:30:54
つうか、ネタだろ、longhornのネタかw
915デフォルトの名無しさん:2005/03/30(水) 17:31:44
SPI_SET*の存在についてよく考えて見ろ。
916デフォルトの名無しさん:2005/03/30(水) 17:49:35
つーか、BSTRならCOMだろ。OutProcなCOMなら、マーシャリングは
共有メモリなんでねーのか。
917909:2005/03/30(水) 18:30:16
>>915
うおーーーーーーーーーーーーー!!俺馬鹿だ(爆
有難うございます。

なんで皆がネタかと言ってたか解りました。
お騒がせしてすみませんでした。

918デフォルトの名無しさん:2005/03/30(水) 18:45:37
>>906
ありがとうございます!まさにそれです!
919デフォルトの名無しさん:2005/03/30(水) 20:31:03
>>908
char型に変換して渡す。
受け側でBSTRに戻す。
920デフォルトの名無しさん:2005/03/30(水) 20:33:31
>>919
charにしなくてもwchar_tで渡せばいいじゃん。
921デフォルトの名無しさん:2005/03/30(水) 20:55:06
こんばんわ

char mb[]="@niftyでインターネット Version 5.00について";
wchar_t wc[100000];


mbstowcs(wc,mb,100000);
を使いワイド文字に変換したのですが、
次のように文字化けがおきます。
何に問題があるのでしょうか?

"@nifty?A?C???^?[?l?b?g Version 5.00?E?A?¢?A";
922デフォルトの名無しさん:2005/03/30(水) 21:03:19
>>921
変換してどこに出力したんだ。
923デフォルトの名無しさん:2005/03/30(水) 21:04:28
cのライブラリ関数の質問はスレ違い。たぶんlocale関連の問題。

mbstowcsに拘らずにマルチバイト文字列からワイド文字列への変換がしたいだけなら、
Win32API のMultiByteToWideCharでちゃんとコードページを指定してやればOK。
924デフォルトの名無しさん:2005/03/30(水) 21:06:43
setlocale
925デフォルトの名無しさん:2005/03/30(水) 21:41:53
>>898
文字列リテラルは書き換え出来ない(C/C++の規格では)
926デフォルトの名無しさん:2005/03/30(水) 23:18:27
マスクされたビットマップ画像を扱いたいのですが、
猫でも〜のMaskBltだと95/98じゃ動作しないようなので
95/98でも使えるマスク画像はできないか
(特定の色を透過色として透かす方法などがあれば)
教えてください。お願いします。
927デフォルトの名無しさん:2005/03/30(水) 23:41:37
928デフォルトの名無しさん:2005/03/31(木) 00:01:07
GDI+使う手もあるけどね。
あれは95じゃ駄目か?
929デフォルトの名無しさん:2005/03/31(木) 00:15:57
DirectDraw使う手もあるナ
930デフォルトの名無しさん:2005/03/31(木) 01:07:18
OS再起動時にあるファイルの削除をしたいのですが、
何のAPIを使えば良いですか?
931デフォルトの名無しさん:2005/03/31(木) 01:23:01
>>930
MoveFileEx
932デフォルトの名無しさん:2005/03/31(木) 01:55:57
>>926
新しいの買いなよPC
貧乏なの?
933デフォルトの名無しさん:2005/03/31(木) 01:56:58
>>932
だから、バカはこのスレに来るなよ
934デフォルトの名無しさん:2005/03/31(木) 01:59:57
WinAPIで発生するエラーの処理はどの程度行えばよいのでしょうか。
ほとんどの関数が何らかの形で(NULLであったり定数であったり)
エラーを返すと思うのですが、やはり全てを考慮すべきなのでしょうか。
それとも、他の方のソースとの比較や経験則から、
エラーがほとんど発生しないような部分は割り切ってしまったほうが
いいですか?

自分は学生です。
仕事などで使うような重要なプログラムを作っているわけではありません。
頻繁に使用する部分を、自分なりに使いやすいようにまとめている最中です。
935デフォルトの名無しさん:2005/03/31(木) 02:06:47
ListViewで アイコン一覧とコメント(名称) のリストを作成したく

LV_ITEM item;
item.mask= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;


という感じでリストビューを表示したのはよいのですが、
項目が増えると、右にスクロール(水平スクロールバーが表示される)してしまいます。

下に項目が増えていく(垂直スクロールバーのみが表示される)ように設定するには
どうすればよいのでしょうか。教えてください

936デフォルトの名無しさん:2005/03/31(木) 02:12:02
>>933
だから、バカはこのスレに来るなよ
937デフォルトの名無しさん:2005/03/31(木) 02:15:23
また厨房か
バカとか使うからすぐ分かるよな
明日から学校いけ
938504:2005/03/31(木) 05:29:55
超亀レス失礼します。

>>530
それは尤もなのですが・・・・・

>>534
コンソールを操作するAPIがちゃんとあるんですね。
貴重なアドバイスをどうもありがとう御座いましたm(_ _)m

>>537
Linuxのlessのソースを見たらコンソールを操作する関数があったのですが、
include ファイルも環境依存のものだったので、結局あまり参考になりませんでしたorz
939デフォルトの名無しさん:2005/03/31(木) 05:31:24
UNIXのソースなんか読んでも参考にならんよ
940デフォルトの名無しさん:2005/03/31(木) 08:13:14
>>934
さー?人それぞれケースバイケースだけど。
エラーは一応全部orほとんどハンドリングしておいて、大した
エラー時処理は入れないぐらいでいいんじゃない?
メッセージボックス出すとか。
デバッグに役立てる意味で。
941デフォルトの名無しさん:2005/03/31(木) 08:34:49
横レスですが、>>908 のBSTRサーバって何ぞや?
ぐぐったけどわからなかった。誰か教えてん。
942908:2005/03/31(木) 08:55:45
>>919
>>920
ありがとうございます。
やっぱり、FileMappingではそれしかなさそうですね。
BSTRをWCHARとDWORDに分解して、受け側で再構築させてみます。
まぁ、BSTRで渡す意味あるのってツッこまれたら、それまで、ですが。。

>>941
BSTRを受け渡しするだけのCOMサーバのことと理解してます。(誤解だったりして)
この場合、アウトプロセスになるのかな・・
この辺、自分もそんなに詳しくないので。。
これなら出来そうだ・・っていうイメージぐらいしか分かりませんが^^;;
943デフォルトの名無しさん:2005/03/31(木) 09:15:50
BUTTON のフォントサイズはどうやって変更するんですか?
944デフォルトの名無しさん:2005/03/31(木) 10:58:03
>>942
DLLに共有セクションを持たせることもできるな
945942:2005/03/31(木) 13:05:25
>>916
遅レスすみません。
ごもっともです。
確かに、アウトプロセスCOMなら、
共有メモリ使ってるのと似たような使い方考えられますね。
BSTR型とCOMを切り離して考えてたところが急所でした。。

>>944
なるほど!
COMまでいかなくても、DLLの共有セクションって手段もあるんですね。
共有メモリからDLL、COMという発想がでてきませんでした。

FileMappingでは限界と感じてるので、
DLLかCOMではどうか・・と、そっちの方向に振ってみる事にします。
アドバイスくれたみなさん、有難うございました!
946934:2005/03/31(木) 13:15:25
>>940
そうですね。
どうしても読みにくくなる部分以外は
とりあえずメッセージボックス入れるようにしていきます。
こだわりすぎで読みにくくなったりしたら元の木阿弥ですしね。
丁寧な回答ありがとうございました。
947デフォルトの名無しさん:2005/03/31(木) 16:13:52
>>938
じゃあ、PDCursesはどう?
http://pdcurses.sourceforge.net/
948デフォルトの名無しさん:2005/03/31(木) 20:47:34
DeleteDC( hmemdc )
DeleteObject( hobj )
とかって、オブジェクトを削除する前に、(メモリ)デバイスコンテキスト
から削除(解放)する必要があると学びました。
その手順を教えているサイトはあるのですが、それはなぜか説明されている
ところを見つけることが出来ません。 ご存知のかたいらっしゃいますか?
949デフォルトの名無しさん:2005/03/31(木) 20:52:49 BE:88200847-###
CClientDCを使うんだ!
950デフォルトの名無しさん:2005/03/31(木) 21:05:02
>>948
探せばすぐ見つかると思うが。
基本は、
hNew = CreateXXXX();
hOld = SelectObject(hdc,hNew);
/* ここで描画 */
SelectObject(hdc,hOld);
DeleteObject(hNew);
951デフォルトの名無しさん:2005/03/31(木) 21:07:28
ずれたこというな
952926:2005/03/31(木) 21:44:32
>927
既出スマソ。サンクス
953デフォルトの名無しさん:2005/03/31(木) 22:45:22
>>948
SelectObjectしたものをきちんと戻してあるなら破棄する順番に関係はない。
ただ、作成した順・逆順で破棄するなど規則性があった方がわかりやすい。
954デフォルトの名無しさん:2005/03/31(木) 23:33:04
メッセージループのデッドタイムを使って処理をしてるとき、
ウィンドウのキャプションバーをマウスで押下してると処理が止まるから
てっきり何かメッセージが連続で発生してるもんだと思ったら、
DispatchMessage()でループが止まってた…。
なのにWM_TIMERとかWM_MOVEとかでプロシジャはしっかり呼ばれてる。
なんで???わけわかんねーorz
955デフォルトの名無しさん:2005/03/31(木) 23:42:28
>>954
そういう一部のメッセージはメッセージループを通らず直接ウィンドウプロシージャへ送られる。

ちなみに自分からそういう風にメッセージを送りたければSendMessage()を使う。
PostMessage()だとメッセージループ経由になる。
956デフォルトの名無しさん:2005/03/31(木) 23:43:51
難しい話してるなぁ…僕はいつになったらこの人達みたいになれるんだろう
957デフォルトの名無しさん:2005/03/31(木) 23:45:06
>>956
めっちゃ簡単ですやん。
やればできる子ですやん。
958デフォルトの名無しさん:2005/03/31(木) 23:53:49
>>955
おお!そうかそういうことなのか…。
返答thxです。

いや、何か連続でメッセージが送られてるなら
そのメッセージ取得中は別に自前の処理関数呼べばいいかな
と思ってたんだけどそれだとどうやら無理っぽいっすね…。

なんとか処理止めずにいけないものでしょうか…(´・ω・`)
959デフォルトの名無しさん:2005/03/31(木) 23:57:20
デッドタイム使うのやめてスレッド作ったらどう?
960958:2005/04/01(金) 00:06:01
時代はやはりマルチスレッドなのか…。
いまだに抵抗あるんですけど挑戦してみます!(`・ω・´) ノ
961デフォルトの名無しさん:皇紀2665/04/01(金) 01:52:14
質問です。
実行されているアプリの実行時のカレントディレクトリ(作業ディレクトリ)を知るには
どうすればいいでしょうか? 例えば

C:\program files\program\program.exe を D:\Work から実行した、または、

C:\program files\program\program.exe のショートカットを D:\Work作成して実行した

といったケースで、実行中のprgram.exeを特定し、そこから D:\Work を導き出すことは
出来ないでしょうか?

なお、GUIアプリを対象にするつもりなのでWindowハンドルを元にプログラムを特定する
つもりです。
962デフォルトの名無しさん:皇紀2665/04/01(金) 01:53:24
>>955
DefWindowProc内でメッセージループが回ってんじゃね?
MessageBoxみたいに。
963デフォルトの名無しさん:皇紀2665/04/01(金) 01:54:16
Longhornの発売がまた延期(2008年初頭)になるそうで。
これぞMicrosoftクオリティ。
964961:皇紀2665/04/01(金) 02:21:53
Processを特定できればSTARTUPINFOという型の情報を持っていてそれで判るみたいですね。
もう少し調べてみます。自己完結失礼。
965デフォルトの名無しさん:皇紀2665/04/01(金) 07:09:29
実行ファイルはGetModuleFileName使って、
作業ディレクトリGetCurrentDirectory使えば。
966デフォルトの名無しさん:皇紀2665/04/01(金) 11:36:06
Advanced WindowsのLastMsgBoxInfoサンプルを参考にして、ExitProcessをフックするプログラムを書いてみたんですが、
フックできるexeと出来ないexeがあります。

画像ビューアのirfanviewと、Windows2000/XPのCMD.exeはフック出来ませんでした。
あと、explorer.exeのCreateProcessもフックできませんでした。
どうしてなんでしょうか。
(フックできているかどうかは、OutputDebugStringで確認しています)

環境は、Windows2000 VC++6です。
967デフォルトの名無しさん:皇紀2665/04/01(金) 11:55:48
WHND m_whandle;
m_whandle = GetActiveWindow();
if(m_whandle==NULL)
AfxMessageBox("NULLっぽい",MB_ICONSTOP);

ってな感じで、アクティブなウィンドウのハンドルを取得しようとしてるんですが、そのプログラム(自分)以外のウィンドウをアクティブにするとNULLが返ってきます。
どなたかお助け願います。
968デフォルトの名無しさん:皇紀2665/04/01(金) 12:05:38
>>967
GetForegroundWindow
969デフォルトの名無しさん:皇紀2665/04/01(金) 12:42:55
>>968
GetActiveWindowをGetForegroundWindowに変えたところ、ダイアログが出なくなったのでうまく行くかと思ったのですが、GetWindowTextで確認するとやはり何も変わっていないようです。

char buf[100];
WHND m_whandle;
m_whandle = GetForegroundWindow();
if(m_whandle!=NULL){
GetWindowText(m_whandle, buf, 1000);
MessageBox(NULL, buf, "DoGetForegroundWindow", MB_ICONSTOP);
}
970デフォルトの名無しさん:皇紀2665/04/01(金) 12:51:22
突っ込んで良いのか・・・・?
>>char buf[100];
>>GetWindowText(m_whandle, buf, 1000);
971デフォルトの名無しさん:皇紀2665/04/01(金) 12:56:22
あと、WHNDってのも無い。
972デフォルトの名無しさん:皇紀2665/04/01(金) 12:59:24
その場で書き足したんでミスってました、すまんす。
ソースは1000とHWNDになってます。
973デフォルトの名無しさん:皇紀2665/04/01(金) 13:03:39
GetWindowText
指定されたウィンドウのタイトルバーのテキストをバッファへコピーします。指定されたウィンドウがコントロールの場合は、コントロールのテキストをコピーします。ただし、他のアプリケーションのコントロールのテキストを取得することはできません。

に気づいてしまいました。

他のアプリケーションは取得も無理ですか?具体的にはアクティブなウィンドウに張り付きたいのです。
974デフォルトの名無しさん:皇紀2665/04/01(金) 13:10:57
>>973
GetForegroundWindowがコントロールを返すことは多分滅多にないんじゃないかな。
975デフォルトの名無しさん:皇紀2665/04/01(金) 13:14:46
ホントだ・・・ダメダメじゃん、自分・・・orz
976デフォルトの名無しさん:皇紀2665/04/01(金) 13:55:52
>>966>>967は同じ人の質問?
977966:皇紀2665/04/01(金) 14:31:42
別人です。

APIフックで悩んでおります。
978デフォルトの名無しさん:皇紀2665/04/01(金) 14:41:20
次スレまだー?
979デフォルトの名無しさん:皇紀2665/04/01(金) 16:55:19
Net meeting SDKに関する質問は
ココでいいですか?
980デフォルトの名無しさん:皇紀2665/04/01(金) 17:59:53
新スレ。

Win32API質問箱 Build30
http://pc8.2ch.net/test/read.cgi/tech/1112345886/
981デフォルトの名無しさん:皇紀2665/04/01(金) 18:25:26
>>966
たぶんそのサンプルはIATしか変更してないからだね。
いくらロードされたモジュール毎にIATを変更して回っても、
直接ExitProcAddressに飛んでる場合には対応できない。
プロセスにロードされたExitProcAddress関数のコードそのものを
書き換えるのが確実。
タイミングが悪いと書き換え中に呼ばれたりするから
SuspendThreadかなんかで停止中に書き換える。

例えば、ExitProcAddressの頭を
jmp MyHook
みたいなコードに書き換えて、用が済んだら書き換えた箇所を元に戻して、
jmp ExitProcAddress
する。
982デフォルトの名無しさん:皇紀2665/04/01(金) 18:27:08
ExitProcAddressじゃなくてExitProcessだね。
983デフォルトの名無しさん:皇紀2665/04/01(金) 19:20:44
>>973
WM_GETTEXT
984デフォルトの名無しさん:皇紀2665/04/01(金) 19:39:44
GetWindowTextは他のアプリからでも取得できたんじゃなかったっけ。
Win3.1とかからの互換性のためとかいって、
対象ウインドウのメッセージループが回ってなくても大丈夫だとか
聞いたことがあったけど。
985デフォルトの名無しさん:皇紀2665/04/01(金) 19:41:07
>>984
その辺の話はAdvancedWindowsに載ってるね。
WM_COPYDATA関連の章で。
986デフォルトの名無しさん:int 2ch =05/04/01(金) 20:05:38
>>984
WM_GETTEXTを素で送るとWindowsがよろしくやってくれるんだが
GetWindowTextを使うとはねられる。
987デフォルトの名無しさん:int 2ch =05/04/01(金) 20:43:44
SendMessageとはやり方が違うのかもね>GetWindowText
988デフォルトの名無しさん:int 2ch =05/04/01(金) 20:53:31
ttp://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getwindowtext.asp

いや、わざわざチェックかましてるだけっぽ。
989デフォルトの名無しさん:int 2ch =05/04/01(金) 21:13:46
ReadFileは一文字ずつ読み込めるのでしょうか?
カンマで区切られたtxtデータを読み込んで
カンマまできたら、そこまでの文字を読み込みたいのですが、
どうすればいいでしょうか?
990デフォルトの名無しさん:int 2ch =05/04/01(金) 21:23:42
>>989
先ず日本語を勉強しろ。

>カンマで区切られたtxtデータを読み込んで
>カンマまできたら、そこまでの文字を読み込みたいのですが
読み込んだ後に読み込みたいって矛盾してるように読めるぞ。
991966:int 2ch =05/04/01(金) 21:38:11
>>981
なるほど。
回答ありがとうございました。
その方法でやってみます。
992デフォルトの名無しさん:int 2ch =05/04/01(金) 21:41:51
>>989
効率は悪いだろうけどSetFilePointerと組み合わせれば出来るかもね。
993デフォルトの名無しさん:int 2ch =05/04/01(金) 21:47:20
>>989
ファイルサイズがそこまで大きくなければ、メモリ上に一度全て
読み込んでしまえ。無駄に感じる気持ちは解る。はじめの頃は。
994デフォルトの名無しさん:int 2ch =05/04/01(金) 21:52:59
つーか、そういうときぐらい素直にC/C++の標準ライブラリとか使ってやれよ。
995989:int 2ch =05/04/01(金) 21:59:49
スマソ。正直学力が足りなかった
996デフォルトの名無しさん:int 2ch =05/04/01(金) 22:10:55
↓スレスト
997:int 2ch =05/04/01(金) 22:16:25
 
998デフォルトの名無しさん:int 2ch =05/04/01(金) 22:18:55 BE:12600522-###
999でスレスト

999デフォルトの名無しさん:int 2ch =05/04/01(金) 22:20:52
ならぬツイスト _/ ̄
1000デフォルトの名無しさん:int 2ch =05/04/01(金) 22:20:58
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。