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


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

Win32API質問箱 Build43
1 名前:デフォルトの名無しさん :2006/05/19(金) 11:25:09
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

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

2 名前:デフォルトの名無しさん :2006/05/19(金) 11:25:43
-過去スレ
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/

3 名前:デフォルトの名無しさん :2006/05/19(金) 11:28:00
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html

4 名前:デフォルトの名無しさん :2006/05/19(金) 11:30:01
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

- Windows® Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

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

-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech


5 名前:デフォルトの名無しさん :2006/05/19(金) 11:32:19
【HSP】HSPで3Dゲーム【3D】
http://pc8.2ch.net/test/read.cgi/gamedev/1016699230/
HSPでRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1082902759/
HSPで出来る範囲について
http://pc8.2ch.net/test/read.cgi/gamedev/1085733089/
HSP - Hot Soup Processor [11]
http://pc8.2ch.net/test/read.cgi/gamedev/1133488968/
HSPでの麻雀プログラムについて
http://pc8.2ch.net/test/read.cgi/gamedev/1047707655/
HSPは・・・
http://pc8.2ch.net/test/read.cgi/gamedev/1104208959/
おまいらHSPで適当なゲームでもつくりませんか
http://pc8.2ch.net/test/read.cgi/gamedev/1102214621/
★ゲーム製作期待の星! HSP Part 9 ★
http://pc8.2ch.net/test/read.cgi/gamedev/1005313791/
HSPで完全オリのSLGを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1047478458/
HSPでSLGが作れるようになるまで頑張るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1103618349/
HSPでモンスター育成SLGを作りましょう!
http://pc8.2ch.net/test/read.cgi/gamedev/1089467139/
ネットゲームforHSP『無人島』制作スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1018534410/
PGの面接で、使える言語はHSPですって言ったら
http://pc8.2ch.net/test/read.cgi/gamedev/1046921466/
HSPでシミュレーションRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1036923414/


6 名前:デフォルトの名無しさん :2006/05/19(金) 13:56:51
>>1


7 名前:デフォルトの名無しさん :2006/05/19(金) 15:14:31
乙女

8 名前:デフォルトの名無しさん :2006/05/19(金) 16:25:32
乙女座

9 名前:デフォルトの名無しさん :2006/05/19(金) 16:31:35
乙女座の聖闘士

10 名前:デフォルトの名無しさん :2006/05/19(金) 16:43:27
乙女座の聖闘士のシャツ

11 名前:デフォルトの名無しさん :2006/05/19(金) 17:03:23
乙女座の聖闘士のシャツを着てるピザ

12 名前:デフォルトの名無しさん :2006/05/19(金) 17:19:14
乙女座の聖闘士のシャツを着てるピザ食い乙女

13 名前:デフォルトの名無しさん :2006/05/19(金) 17:30:41
乙女座の聖闘士のシャツを着てるピザ食い乙女座の聖闘士

14 名前:デフォルトの名無しさん :2006/05/19(金) 17:36:30
>>13
ほんものならシャツいらんやんヾ(^^ヘ)

15 名前:デフォルトの名無しさん :2006/05/19(金) 17:57:48
そんなことより「ピザ食い乙女座」ってなに?

16 名前:デフォルトの名無しさん :2006/05/19(金) 18:02:05
なぜHSPだけ丁寧にリンク集が。

17 名前:デフォルトの名無しさん :2006/05/19(金) 19:20:32
つまり乙女座の聖闘士は、自画像シャツ着たキモオタデブ

18 名前:デフォルトの名無しさん :2006/05/19(金) 21:11:50
前すれ埋めようじゃないか

19 名前:sage :2006/05/20(土) 02:43:23
ディスプレイの電源ON/OFFをWindowsプログラミングで行いたいのですが
参考になるサイト(もしくは書籍?)などありませんでしょうか。

ACPIというものを使うようですが探してもプログラミングについて
サンプルとか情報みつまりませんでしたorz

#WinAPIでは無いきもします・・・スレ違いでしたらゴメンナサイ

20 名前:デフォルトの名無しさん :2006/05/20(土) 02:44:37
sage間違えゴメンナサイorz

21 名前:デフォルトの名無しさん :2006/05/20(土) 02:59:16
>>19
こんなのがあったけど。
Turn on/off monitor
http://www.codeproject.com/system/display_states.asp

22 名前:デフォルトの名無しさん :2006/05/20(土) 03:04:19
前スレで反応がなかったのでとりあえずこちらでも・・・

BUTTONウィンドウの背景色を
灰色じゃない色(例えば、赤)に変えるにはどうしたらいいのでしょうか?

23 名前:デフォルトの名無しさん :2006/05/20(土) 03:25:17
ウィンドウズのアップデートをした時に、裏で処理やってるから待ってなくていいよ的な
吹き出しみたいなメッセージが、タスクバーのアイコンから出るのがありますが
あれを出す関数は何か教えてください。お願いします。

24 名前:デフォルトの名無しさん :2006/05/20(土) 04:31:46
デスクトップが持つイメージを列挙しようと思ったのですが、イメージリストを取得しても
イメージ保持数が0になっていて上手く取得できていないようです。

HWND hSysWnd;
hSysWnd = ::FindWindowEx( NULL, 0, "Progman", "Program Manager" );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SHELLDLL_DefView", NULL );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SysListView32", NULL );

HIMAGELIST hImgList = ListView_GetImageList( hSysWnd, LVSIL_NORMAL );
int nImg = ImageList_GetImageCount( hImgList );

for( int i=0 ; i<nImg ; i++ )
{
ImageList_Draw( hImgList, i, hdc, 0, i*48, ILD_NORMAL );
}

hImgListにNULLは返ってきてないのでエラーではないみたいなのですが、何が原因なのでしょうか。


25 名前:デフォルトの名無しさん :2006/05/20(土) 05:58:50
既存のEXEファイルにリソースを追加するプログラムを作っています。

コードを書き始めて、単に新規のデータをどこかに挿入したり、最後尾にくっつけたりするだけでは全く実現できないことに気付きました。
複雑な参照関係にあるデータが、インデックス番号ではなくオフセットアドレスを使って参照し合っているからです。
どこかにデータを挿入した場合は、すべてのオフセットアドレスを再構成しなければなりません。

そこで、リソースデータを、追加部分を含めた形で、新たに一から書き出す、という事を考えたのですが、これがかなり大変そうです。
ファイルポインタを激しく動かさなければならないのです。
ツリー部から、ID文字列領域から、リソース本体領域へと激しくジャンプしなければなりません。
その際にまだ書き込んでいないデータのサイズを正確に予測してきちんとファイルポインタ位置を決定しなければなりません。これはかなり複雑な状況ではないか、と思いました。

そこでちょっと考えてみました。

オフセットデータだけが問題であるならば、

ツリー部分にストアされているすべてのオフセットデータ値に対し、

1. データ挿入がなされる位置より前であるなら変更しない
2. データ挿入がなされる位置より後ろなら変更する

という方法でごく簡単にリソースデータを再構築できるのではないか、と。

挿入すべきデータはツリーの構成員の構造体だけで、ID文字列やリソース本体は最後尾にくっつけるだけでよさそうです。

こういう方法でやった人は誰かいるでしょうか? そしてうまくいったでしょうか?


