- 1 名前:デフォルトの名無しさん [2009/08/02(日) 00:20:49 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ! 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build80 pc12.2ch.net/test/read.cgi/tech/1244057140/l50
- 10 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:01:26 ]
- ♪Et de l'Étoile à la Concorde, un orchestre à mille cordes
♪Tous les oiseaux du point du jour chantent l'amour ♪Aux Champs-Elysées, aux Champs-Elysées ♪Au soleil, sous la pluie, à midi ou à minuit ♪Il y a tout ce que vous voulez aux Champs-Elysées
- 11 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:42:53 ]
- SendMessageのBM_SETCHECKを使ってボタンの状態を変更すると、そのボタンを選択したような点線になりますよね。
これを無効化したいのですが、どのような関数を使えばよいでしょうか?
- 12 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 08:12:08 ]
- フォーカス!フォーカス!
- 13 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 08:29:49 ]
- OS自身の関数にも高水準で敷居の低い関数を追加してくれんやろか
- 14 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 09:15:10 ]
- そこら辺は.NETを使えって方針だろ。
- 15 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 11:05:34 ]
- >>11
TabStop関係かなぁ?
- 16 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 12:16:20 ]
- Windows 7 RTM になったんだから、とっととSDKもRTM版出してほしい
- 17 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 14:52:34 ]
- >>13
WinsockとWinINetとかそういう関係にあると思う。
- 18 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:20:37 ]
- >>16
そういえば、Windows 7 SDK RCのリンクって貼られてないよな。 www.microsoft.com/downloads/details.aspx?familyid=6DB1F17F-5F1E-4E54-A331-C32285CDDE0C&displaylang=en
- 19 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:09:20 ]
- Vistaや7RCだとタイトルバーとかの大きさが異なる場合
適切なウィンドウサイズを表示する方法ないかな?
- 20 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:13:35 ]
- まさか今まで決め打ちしてやってたんじゃないだろうなお前
- 21 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 17:20:32 ]
- ウィンドウの上にカーソルが来た時自動にアクティブにするには
どうすればいいですか
- 22 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:40:10 ]
- ja.pastebin.ca/1516486
起動時,クライアント領域に"aaaaa"と表示され,その後方向キー右を押すと真っ白な画面に切り替わるプログラムを作ろうと思っています. 上のURLのようにコードを書いたのですが方向キー右を押しても画面が切り替わりません.どうしてでしょうか.
- 23 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:44:23 ]
- >>22
BeginPaint/EndPaintはWM_PAINTでしか使えない GetDC/ReleaseDCを使うといいかもしれない
- 24 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:45:49 ]
- とりあえずBeginPaintの解説読んでみ
msdn.microsoft.com/ja-jp/library/cc428337.aspx
- 25 名前:23 mailto:sage [2009/08/03(月) 18:47:18 ]
- と思ったけどそういう問題とは違う気もする・・・23は忘れてください
- 26 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:48:17 ]
- 本当にVK_RIGHTは来ているのだろうか?
という疑問
- 27 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:53:59 ]
- >>20
決め打ちでやってた やっぱりGetSystemMetricsで色々情報取らないと駄目?
- 28 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:00:02 ]
- WM_KEYのBeginPaintをやめてBitBltのrcPaintを、ウィンドウのクライアント領域を求めて使えばいいんじゃないだろうか
- 29 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:00:05 ]
- AdjustWindowRect
メニュー複数行だと多少工夫が要るが
- 30 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:50:55 ]
- 無効領域が無いから、PAINTSTRUCT.rcPaintが空になって、
結果的に何も転送されずに終わっちゃってるんだろうなあ。 BITMAP bm; GetObject(GetCurrentObject(hmdc,OBJ_BITMAP),sizeof(bm),&bm); って感じで取ってきたサイズを使えば一応できるな。 根本的な解決策には程遠いけど。
- 31 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:53:56 ]
- 21解決しましたすみません
- 32 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:01:33 ]
- AdjustWindowRectってきっちりそのサイズになる?
試しに SetRect(&rect,0,0,640,480); AdjustWindowRect(&rect,WS_SYSMENU,FALSE); としてサイズ指定しても、クライアントサイズは640x480にならなかった
- 33 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:13:37 ]
- どう見てもスタイルの指定がいい加減だからです
- 34 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:22:26 ]
- 手抜きしようとするから決め打ちしたりとかするんだろうなあ
- 35 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:28:24 ]
- 渡すスタイルってウィンドウスタイルじゃなかった?
- 36 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:39:57 ]
- 問題のウィンドウはそのスタイルで表示してるのか?
- 37 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:16:49 ]
- >>36
勿論同じの指定してます WS_CAPTIONを追加したらサイズが若干変わりましたが まだ640x480と望むサイズにはなりません
- 38 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:19:25 ]
- これこれを追加したとか手打ちするんじゃなくて
GetWindowLongとGWL_STYLE使ってやってみ
- 39 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:36:08 ]
- >>38
有難う。それも試してみたけど、サイズは変わらず どうやら640x480にならないようです 多少誤差ありでも、決め打ちしてみます
- 40 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:38:35 ]
- どういうスタイルを設定して、どれくらい差があるのかが気になる
- 41 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:51:55 ]
- ウィンドウの幅と高さにrect.rightとrect.bottomをそのまま渡しちゃってるとか、
ツールバーのサイズを考慮に入れてないとか・・・。
- 42 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:52:37 ]
- >>40
WS_SYSMENU | WS_CAPTIONの二つで 640x476になります OSはXPでシェルはLiteStepに変えています
- 43 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:54:37 ]
- >>41
サイズを指定する時はきちんと right - left bottom - top としています ツールバー等は無しで、只単純なウィンドウです 連投すみません
- 44 名前:22 [2009/08/03(月) 22:56:22 ]
- >>28のやり方でうまく出来ました。ありがとうございます
- 45 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:09:48 ]
- >>42
LiteStepが原因だろ、どうみても。 非公式ツールで変更しまくっている環境は流石にスレ違いだ。 LiteStepのスレで訊けよ。
- 46 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:13:44 ]
- そうかなあ。自分は42のやり方が悪いのだとまだ思っている。
- 47 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:31:23 ]
- LiteStepってちゃんとSystemMetricを利用して動いてるんだろうか
利用してるならAdjustWindowsRectも動作するはずだが
- 48 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:16:16 ]
- >>46
CreateWindowした後に SetRect( &rect, 0, 0, 640, 480 ); AdjustWindowRect( &rect, GetWindowLong( hWnd, GWL_STYLE ), FALSE ); SetWindowPos( hWnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE ); としています ずっとLiteStepを使ってきて、他の環境でもあまり問題無かったので意識してませんでしたが もし、上記やり方に問題が無ければ、LiteStepに原因があるかもしれないですね
- 49 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:32:30 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 50 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:08:02 ]
- 互換性でトンデモ仕様になっていく
- 51 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:46:46 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 52 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:53:32 ]
- どこが便乗なんだか
- 53 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 10:21:03 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 54 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:30:08 ]
- 互換性でトンデモ仕様になっていく
- 55 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:32:37 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 56 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:13:41 ]
- 何だこの流れ
- 57 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:20:36 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 58 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:27:42 ]
- 互換性でトンデモ仕様になっていく
- 59 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:00 ]
- だって互換性取れってうるさいんだもん
- 60 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:47 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 61 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:34:46 ]
- 便乗質問なんだが
Aero有効にしてるとタブとかツールバーとかトンデモ仕様になっていくのが不便だなあ なんか互換性の為らしいが・・・
- 62 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:36:40 ]
- >>61
えーと、どのへんが質問?
- 63 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:41:04 ]
- 知らないならレスしないで下さい。ウザイだけです。
- 64 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:12:30 ]
- だって互換性取れってうるさいんだもん
- 65 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:23 ]
- dgtu
- 66 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:35 ]
- 互換性でトンデモ仕様になっていく
- 67 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:15:05 ]
- いつまで続けるのこれ
- 68 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:49:16 ]
- 15498回
- 69 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 18:50:38 ]
- 夏休みが終わるまで続けるよ!
- 70 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:04:23 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 71 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:22 ]
- Aeroを無効にすればよい
- 72 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:23 ]
- dgtu
- 73 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:06:40 ]
- >>67
涼宮さんが満足する何かがわかるまでです。
- 74 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:07:32 ]
- ネバーエンディング
ム板的にはwhile(true)
- 75 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:10:34 ]
- break;
- 76 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:11:40 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 77 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:13:16 ]
- >>74
警告:条件式が定数です
- 78 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:14:51 ]
- volatile boolean flag;
- 79 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:40 ]
- 何の言語だよ
- 80 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:43 ]
- APIと関係ない話すんな
- 81 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:20:36 ]
- A Pocotan Inshitao
- 82 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:21:03 ]
- Aero有効にしていてGetWindowRect等で正確なサイズを得る方法を教えろ
- 83 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:26:17 ]
- ThemeAPIで頑張って計測、とかいう話じゃなかったっけ?
>>76 タブとかツールバーはクライアント領域の載せているものだから、 その上で空き領域を一定サイズ確保したいというなら当然必要。
- 84 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:59:08 ]
- >>ThemeAPIで頑張って計測
ハズレ
- 85 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:04:29 ]
- うそつくなよw
- 86 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:15:48 ]
- 知らないならレスしないで下さい。ウザイだけです。
- 87 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:45:04 ]
- msdn.microsoft.com/ja-jp/library/ms633519(en-us,VS.85,loband).aspx
- 88 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:50:14 ]
- VistaとXPではステータスバーの大きさが異なるんだけど
ステータスバーの大きさって変えられない? 自分でステータスバーもどきのウィンドウ作った方が速いかな?
- 89 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:55:00 ]
- デバッグビルドでLoadLibraryA("MSVCP90.dll")実行するとNULLが返ってくるんだけど、MSってバカなの?何なの?
- 90 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:58:05 ]
- >>88
SB_SETMINHEIGHTとか
- 91 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:40:01 ]
- >>89
side-by-sideアセンブリ
- 92 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 23:21:42 ]
- CランタイムをLoadLibraryする方がバカ
- 93 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 04:12:25 ]
- ネットで公開されているAPIってサイドパーティ含めてどのくらいか?
把握している人はエロい
- 94 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 06:51:42 ]
- は?
- 95 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 08:14:32 ]
- www.google.com/search?q=api
Google先生は把握してますが何か?
- 96 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:58:10 ]
- 質問です。
ウインドウメッセージを解決するProcの中で、SendMessageをすると、即座に処理される理由がいまいちわかりません。 MessageBoxでも似たような疑問を持った際は「勝手にメッセージ解決ループを作って裏でまわしてくれるんだよ」 といった説明を受けて納得したのですが、今回の件も同様なのでしょうか?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:02:50 ]
- >1 つまたは複数のウィンドウへ、指定されたメッセージを送信します。
>この関数は、指定されたウィンドウのウィンドウプロシージャを呼び出し、 >そのウィンドウプロシージャがメッセージを処理し終わった後で、制御を返します。
- 98 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:03:19 ]
- SendMessageが発行したメッセージはちゃんとOSのメッセージキューに入れられて、
該当するウインドウのメッセージループに通知され、 その後メッセージハンドラがコールバックされて 対応するコード上で処理されてるから、即座じゃなくない? MessageBoxの方も同様で、メッセージボックスがクリエイトされた後、 OS経由でメッセージがMessageBoxのメッセージハンドラに通知されてるよ。 Spy++みるとメッセージの応酬が見られるし。
- 99 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:16:14 ]
- 96です。
>>97-98 お返事ありがとうございます。 MSDNの説明を妙に勘違いしていたようです。 ::SendMessageはウィンドウプロシージャを直接呼び出すのですね。 実は困っていたのは case WM_CLOSE: の中で別のワーカースレッドに停止命令を出し、ワーカースレッドの停止を確認するまでSleepする。 という処理でした。 このとき、ワーカースレッド側でSendMessageされると、フリーズしてしまいます。 これは、メインスレッドがプロシージャで処理中(Sleep中)なのに、他スレッドがプロシージャを呼ぼうとしたので、排他制御された。 ということで合っているでしょうか?
- 100 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:36:52 ]
- >>99
そんな感じ。 ttp://msdn.microsoft.com/en-us/library/ms644927.aspx のMessage Deadlocksに詳しく書いてある。
- 101 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:48:44 ]
- >>100
ありがとうございます。 ・・・そのページ、日本語版のMSDNでは省かれてますね・・・
- 102 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:50:16 ]
- メッセージプロシージャを待ちたくないのなら、PostMessageを使ってみては
- 103 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:51:04 ]
- メッセージプロシージャってなんだ・・・ウィンドウプロシージャでした
- 104 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:58:57 ]
- >>102
色々アドバイスありがとうございます。 タイトルバーの書き換えが目的のため、ポインタ渡しが必要となり、PostMessageでは行えませんでした。 (SetWindowTextは、内部でSendMesssageを呼んでるっぽいですね) ついでに、報告。 >>100の文書のおかげで SendMessageTimeout なる関数を知りました。 タイムアウト値を10msくらいにしておけば、デッドロックが起こらずに済みますね。 こんな関数知りませんでしたわ
- 105 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:17:49 ]
- >>91
winsxsはside by sideで使われてたのか、MSめ・・・
- 106 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 20:27:52 ]
- >>104
UIの更新はUIスレッドにやらせるのが基本。 文字列は別の場所に置いておいて、 PostMessageでタイトルバーの更新を指示、といった感じで。
- 107 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:28:29 ]
- >>106
いちいちクリティカルセクション使って、文字列渡し合うのか?
- 108 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:42:38 ]
- ロストを許すことなく、きっちり伝えようとするべくクリティカルセクションの出し入れすると
結局 SendMessage のブロッキングと同じでデッドロックにならない?
- 109 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:28:21 ]
- C言語にfopenという関数があるのに
windows APIにもCreateFileという関数があって どちらを使えばいいのかわかりません。 CreateFileのほうが細かく設定できるという認識だけで よろしいのでしょうか?
- 110 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:40:39 ]
- ファイルハンドル取得のためには必須なんじゃないの?
勉強中の身だからなんとも言えんけど、 プロに任せれば正しい回答が来るはず
|

|