こんにちは。
メニューの項目を選択したとき、WM_MENUSELECTが送られるじゃないですか。
そのタイミングでウインドウに文字を表示していますが。
逆にメニュー項目からフォーカスが外れた時
ウインドウの文字を消したいですが、何かメッセージがきますか?
できましたら処理法を教えてください。
case WM_MENUSELECT:
switch (LOWORD(wp)){
case 10:
a=1;
InvalidateRect( hwnd, NULL, TRUE);
break;
case 11:
a=2;
InvalidateRect( hwnd, NULL, TRUE);
break;
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
switch(a){
case 1:
TextOut(hdc,0,100,赤です,lstrlen(赤です));
break;
case 2:
TextOut(hdc,0,100,青です,lstrlen(青です));
break;
}
WM_KILLFOCUSでいいと思います。
回答どうもありがとうございます!
WM_KILLFOCUSはウインドウがフォーカスをなくした時送られますよね。
これはウインドウについたメニューなんですが、
ダイアログについたメニューだとダイアログプロシージャーで処理できそうな気がしま
すが、
ウインドウについたメニューの場合
ウインドウプロシージャでcase WM_KILLFOCUSすると、
親ウインドウがフォーカスをなくした時送られるきがしますが
どのようにすれば課題を克服できるんでしょうか?
よろしければお願いします。
メニューが閉じられるときにもWM_MENUSELECTが送られます。
パラメータの説明も書いてあるので調べてみてください。
ねぇねぇ。
WM_NCMOUSEMOVE って知っている?
これ使えないか。
前にランチャーソフトを作ったときにメニューバー領域の
クリックは WM_NCLBUTTONDOWN、WM_NCLBUTTONDBLCLK を使った。
そしてメニューバー領域のマウス移動を WM_NCMOUSEMOVE で
キャッチしてメッセージを消したりしていた。なので参考になるよね。
http://wisdom.sakura.ne.jp/system/winapi/win32/win42.html
回答ありがとうございます!
メニューを閉じるとWM_MENUSELECTがくるみたいですね。
できれば 項目が選択されている時 背景がブルーになる、
マウスがはずれると元の色に戻る、しかしメニューはとじられてない
このタイミング処理したかったですが、
上記のやり方でもいけそうです。
WM_NCMOUSEMOVE はおおと思いました!
座標はスクリーン座標ですね。
メニューをクリックすると項目がドロップダウンして
クライアント領域にかぶってきますが大丈夫なんですかね。
すごくよさそうなんですが自分には難しそうです。
皆さんありがとうございました!
とりあえず解決とします。
WM_EXITMENULOOPというのがあります。
これは、使えないですか。
回答どうもありがとうございます!
ネットで調べると関係があるようですね。
サンプルがなかなか見つかりませんが。
いろいろ調べてみます。
どうもありがとうございました!