26 名前:デフォルトの名無しさん :2006/05/20(土) 08:58:27
>>25
>ファイルポインタを激しく動かさなければならないのです。
一旦メモリ上にファイルの最終イメージを完成させてからファイルに書くか、
CreateFileMapping()使えば?


27 名前:デフォルトの名無しさん :2006/05/20(土) 09:47:56
>>22 ばっくぐらうんど

28 名前:デフォルトの名無しさん :2006/05/20(土) 13:12:01
子ウィンドウの数を求める関数があったような気がするのですが思い出せません。
EnumChildWindowsで調べるものをつくってもいいのですが、
思い出せないものが本当にあったのかどうかわからないので教えてもらえないでしょうか?

29 名前:デフォルトの名無しさん :2006/05/20(土) 13:25:18
ないです

30 名前:19 :2006/05/20(土) 13:33:35
>>21
ありがとうございます。
トップレベルウィンドウにメッセージを送るだけで消せるんですね。

31 名前:デフォルトの名無しさん :2006/05/20(土) 13:47:22
>>29
なかったですか。
つまり自分の勘違だったんですね。

32 名前:デフォルトの名無しさん :2006/05/20(土) 16:19:51
CreateWindowのウィンドウのサイズ指定は
枠やキャプションも含めたサイズですか??

33 名前:32 :2006/05/20(土) 16:22:14

キャプションや枠のサイズはどうすれば取得できますか?

34 名前:デフォルトの名無しさん :2006/05/20(土) 16:48:18
GET SYSTEMMETRICS


35 名前:デフォルトの名無しさん :2006/05/20(土) 17:54:01
ここは「Win32API質問箱」なのですが、C/C++前提だったりしますか。
Dとかでも質問可だったりしますか。

36 名前:デフォルトの名無しさん :2006/05/20(土) 18:03:54
どうぞ

37 名前:デフォルトの名無しさん :2006/05/20(土) 18:26:25
BeginUpdateResource
UpdateResource
EndUpdateResource
あたりは?NT系だけだが

38 名前:デフォルトの名無しさん :2006/05/20(土) 18:27:03

>>25

39 名前:デフォルトの名無しさん :2006/05/20(土) 18:55:58
ダイアログボックスの右上にある「×」を使用不能にしたり、可能にしたり切り替えるにはどうしたらいいんですか?

40 名前:デフォルトの名無しさん :2006/05/20(土) 18:57:17
メッセージフック

41 名前:デフォルトの名無しさん :2006/05/20(土) 19:02:21
>>39 メニュー(システムメニュー)から外せばいいよ

42 名前:デフォルトの名無しさん :2006/05/20(土) 19:35:05
>>40,41
関数とか教えてもらえませんか?

43 名前:デフォルトの名無しさん :2006/05/20(土) 19:51:12
wsprintfがあるので普通にwsscanfもあると思ってソースを書いていました。
それでコンパイルしたとき「そんな関数ないです」とコンパイラに言われました。
wsscanfじゃなかったらなんになるのさ??

44 名前:デフォルトの名無しさん :2006/05/20(土) 20:08:01
>>43
Win32APIには無い。

45 名前:デフォルトの名無しさん :2006/05/20(土) 20:11:49
猫を見て思った・・・。
char szBuf[64];
wsprintf(szBuf, "差し手 = %s", szSashite);

これはいいのか?

46 名前:デフォルトの名無しさん :2006/05/20(土) 20:12:58
UNICODE考えてなかったら別にいいんじゃない?

47 名前:デフォルトの名無しさん :2006/05/20(土) 20:50:33
wsscanfじゃなかったら結局なんなの?

48 名前:デフォルトの名無しさん :2006/05/20(土) 20:53:02
>>47
無いつってんだろp”

49 名前:デフォルトの名無しさん :2006/05/20(土) 21:01:09
似たようなものもないってことですか?
勘違いしていました。

50 名前:デフォルトの名無しさん :2006/05/20(土) 21:19:24
子ウィンドウがアクティブ状態になったときメニューのところが親ウィンドウみたいに
青くなるようにするにはどうしたらいいのでしょうか?

51 名前:デフォルトの名無しさん :2006/05/20(土) 21:34:30
,、i`ヽ                        ,r‐'ァ 
 `ヽ::                      ::´
   ヽ ヽ        , -‐--、         / /
    ヽ \      I:::::::I_      _ / /
     ヽ  ヽ    i,(;;;ノI、;;;)l    ,,/  , '
      ヽ  ` ー 、.,,ゝ´ヮ`,ノュ_, - '   r'
