いつもお世話になります。
古い VC++6.0を使ってまして
Windowプログラムのメインループのところで
メッセージに対してメッセージBOXを反応させようとしても
反応しません。下記のようにいろいろなパターンでためしましたが
うまくいかないです。どうしてでしょうか?
PreTranslateMessage(&message)を使うとよいとの情報がありますが
それを使うのでしょうか。
どうかご教授お願いします。
C++
1while( h_Run) 2{ 3 MSG message; 4 5 if (::GetMessage(&message, NULL, 0, 0)) 6 { 7 8 if((UINT)message.wParam==WM_LBUTTONUP) 9 { 10 AfxMessageBox("左クリック1"); 11 } 12 if((UINT)message.message==WM_LBUTTONUP) 13 { 14 AfxMessageBox("左クリック2"); 15 } 16 17 if((UINT)message.lParam==WM_LBUTTONUP) 18 { 19 AfxMessageBox("左クリック3"); 20 } 21 22 if(message.wParam==WM_LBUTTONUP) 23 { 24 AfxMessageBox("左クリック4"); 25 } 26 if(message.message==WM_LBUTTONUP) 27 { 28 AfxMessageBox("左クリック5"); 29 } 30 31 if(message.lParam==WM_LBUTTONUP) 32 { 33 AfxMessageBox("左クリック6"); 34 } 35 36 //PreTranslateMessage(&message); //メッセージの変換前処理 37 ::TranslateMessage(&message); //メッセージの変換 38 ::DispatchMessage (&message); //メッセージの分配=コールバックの実行 39 40 if((UINT)message.wParam==WM_LBUTTONUP) 41 { 42 AfxMessageBox("左クリック8"); 43 } 44 if((UINT)message.message==WM_LBUTTONUP) 45 { 46 AfxMessageBox("左クリック9"); 47 } 48 49 if((UINT)message.lParam==WM_LBUTTONUP) 50 { 51 AfxMessageBox("左クリック10"); 52 } 53 54 if(message.wParam==WM_LBUTTONUP) 55 { 56 AfxMessageBox("左クリック11"); 57 } 58 if(message.message==WM_LBUTTONUP) 59 { 60 AfxMessageBox("左クリック12"); 61 } 62 63 if(message.lParam==WM_LBUTTONUP) 64 { 65 AfxMessageBox("左クリック13"); 66 } 67 68 } 69 70 } 71 return FALSE; 72 73}
AfxMessageBoxが出てきていると言うことはMFCをお使いでしょうか。そうであると事情は複雑になります。
Microsoft Visual Studio 6.0 を使っています。
いえ、Visual Studio 6.0 でWindowsプログラムを造るときに、Win32APIだけを使うようにしているのか、それともMFCを使っているのか、と言う意味です。
MFCを使っているかわかりませんが、 dllは使ってます。
サンプルなのでどう判断したらよいのでしょうか
StdAfx.hをみるとafxwin.h などが書かれています。
ではMFCを使っています。自分で造ったメッセージループは意図通り動作しません。このプログラムの目的はなんでしょうか。マウスクリックでメッセージボックスを出すことですか。また、残念ですがVisual Studio 6.0 をお使いと言うのもちょっとアドバイスを得づらいと思います。
目的は、「マウスクリックでメッセージボックスを出すことです」Visual Studio 6.0だとおっしゃるとおり得ずらいと思います
回答しましたので、そちらをご覧ください。
ありがとうございます。確認できました。すみませんPreTranslateMessage(&message)で実現することは可能でしょうか?while( h_Run)のなかでです。
PreTranslateMessage()の目的が違うのでは?主にキー入力に影響するAPIだった気がします。 使うことで今と挙動は変わるかもしれませんが、いずれにせよ、もともと提示されたコードに 疑問がありますので、すみませんが私の方で動作を保証することはできないです。
ああ、おっしゃりたい意味が分かりました。MFCのCWnd::PreTranslateMessage()でオーバーライドして使えば目的を実現できるか、と言う意味ですね。だとしてもちょっと使い方が違う気がします。