フォ━━━━` 、_ /::: `山':::::    /━━━━!!! カス
         ヽ:::::::::::|::::::::"",r‐'
          〉::::::::|::::::::::¨/
         /;;;;;;;/;;;;;;;;;;/
        /;;;;;;;/:::::::::::《
        <;;;;;;;《:::::::::::::ヽ
      /   ヽI,r''"""^~ヽ
     /   ,/ ヽ    ヽ


52 名前:デフォルトの名無しさん :2006/05/20(土) 21:56:40
>>50
windows操作してりゃ分からねぇ?

53 名前:デフォルトの名無しさん :2006/05/20(土) 22:00:53
>>43
CRTの_tscanfで問題あるのか?

54 名前:デフォルトの名無しさん :2006/05/20(土) 22:04:24
なんか関係あるのかと思ってちょっと調べたけど
余計わからなくなっちゃったじゃないかァ!
http://kureyon.jp/blog/srhkmk/img/1128259481.jpg
http://ja.wikipedia.org/wiki/%E4%BD%8F%E8%B0%B7%E6%AD%A3%E6%A8%B9



55 名前:デフォルトの名無しさん :2006/05/20(土) 22:04:54
>>42
GetSystemMenu

56 名前:デフォルトの名無しさん :2006/05/21(日) 14:44:24
ウィンドウAの上にまったく同じサイズのウィンドウBが被さっていて、ウィンドウAが見えません。
その時、ウィンドウAを上にするにはどうしたらいいのでしょうか?
ShowWindow以外でなにかあれば教えてください。

ウィンドウAとウィンドウBの親ウィンドウは同じです。

57 名前:デフォルトの名無しさん :2006/05/21(日) 14:54:52
SetWindowPos

58 名前:デフォルトの名無しさん :2006/05/21(日) 14:54:59
SetWindowPos
ていうか何故以外?

59 名前:デフォルトの名無しさん :2006/05/21(日) 15:08:29
2つ重ねたウィンドウが必要になりそうだとおもったからです。
だけどそのウィンドウが途中からウィンドウの順序が逆になりそうな気がしたのです。
ありがとうございますです。

60 名前:デフォルトの名無しさん :2006/05/21(日) 16:23:16
>>45
それって何処が変なの?

61 名前:デフォルトの名無しさん :2006/05/21(日) 17:32:29
こういうことだろ?
UNICODEでコンパイルすると
TCHARがwchar_tになる。
つまり、
wsprintf(wchar_t *, const wchar_t *, ...);
ということになる。

wchar_t *のところに、char szBuf[64]をいれたら
コンパイルエラーが出る。
といいたいいんだろ?

62 名前:デフォルトの名無しさん :2006/05/21(日) 18:25:06
>>59
Windowの何の順がだ?
って言うか、試してみてダメだった時に考えろや。

63 名前:デフォルトの名無しさん :2006/05/21(日) 18:38:28
2002年のサンプルじゃないか

64 名前:デフォルトの名無しさん :2006/05/22(月) 01:14:14
ツールバーのIndexからボタンのチェック状態を調べるにはどうしたらいいのでしょう?
TB_GETSTATEはIDからしか無理みたいですし・・・
だからといってIndexからIDを調べる方法もわからないし・・・
TB_COMMANDTOINDEXは逆だし・・・
調べてみたのですがさっぱりわかりません。
教えてもらえないでしょうか?

65 名前:デフォルトの名無しさん :2006/05/22(月) 01:26:56
>>64
TB_GETBUTTONでindexからIDを調べる

66 名前:デフォルトの名無しさん :2006/05/22(月) 01:41:47
オォ!!
ちゃんと出てる!
ありがとうございます!
でもやっぱしID調べてからだったのですか・・・
処理回数増えるけど仕方ないか・・・

67 名前:デフォルトの名無しさん :2006/05/22(月) 05:05:34
エディットコントロール内にかなりの量の文字列を表示させる際
大きいバッファを用意し、その中に全ての文字列を格納して
SetDlgItemTextで一度に表示する方法しかないんでしょうか?
行単位で送り出せればいいんですが。

68 名前:デフォルトの名無しさん :2006/05/22(月) 05:09:58
EM_SETSELとEM_REPLACESELで追記

69 名前:デフォルトの名無しさん :2006/05/22(月) 05:17:43
>>68
なるほど。EM系のメッセージ調べれば良かったんですね。
どうもありがとうございました。

70 名前:デフォルトの名無しさん :2006/05/22(月) 05:46:42
行単位だとむちゃくちゃ遅くて使い物にならない

71 名前:デフォルトの名無しさん :2006/05/22(月) 09:06:23
エディットコントロール使っちゃだめ

72 名前:デフォルトの名無しさん :2006/05/22(月) 09:26:26
MFCのソースを見たら
win95はSetWindowTextだったのが
それ以降はエディットコントロールのメモリへ直接セットしてますね
おそらくそれが一番高速でしょう

73 名前:デフォルトの名無しさん :2006/05/22(月) 09:59:12
Error: 'C:\DXSDK\SDK\LIB\DDRAW.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

このエラーメッセージは何ですか?
コンパイルは出来たのですが、リンク時にこのメッセージが出てエラーになります

74 名前:デフォルトの名無しさん :2006/05/22(月) 10:09:30
失礼、ぐぐったら簡単に見つかりました

75 名前:デフォルトの名無しさん :2006/05/22(月) 10:13:59
うわお、ほんとだ。スミマセン・・・

76 名前:デフォルトの名無しさん :2006/05/22(月) 16:14:08
質問させてください。
メニュー選択で
 case IDM_AAA:
  OnCreate(hWnd); //スレッドを作ってダイアログボックスを呼び出す関数
  TESTMAIN( );  //計算する関数(時間がかかる)

////////
void OnCreate(HWND hWnd)
{
DWORD ThreadID;
ZeroMemory(&myThread, sizeof(THREAD));
myThread.hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)ThreadProc,
(LPVOID)hWnd, 0, &ThreadID);
if(myThread.hThread == NULL){
MessageBox(hWnd, "スレッドの作成に失敗しました",
"スレッド作成", MB_OK | MB_ICONERROR);
SetDlgItemText(hWnd, IDC_EDIT4, "失敗");
return;
}
myThread.bValid = TRUE;
}

DWORD WINAPI ThreadProc(HWND hWnd)
{
DialogBox(hInst, (LPCTSTR)IDD_joukyou, hWnd, (DLGPROC)joukyou);
return 0;
}
として、計算している最中にダイアログボックスを表示させたいのですが、
TESTMAIN( )が終わらないとダイアログボックスを表示してくれません。
スレッドを作っているのになぜでしょう?
長くてすいません。

77 名前:デフォルトの名無しさん :2006/05/22(月) 18:22:51
>>76
計算をしている最中にダイアログを出したいなら、
計算を別スレッドでやれよ。

78 名前:デフォルトの名無しさん :2006/05/22(月) 18:52:45
メインスレッドで計算してるから計算終わるまでメッセージ受け付けないわけだね

79 名前:76 :2006/05/22(月) 19:07:38
>>77
計算をしている間はウインドウを触って欲しくないので別スレッドにやらせたくないんです。
>>78
スレッドってそんなもんなんですか?

80 名前:デフォルトの名無しさん :2006/05/22(月) 19:10:24
スレッドが終了したかどうかは、
WaitForSingleObject系などを使って判定。
なお、キャンセルを受け付けるならWaitForMultipleObjectsがいいかもね。


81 名前:デフォルトの名無しさん :2006/05/22(月) 19:28:10
>>79
おま、決定的な勘違いしてんぞ?なんだ「そんなもん」て?
別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ?
そりゃ表示されるわけねーじゃんよん。もう全体的にダメぽ。
あと別スレッドで計算させたってウィンドウの操作無効にする方法はくらでもあんだろ?

82 名前:デフォルトの名無しさん :2006/05/22(月) 20:33:58
さわらせたくないなら、DisableWindowでもしとけばいいじゃん。
メッセージループが回らなきゃ、描画も移動も入力も、何にも回らんよ。

83 名前:デフォルトの名無しさん :2006/05/22(月) 20:57:10
スレッドと言うものを理解してないな・・ API以前の話。

Cの初心者スレできちんと勉強した方がいいよ。

84 名前:デフォルトの名無しさん :2006/05/22(月) 21:02:22
>>79
@.スレッドを操作するクラスを作る。
A.スレッド生存判定するメソを作る。WaitForSingleObject(m_hThread, 0)を使って判定。
B.@を扱いやすいとこで宣言。とりあえずグローバルで。
C.メニューの選択処理で、Aのメソでスレッドの生存判定。
D.Cでスレッドが生きてなかったら、スレッドを生成し処理を走らせる。

まずは、こんなかんぢで?
んで、好きなように工夫してみれあ?

85 名前:デフォルトの名無しさん :2006/05/22(月) 21:14:30
DialogBoxのparent指定を止める手もあるが。

86 名前:デフォルトの名無しさん :2006/05/22(月) 21:25:10
そういえばダイアログのみならメッセージループなくても動くね

87 名前:デフォルトの名無しさん :2006/05/22(月) 21:30:41
>>79
計算中にWindow触って欲しくなかったら、ダイアログ出す必要ないじゃん。


計算中にダイアログを出したいなら、メッセージループを回さなければならない。
メッセージループが回らないと、ダイアログを表示することすら出来ない。


君はWindowsの基本から勉強した方がいい。

88 名前:デフォルトの名無しさん :2006/05/22(月) 21:45:19
Windowsはモーダルダイアログを表示している間は、
メッセージループ(GetMessage)を独自に回し、
ダイアログ用ウィンドウプロシージャを呼び出しています。

89 名前:デフォルトの名無しさん :2006/05/22(月) 22:00:04
DLLの関数内で確保したメモリを
アプリケーション側で解放したりするのはマズイですよね?

今のところ動いてるんですが、例えばDLL側でリンクしているcrtと
アプリ側でリンクしているcrtが違ったりするとマズーな予感がするんですが

90 名前:デフォルトの名無しさん :2006/05/22(月) 22:09:10
>>89
newだのmallocを使うならマズイ。
Win32API使うならダイジョブ?

91 名前:デフォルトの名無しさん :2006/05/22(月) 22:33:06
ん、GlobalAlloc とか HeapAlloc とかならおk

92 名前:デフォルトの名無しさん :2006/05/22(月) 22:35:27
>>90
>>91
ありがとうございます
Win32APIを使用する事にします

93 名前:デフォルトの名無しさん :2006/05/22(月) 22:52:56
ところでboost::shared_ptrなら、DLLを跨いでも平気ということを知ったときには驚いた。

94 名前:デフォルトの名無しさん :2006/05/22(月) 23:27:37
>>81
>別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
>メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ

も前様もナニか勘違いしていると思われます。
ウィンドウメッセージは、ウィンドウを作ったスレッドのメッセージキューに
送られますよ。

79の問題は、「ウィンドウ触られたくないから」って言ってメインスレッドのメッセージ処理を止めてしまっている点。
ワーカスレッドはダイアログを表示してメインスレッドのウィンドウを非アクティブにするべく
WM_NCACTIVEメッセージをメインスレッドのウィンドウに送り、それの返事をずっと待っている。

95 名前:デフォルトの名無しさん :2006/05/23(火) 00:23:38
質問です。
IEのフレームに代表されるような「つまんで領域の大きさを左右や上下に調整する」区切り線は、
ウインドウスタイルの中で指定できないのでしょうか?
(正直、どういうメッセージが飛んでくるのかいまいち想像つきませんが)

用意されている可能性がある程度には、一般的かなと思うのですが…。

96 名前:デフォルトの名無しさん :2006/05/23(火) 00:26:28
>>95
スピリッタの事かな?

97 名前:デフォルトの名無しさん :2006/05/23(火) 00:27:41
スプリッタ

98 名前:デフォルトの名無しさん :2006/05/23(火) 00:34:38
あ、はい。Googleで検索かけたらその通りだったようです<スプリッタ
でもこれMFCなんですね。Win32APIオンリーだと自力実装になりそうですね。

99 名前:デフォルトの名無しさん :2006/05/23(火) 00:36:55
http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html

951〜


100 名前:デフォルトの名無しさん :2006/05/23(火) 00:42:37
>>98
WTLにもあるよ。

101 名前:デフォルトの名無しさん :2006/05/23(火) 00:48:18
>>99-100
ご丁寧にありがとうございます。
以前から何回か質問させていただいてますが、いつも丁寧な返答が帰ってきて嬉しい限りです。
まだペーペーですが、質問に応えられる側になるようがんばります。

102 名前:デフォルトの名無しさん :2006/05/23(火) 09:41:47
>>98
VCLにもあるよ。

ローカルフックでWindowsキーの入力を検知、シェル側で反応しないようにしたいのですが無理でしょうか?
WH_KEYBOARDで入力は取れるもの0返そうがスタートメニューが反応してしまいますorz

グローバルフックでファンクションキーは殺せたんですが‥‥

103 名前:デフォルトの名無しさん :2006/05/23(火) 10:05:42
>>102
もうちょいくやしく

104 名前:デフォルトの名無しさん :2006/05/23(火) 10:20:24
ウイルス ブラクラのたぐいに認定

105 名前:デフォルトの名無しさん :2006/05/23(火) 11:54:57
質問させてください。

ユーザーのwindowsの設定を取得したい時ってよくあると思うんですけど、
基本的には、レジストリから読み込めばいいんですかね?

それとも、専用の関数がある場合はなるべく、レジストリ系の関数は使わない方がいいんですか?


106 名前:102 :2006/05/23(火) 11:59:04
>>103
RegisterHotKeyで設定するホットキーの設定用に押したキーの組み合わせを取得したいのですがWindowsキーが問答無用でスタートメニュー開いてくれるので。
アクティブなコントロール上でWindowsキーが押された場合にスタートメニューを開かせないようにしたいのですが。

>>104
ローカルフックでどうやったらそんな物が作れるのか詳しく。

107 名前:デフォルトの名無しさん :2006/05/23(火) 12:07:18
>>105
設定による

108 名前:105 :2006/05/23(火) 12:17:20
>>107
レスどうもです。質問の仕方がちょっと悪かったと思うので変えます

1.書き込みはせずに読み込みだけする場合でも、レジストリにアクセスする事は危険で、なるべく避けた方が良い行為ですか?

2.専用の関数がある場合はなるべく、レジストリ系の関数は使わないようにした方がいいですか?


109 名前:デフォルトの名無しさん :2006/05/23(火) 12:40:57
>>108
1.必要があるなら使う、そうでなければ使わない
2.うん
Windowsのバージョンによって、格納されているエントリが異なることもある
専用の関数はそれらの差異を吸収している場合が多い

110 名前:105 :2006/05/23(火) 13:04:46
>>109
よくわかりました。ありがとうございました。

111 名前:デフォルトの名無しさん :2006/05/23(火) 14:54:00
>>102
WH_LLKEYBOARD のフックプロシージャで TRUE 返せばキーは無効になると思うよ。
これのフックプロシージャは(他プロセスに進入する他のグローバルフックとは異なり)、
SetWindowsHookEx を読んだプロセス(スレッド)のメッセージポンプ経由で呼ばれるので注意。
EXE に普通に書けてラクだけど。

112 名前:デフォルトの名無しさん :2006/05/23(火) 15:35:46
質問です。

あるウインドウの子として、
CreateWindowにて
WS_CLIPSIBLINGS | WS_CHILD | WS_VISIBLE | WS_SYSMENU | WS_THICKFRAME | WS_CAPTION | WS_MINIMIZEBOX
な子供ウインドウを作りました。

その子供同士の重なりなのですが、ウインドウの「タイトルバー」をクリックしない限り、前後が入れ替わりません。
クライアント領域であろうと(例えば)スクロールバーであろうと、どこかをクリックされたら、そいつが(子供ウインドウの中で)最前面にくるのかと思っていたのですが、これは仕様なのでしょうか?
それとも設定ミスでしょうか?

113 名前:デフォルトの名無しさん :2006/05/23(火) 16:03:31
WM_COMMANDについて質問させてください。
猫などのサイトを見ているとWM_COMMANDでのButtonクリックの処理は
ButtonのIDで処理していますよね。
それで本題なんですけど、
とあるサイトでWM_COMMANDのlParamのデータを見たのですが
その中にはhwndControl(コントロールからの場合、ウィンドウハンドル(HWND)が入る)と書いていました。

ですのでHWNDを変数に入れてある場合、IDよりHWNDで判定したほうが
安全な気がするのですが(IDが被る心配がいらないとか?)
実際のところはどうなんでしょうか?

114 名前:デフォルトの名無しさん :2006/05/23(火) 16:14:42
>>113
何を問題としているのかが理解できんな。
IDとHWNDを比べてみても意味はないし。

何かをしたいが「IDでやる方法がわからない」と言う事なのか?

115 名前:デフォルトの名無しさん :2006/05/23(火) 16:28:56
>>114
これは単なる疑問で「IDでやる方法がわからない」というわけではないのです。
説明が下手だったみたいです。

ID=定数。
定数ということはプログラムが大規模になると数字が被るような気がする。
被ったら変な動きがするかもしれない?
それだったらウィンドウハンドルはひとつのプログラム内だったら被ることはまずないような・・・
とか思ったのです。

116 名前:デフォルトの名無しさん :2006/05/23(火) 16:36:55
逆にかぶせられて便利という考え方もあるけどね

117 名前:デフォルトの名無しさん :2006/05/23(火) 16:42:46
まぁ確かにそうですけど・・・
自分で被るようにしたのはいいのですけど、
気づかないで被っていたらやばくないかなぁって思いません?

118 名前:デフォルトの名無しさん :2006/05/23(火) 16:48:06
>>115
被らない様に付けるからID(識別子)と言うのだ

119 名前:デフォルトの名無しさん :2006/05/23(火) 16:52:55
確かにIDのおかげでいろいろ応用が利く

120 名前:デフォルトの名無しさん :2006/05/23(火) 16:57:10
う〜ん、つまりこれは、
つまらない疑問だったのですね・・・
ようはうまく使い分けろってことですかね?

121 名前:デフォルトの名無しさん :2006/05/23(火) 16:59:25
ケースバイケースだな。
HWNDで判定したければすればいい。

122 名前:デフォルトの名無しさん :2006/05/23(火) 17:08:05
そもそも一意に振られたIDと親ウィンドウのハンドルがあれば、
コントロールのHWNDを取得できるわけだし、
コントロールのHWNDを管理する手間が減ってイイ!

と思うのだが・・・

123 名前:デフォルトの名無しさん :2006/05/23(火) 17:10:09
あぁ〜、
それに気づかなかったのか自分は・・・

124 名前:デフォルトの名無しさん :2006/05/23(火) 17:31:10
>>111
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
で行けました。ありがとうございました。




125 名前:デフォルトの名無しさん :2006/05/23(火) 17:49:54
>>115
被るのが心配ならenum使えば勝手に連番を割り振ってくれるよ。

126 名前:デフォルトの名無しさん :2006/05/23(火) 17:50:49
タイトルバーのあるウィンドウの位置を固定して、
移動できないようにするにはどうしたらいいのでしょうか?
最大化や閉じるなどは使えるままにしたいとおもっています。

127 名前:デフォルトの名無しさん :2006/05/23(火) 18:02:34
>>126
WM_MOVINGでlParamを固定したい位置に書き換えればいいよ。

128 名前:デフォルトの名無しさん :2006/05/23(火) 18:03:27
>>126
移動できないようにするのに最大化はしたいとは、また無体な要望をw
そうすればいいんじゃね?

129 名前:デフォルトの名無しさん :2006/05/23(火) 18:06:22
>>126
最大化や最小化も「移動」だ

130 名前:デフォルトの名無しさん :2006/05/23(火) 18:09:27
>>126
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND | MF_GRAYED);

131 名前:デフォルトの名無しさん :2006/05/23(火) 18:20:56
ここのやり取りを見てるだけでも結構な勉強になりますね。

132 名前:デフォルトの名無しさん :2006/05/23(火) 18:31:09
>>126
EnableMenuItem()じゃ効かなかった
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);

133 名前:デフォルトの名無しさん :2006/05/23(火) 18:38:40
>>132
何度しても無理だったのでやり方が間違っているか考えてました。
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);は動きました!

・・・EnableMenuItemはなぜ出来ないのでしょうかね?

134 名前:デフォルトの名無しさん :2006/05/23(火) 18:41:54
予想通り最大化&Windowsキー使えなくする超DQN仕様

135 名前:デフォルトの名無しさん :2006/05/23(火) 18:45:17
業務用アプリなんだろ。

136 名前:デフォルトの名無しさん :2006/05/23(火) 19:21:25
>>113
わんわんわんわん わわわん わんわん 
(HWNDは各々のPCのWindows毎に値が異なりますが、IDはユニーク値が付けられます。)

わんわん わわん わんわん
(メッセージやアイコンとか、別のリソースDLLでもっておけば、)

わんわんわんわん わん わわん わわん
わんわんわん わわわん クーン わんわん
(他国間で動かせるアプリケーションを作成したとき、リソースの差し替えは動的に行えますからね。)


わん!

137 名前:デフォルトの名無しさん :2006/05/23(火) 19:56:19
>>136
わんわわん

138 名前:デフォルトの名無しさん :2006/05/23(火) 20:30:50
>>136
わんわんわんんわ

139 名前:デフォルトの名無しさん :2006/05/23(火) 20:38:51
黙れ犬共
朝鮮人呼ぶぞ

140 名前:デフォルトの名無しさん :2006/05/23(火) 21:28:11
うにゃー

141 名前:デフォルトの名無しさん :2006/05/23(火) 21:52:52
なーご

142 名前:デフォルトの名無しさん :2006/05/23(火) 22:03:47
猫でも本みながらテキストエディタ作ったのですが
UNICODEベースだと、かなり変わってくるのでしょうか
あいまいな質問ですいません。

143 名前:デフォルトの名無しさん :2006/05/23(火) 22:45:05
>>142
きちんとUNICODE対応を念頭において作られたのならば、ソースコードに変更は生じない。

猫でもはちっともUNICODE対応を考えていない。
(しかし猫を書いた本人は現在知らないわけではなさそうだ)

144 名前:デフォルトの名無しさん :2006/05/23(火) 22:46:26
>>142
ASCIIと互換を考えるなら、
アプリケーションの実行地域(ロケール)、
あとファイル操作を気をつけなければなりませんね。


145 名前:デフォルトの名無しさん :2006/05/23(火) 22:49:42
>>142
似たような御仁がおられる。edit control を使ったものは分かりませんが、
rich edit control を使ったものは分からないことだらけ。
自分は文字を色付けしたりして使っていますが、rich edit control では
UNICODE 対応はまじめにやってないんではと思うときがあります。

ファイルの扱いやダイアログなどでの文字の扱いは問題ないです。

146 名前:デフォルトの名無しさん :2006/05/23(火) 22:55:44
すいません。
どなたか>>112わかりませんでしょうか。
単純に「親ウインドウ作って、子ウインドウ2つ作って」というだけのアプリを作っても、ダメでした。

147 名前:デフォルトの名無しさん :2006/05/23(火) 23:18:44
とあるアプリケーションの、入力補助アプリを作ろうと模索中です。
対象アプリの入力欄のハンドルが欲しいのですが、同じクラス名が沢山あり捕まえられませんでした。
入力欄はテキストボックス?で、フォーカスが当たり入力カーソルが点滅している状態です。
これを利用して、ハンドルを取りたいのですがどうすればいいのでしょうか?



148 名前:デフォルトの名無しさん :2006/05/23(火) 23:23:08
GetGUIThreadInfo

149 名前:デフォルトの名無しさん :2006/05/24(水) 00:13:18
チャイルドをアクティブにせなアカン

150 名前:147 :2006/05/24(水) 00:18:56
>>148
ありがとうございます。
明日やってみます。
コレをヒントに何とか解決できそうです。
正直ウィンドウ情報だけでやろうとして煮詰まっていました。
初心者ゆえ、しらない概念がある事がわかって勉強になったしだいです。


151 名前:デフォルトの名無しさん :2006/05/24(水) 01:31:45
質問です。

タブコントロールのタブの部分をマウスで右クリックしたらポップアップメニューが出てきて
削除を選ぶとそのタブ項目が削除されるようにしたいと思っています。
ですので、タブの右クリック取得方法(NM_RCLICK)や
タブの削除方法(TCM_DELETEITEM)は調べました。
しかし、右クリックしたタブが左から何番目かを調べる方法がわかりません。
どうやったらいいのでしょうか?
よろしくお願いします。



152 名前:デフォルトの名無しさん :2006/05/24(水) 02:07:05
>>151
TCM_HITTESTは調べた?

153 名前:デフォルトの名無しさん :2006/05/24(水) 02:56:22
さっそく試してみました。
case NM_RCLICK:
GetCursorPos(&(HitTest.pt));
ScreenToClient(hTabWnd,&(HitTest.pt));
SendMessage(hTabWnd, TCM_HITTEST, 0, (LPARAM)&HitTest);
wsprintf( str, TEXT("%d番目"), TCHT_NOWHERE);
MessageBox(NULL , str, TEXT("タブコントロール"),MB_OK);
break;
としたら"1番目"としか返ってきませんでした。。。
どっか間違えたみたいです。
どこだろ・・・
まぁ、明日もう一度英文見直すか〜

154 名前:153 :2006/05/24(水) 02:59:05
wsprintf( str, TEXT("%d番目"), TCHT_NOWHERE);
    ↓
wsprintf( str, TEXT("%d番目"), HitTest.flags);
です。
戻し忘れてました。


155 名前:153 :2006/05/24(水) 03:16:15
ちょっとTCM_HITTESTを見直したのですが、
このメッセージはタブ内にマウスポインタがあるだけしかわからないような・・・
返ってくる値はTCHT_ONITEMとTCHT_ONITEMLABELだけだし・・・
う〜ん、なにか別のとセットで使うものなのですか?

156 名前:デフォルトの名無しさん :2006/05/24(水) 03:32:25
ヒント:返値

157 名前:デフォルトの名無しさん :2006/05/24(水) 09:33:39
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/tab/messages/tcm_hittest.asp


158 名前:デフォルトの名無しさん :2006/05/24(水) 10:35:22
ここには賢人しかいないのか  わん

159 名前:デフォルトの名無しさん :2006/05/24(水) 10:41:23
タブブラウザのまねっこだったらソースみりゃいいじゃん

160 名前:153 :2006/05/24(水) 13:05:58
アッ!
戻り値見忘れてた!

>>156
>ヒント:返値
それってもう答えじゃないですか(笑)

161 名前:デフォルトの名無しさん :2006/05/24(水) 13:11:39
>>112 DefMDIChildProcは、WM_CHILDACTIVATEを処理しています
>>133 大昔の仕様です。「なぜ」に答えるのはむつかしいです

162 名前:151,153 :2006/05/24(水) 13:50:07
SendMessage(hTabWnd, TCM_HITTEST, 0, (LPARAM)&HitTest);
の返り値で何番地かわかるようになりました。
ですがそのあとでポップアップメニューを出しても何番地かの情報を送ってはくれません。
ですのでこういう場合は下のように、
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
として出てきたIDと組み合わせて処理をしたらいいのでしょうか?

163 名前:デフォルトの名無しさん :2006/05/24(水) 14:57:13
>>162
試してないけど、こんな感じでどう?

case NM_RCLICK:
  GetCursorPos(&(HitTest.pt));
  ScreenToClient(hTabWnd, &(HitTest.pt));
  PopupProc(hTabWnd, TabCtrl_HitTest(hTabWnd, &HitTest));
  break;

BOOL PopupProc(HWND hTabWnd, int iItem)
{
  int nID;

  if (iItem == -1) {
     return FALSE;
  }
  /* 中略 */
  nID = TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
  switch (nID) {
     case IDM_DELETE: /* 削除を選択 */
       TabCtrl_DeleteItem(hTabWnd, iItem);
       break;
  }
  return TRUE;
}

164 名前:デフォルトの名無しさん :2006/05/24(水) 15:14:48
>>163
動きました〜

165 名前:デフォルトの名無しさん :2006/05/24(水) 15:15:35
Delphiにある、コンポーネントの作成ってCとかで出来る?   わん

166 名前:デフォルトの名無しさん :2006/05/24(水) 15:36:19
カスタムリソースについて調べています。
「猫でも・・・」や「WisdomSoft」にあるソースを見てもLoadResource
の後処理らしき処理がわかりません。検索もしてもいまいちわからずです。
LoadResouraceに対応した解放処理は不要なんでしょうか?

167 名前:デフォルトの名無しさん :2006/05/24(水) 15:56:20
>>166
For 32-bit Windows applications, it is not necessary to free the resources loaded using LoadResource function.

http://support.microsoft.com/?scid=kb;ja;193678

168 名前:166 :2006/05/24(水) 16:07:14
>>167
ありがとございます。解放の必要はないようですね。
お手数おかけしました。

169 名前:デフォルトの名無しさん :2006/05/24(水) 17:11:08
メッセージをDispatchするループの後って絶対に通るよね。
まさかWM_QUITが来た時点でプロセスが終了するわけじゃないよね。

えーっとつまり、

{

while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
{
  TranslateMessage( &msg );
  DispatchMessage( &msg );
}

MessageBox( NULL, "通るかな", NULL, MB_OK );

}

これでどんな時にも(エラー終了以外で)「通るかな」と表示されますか?

170 名前:デフォルトの名無しさん :2006/05/24(水) 17:13:51
>>169
シャットダウン要求があってしばらく終了しないでいると
プロセスが強制的に殺されることがある。

171 名前:デフォルトの名無しさん :2006/05/24(水) 17:16:07
>>169
例外が発生したら一気にブロックの外に飛ぶ気がする

172 名前:76 :2006/05/24(水) 18:00:18
遅くなりましたけど、希望に沿うものができました。
ありがとうございます。


173 名前:デフォルトの名無しさん :2006/05/24(水) 18:05:30
>>169
新規作成→Win32アプリで 標準的な"Hello World!"アプリケーションを選択し、
適当にメニュー項目を作成。
んでWndProcでそのメニュー項目の処理にでNULLをスローしてみた。
>>171の言うとおりだった。


174 名前:デフォルトの名無しさん :2006/05/24(水) 18:07:56
サブクラスかについて質問があります。
サブクラス化をしたときは既にWM_CREATEが終わった後ですよね?
ですのでサブクラスのプロシージャでWM_CREATEをしてもなにも起きない!
そこまではわかります。

こっから本題。
サブクラスのプロシージャ内で初期化をしたいのですが、
WM_CREATEは使えません。
ですのでどこで初期化をしたらいいのでしょうか?
ご教授願います!

175 名前:デフォルトの名無しさん :2006/05/24(水) 18:11:32
>WM_CREATEをしても

自分でするもんじゃない


176 名前:デフォルトの名無しさん :2006/05/24(水) 18:29:05
何かメッセージ送ればいいじゃん

177 名前:174 :2006/05/24(水) 18:31:27
>>175
言葉のあやです。
サブクラスのプロシージャでは、WM_CREATEはひろえない。

178 名前:デフォルトの名無しさん :2006/05/24(水) 18:42:11
>>177
サブクラス化したあとにメッセージでも送るか、何かのフラグを持つか。

179 名前:デフォルトの名無しさん :2006/05/24(水) 18:49:59
WM_INIT

180 名前:デフォルトの名無しさん :2006/05/24(水) 19:19:56
そういえば確かSetWindowLongで、
値を変えたときにくるメッセージがあったような・・・
それを使ったら出来るかもしれんけど名前忘れた

181 名前:デフォルトの名無しさん :2006/05/24(水) 19:22:50
そんなんあったか?
初耳だ。

182 名前:180 :2006/05/24(水) 19:25:19
やっと見つけた!
WM_STYLECHANGED

183 名前:180 :2006/05/24(水) 19:31:41
けど使い方わかんない

184 名前:180 :2006/05/24(水) 19:34:37
あぁ〜
もしかしてこれって
GWL_STYLEとGWL_EXSTYLEしか判別してくれにゃいとか?

185 名前:デフォルトの名無しさん :2006/05/24(水) 19:57:05
MSDN見ろ

186 名前:180 :2006/05/24(水) 20:06:01
いやぁ〜、英語版のMSDNでちらっと見ただけだったので勘違いしていました〜
どうもすみませんでした。


187 名前:デフォルトの名無しさん :2006/05/24(水) 20:16:00
スクロールバーのついたウィンドウにて、スクロールバーをのぞいたサイズの取得方法を教えてもらえないでしょうか?

GetClientRectをしても
スクロールバーを含めたサイズしか求められないので・・・


188 名前:デフォルトの名無しさん :2006/05/24(水) 20:19:15 ?#
GetClientRectの結果からスクロールバーの分を差し引けば良かろう。

189 名前:デフォルトの名無しさん :2006/05/24(水) 20:22:51
スクロールバーのサイズって一定なのかもわからないですし、
もしかしたらWS_VSCROLLだけとか、WS_HSCROLL | WS_VSCROLLのもあるかもしれないので
TabCtrl_AdjustRectと同じようなものがないかなぁって考えてたのですが・・・


190 名前:デフォルトの名無しさん :2006/05/24(水) 20:27:53 ?#
ヒント: GetSystemMetrics

191 名前:デフォルトの名無しさん :2006/05/24(水) 20:49:21
InvadeRectで指定した無効領域の「外に」、LineTo等で描画した場合、
OSが勝手にクリップして、描画処理を省いてくれるのでしょうか。

それとも自前でクリップするべきでしょうか。

192 名前:デフォルトの名無しさん :2006/05/24(水) 20:54:41
やってみれば〜

193 名前:デフォルトの名無しさん :2006/05/24(水) 20:55:28
>>191
それ俺も気になるな

194 名前:デフォルトの名無しさん :2006/05/24(水) 20:57:43
おまいら、円弧や曲線でも自力でクリップする気ですか?

195 名前:デフォルトの名無しさん :2006/05/24(水) 20:59:13
いや別にできるだろw

196 名前:デフォルトの名無しさん :2006/05/24(水) 20:59:42
侵略すんのかよ!

197 名前:デフォルトの名無しさん :2006/05/24(水) 22:21:26
無効領域って BeginPaint が設定する PAINTSTRUCT の rcPaint でしょ?
ウィンドウに直接描画するならクリップもクソも無いんでない?

198 名前:デフォルトの名無しさん :2006/05/24(水) 22:27:11
>>197

199 名前:デフォルトの名無しさん :2006/05/24(水) 22:36:54
一つのコマンドプロンプトに複数回コマンドを渡すにはどうしたらいいのでしょう?
以下勝手な予想。

ShellExecuteEx(コマンドプロンプト起動&1回目のコマンドを渡す)

何らかのAPI?(2回目のコマンドを渡す)

何らかのAPI?(3回目のコマンドを渡す)



GetExitCodeCodeProcessで終了

200 名前:デフォルトの名無しさん :2006/05/24(水) 22:48:44
猫でも〜の言うとおりにやっても画像表示できません
試しにサンプルをコンパイルしてみてもやっぱり真っ白でした
エラーは出てません
このスレにエスパーさんがいたら教えて下さい

201 名前:デフォルトの名無しさん :2006/05/24(水) 23:00:46
ここって「こういう関数を作ってみたんですけど、改善点はありますか?」的な事も答えてくれますか?

202 名前:デフォルトの名無しさん :2006/05/24(水) 23:11:42
>>187
標準スクロールバーは非クライアント領域の一部だから、
GetClientRectでその分を除いたサイズが返ってくるですよ。

203 名前:デフォルトの名無しさん :2006/05/24(水) 23:17:12
>>199
CreatePrcessでコマンド/DOSプロンプトを起動させて、
パイプを使ってリダイレクトしてでコマンドを流し込めばいいと思う。

或いは簡易的だけど一時的なバッチファイルを書き出して、それを実行させるという手もある。

204 名前:デフォルトの名無しさん :2006/05/24(水) 23:26:56
http://www.microsoft.com/japan/developer/library/Jpwinpf/_win32_getcommandline.htm

天下のMSDNが誤っている件

205 名前:デフォルトの名無しさん :2006/05/24(水) 23:31:10
誤訳の宝庫として天下に名を馳せてますが。

206 名前:片桐摩美 :2006/05/24(水) 23:33:28
>>200
回答1
 http://www.kumei.ne.jp/c_lang/nogif.htm

回答2
 リソース・エジタでビットマップリソースを作る
 (エジタなのがミソ)

回答3
 WM_PAINTに処理を書いてないかな?

207 名前:デフォルトの名無しさん :2006/05/24(水) 23:37:52
>>200
あんただれよ?

208 名前:デフォルトの名無しさん :2006/05/25(木) 00:34:45
>>201
激しくスレ違い

209 名前:デフォルトの名無しさん :2006/05/25(木) 08:18:55
すいません質問させてください。
ウインドウクラスの

wc.lpszClassName = "window";

の部分に↑のように入力したら

e:\make_game\game1\main.cpp(44) : error C2440: '=' : 'const char [7]' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

↑のようなエラーがでました。
char szClassName[]="window";
とやって再び
wc.lpszClassName = (LPCWSTR)szClassName;
と入力したらビルドは通りましたが
クラスネームの配列の中に"䥗䑎坏"っていうわけのわからん文字が入ってました。
いろいろネットやMSDNで調べましたが原因がわかりません。お願いします、原因が
わかる方教えてください。
あと環境はVisual Stadio 2005でC++です。


210 名前:デフォルトの名無しさん :2006/05/25(木) 08:28:49
char の代わりに TCHAR 使う
リテラル文字列は TEXT マクロ

211 名前:デフォルトの名無しさん :2006/05/25(木) 08:29:33
>>209
_T("window");

212 名前:デフォルトの名無しさん :2006/05/25(木) 09:56:34
最近、ワイド文字とマルチバイト文字系の問い合わせが多い気ががする。

213 名前:デフォルトの名無しさん :2006/05/25(木) 10:03:15
VS2005でプロジェクト作成すると、
UNICODEが使われるようになったからね

214 名前:デフォルトの名無しさん :2006/05/25(木) 10:15:08
それほど、マルチバイト文字とワイド文字の区別もついていない低脳が多かったわけだ。

215 名前:デフォルトの名無しさん :2006/05/25(木) 10:42:15
おまえ低脳?

216 名前:199 :2006/05/25(木) 10:47:42
>>203
ありがとうございました。
早速取り入れてみます。

217 名前:デフォルトの名無しさん :2006/05/25(木) 11:47:02
アプリケーション独自のマウスカーソルを取得する方法
ttp://www.woodybells.com/delphi_tips/index.cgi?mode=view&no=5

↑このページの方法でカーソルハンドルを取得すると、コンソール(cmd.exe)ウィンドウに
のせたカーソルが砂時計になっています(見た目では矢印)。
見た目通りのカーソルハンドルを取得するにはどうすればよいのでしょうか?

218 名前:デフォルトの名無しさん :2006/05/25(木) 11:53:05
APIの関数の引数でLPTSTRについて・・・

winnt.hの中で、
 typedef WCHAR *LPWSTR, *PWSTR;
 typedef CHAR *LPSTR, *PSTR;
となっている。
んで、マルチバイト環境では、LPTSTRはLPSTR(TCHARはchar)と解釈され、
ワイド文字環境では、LPTSTRはLPWSTR(TCHARはwchar_t)と解釈される。

APIの関数も、GetCurrentDirectoryの場合、
リファレンスでは
 DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
となっているが、実際winbase.hの中では、
 DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
 DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer);
の2つの関数が宣言されており、
これを環境に応じて、GetCurrentDirectoryAとGetCurrentDirectoryWを切り替えている。
コード書く奴は、LPTSTRとWCHARを巧く利用せんとね。

あと、スレ違いだが、
#include <tchar.h>
#include <clocale>

#include <cstdio>

void _tmain(void){

_tsetlocale(LC_ALL, _T("jpn"));
_tprintf(_T("Hello World!\n"));
}

この説明をしているサイトが少ないかも。

219 名前:デフォルトの名無しさん :2006/05/25(木) 18:00:46
リストボックスの背景色を変えるにはどうしたらいいんですか?

220 名前:デフォルトの名無しさん :2006/05/25(木) 18:02:33
>>219
ググレ

221 名前:デフォルトの名無しさん :2006/05/25(木) 18:03:40
>>218
地域化を深く考えるわけでなければロケール文字列は""で十分だと思う。

あと、C++を使うのならstd::locale::globalだろ。

222 名前:デフォルトの名無しさん :2006/05/25(木) 18:33:40
Bluetoothの電波強度を取得するようなプログラムって書けますかね?
参考になるようなサイトがあったら教えていただければ幸いです

223 名前:デフォルトの名無しさん :2006/05/25(木) 18:42:03
222に付けたしです
OSはWindows XP SP2で動作して欲しいです

224 名前:デフォルトの名無しさん :2006/05/25(木) 19:06:50
>>221
WinNT系って、
setlocaleせんと日本語表示できないんだっけ?
コンソールに限るけど。


225 名前:デフォルトの名無しさん :2006/05/25(木) 19:28:16
>>222-223
WMIにありそうかも。

226 名前:デフォルトの名無しさん :2006/05/25(木) 19:55:40
WriteConsoleOutputWを直接たたくなら、setlocaleは関係ない

227 名前:224 :2006/05/25(木) 20:09:23
>>226
WriteConsoleOutput!?
これは知らんだった!

ナイスです!

228 名前:デフォルトの名無しさん :2006/05/25(木) 20:20:48
PSDKのファイルを見るとZeroMemoryがmemsetのマクロになっていたのですが
明示的リンク以外でkernel32.dllのRtlZeroMemoryを呼び出す方法はありますか?
環境はVisual C++ 2005 Express Editionです。

229 名前:デフォルトの名無しさん :2006/05/25(木) 21:01:59
undefして自分でプロトタイプ宣言すれば?

230 名前:デフォルトの名無しさん :2006/05/25(木) 21:06:18
>>225
WMIで検索してみましたが良い情報は得られませんでしたorz

231 名前:デフォルトの名無しさん :2006/05/25(木) 21:11:07
>>228
でもなんでkernel32のRtlZeroMemoryを使いたいの?

232 名前:デフォルトの名無しさん :2006/05/25(木) 21:14:07
玄人っぽくみえるからです

233 名前:デフォルトの名無しさん :2006/05/25(木) 21:21:42
>>230
ハードウェア毎に違うんじゃないの?
ドライバ直接叩くとかしないと

234 名前:デフォルトの名無しさん :2006/05/25(木) 21:24:07
>>229
ありがとうございます。
一応思ってたことはできました。

>>231
CRTを使いたくないからです。

235 名前:LCD派 :2006/05/25(木) 21:29:58
CRTを使うと素人っぽいからです。

236 名前:デフォルトの名無しさん :2006/05/25(木) 21:34:36
”ディレクトリを開く”ダイアログを作成するAPIってありますか?

”ファイルを開く”ダイアログがあったから、ディレクトリもあるかと
思ったんですが、見つからないのでよろしくお願いします。

237 名前:デフォルトの名無しさん :2006/05/25(木) 21:34:54
あります

238 名前:デフォルトの名無しさん :2006/05/25(木) 21:43:38
なんていうAPIですか?

239 名前:デフォルトの名無しさん :2006/05/25(木) 21:44:32
SHGetPathFromIDList

240 名前:デフォルトの名無しさん :2006/05/25(木) 21:45:02
SHBrowseForFolder

241 名前:デフォルトの名無しさん :2006/05/25(木) 21:54:46
memset で crt なんか使われるかな・・・?

242 名前:デフォルトの名無しさん :2006/05/25(木) 21:58:01
memset自体がcrtでしょうに。

243 名前:デフォルトの名無しさん :2006/05/25(木) 21:59:00
組み込み関数だからCRTいらないんじゃ
インライン展開されるはずだし

244 名前:デフォルトの名無しさん :2006/05/25(木) 21:59:43
gcc でも VC でも凝ったオプションつけなければビルトイン関数として
その場にインラインで展開されると思うけど。

245 名前:デフォルトの名無しさん :2006/05/25(木) 22:07:00
インライン展開されようがどうだろうが、crtはcrtだぞ。

246 名前:デフォルトの名無しさん :2006/05/25(木) 22:12:31
>>245
ZeroMemory って書いておけば、コードにも crt 由来の行はないし、
出てくるオブジェクトにも存在しなくなる。

それはともかくとして、memset とか memcpy は AMD のサイトに有る
プリフェッチ使って最適化した奴使うのが良いと漏れは思うな。
入れ替えるだけで僅かながら高速化されるからラク。

247 名前:デフォルトの名無しさん :2006/05/25(木) 22:13:16
>>239,240
ファイルと違って難ずくわからん。でもサンクス。

248 名前:デフォルトの名無しさん :2006/05/25(木) 23:47:15
>>233
ドライバ書くのはたぶん無理です…

249 名前:デフォルトの名無しさん :2006/05/25(木) 23:55:33
#pragma intrinsic (memcpy)

250 名前:デフォルトの名無しさん :2006/05/26(金) 00:16:44
>>248
出来るとすればここから情報を拾うこととか。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bluetooth/bluetooth/bluetooth_start_page.asp


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