|
分類:[C/C++]
環境
Windows Vista
VisualStuido 2010
以下のソースはボタンを左クリックすると終了するプログラムです。
(1)の場所にブレークを仕込んで左クリックするとブレークに引っかかるわけですが、
その後ボタンのUPを検出できず、プログラムが終了しません。
ウィンドウメッセージはキューに入っており、GetMessage()しない限りなくならないと考えると
そもそもUPのメッセージが発生していないと考えるのが正しいのでしょうか?
この辺の仕組みがデバッグの際どうなっているのかわからないので教えて頂けないでしょうか?
ちなみに、C#等でWindows Formsアプリを作ってボタンにDownとUpのイベントハンドラをくっつけて同様の実験を行った場合、
Upが引っかかります。
これは.NET Frameworkがなんかうまいことやってくれてるんでしょうか?
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
HWND hwnd;
MSG msg;
hwnd = CreateWindow(
TEXT("BUTTON") , TEXT("押す") ,
WS_CAPTION | WS_VISIBLE ,
100 , 100 , 200 , 200 , NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) return 0;
while (TRUE) {
int lup = 0;
int ldown = 0;
GetMessage(&msg , NULL , 0 , 0);
if (msg.message == WM_LBUTTONDOWN)
{
lup = 1; // (1)
}
else if(msg.message == WM_LBUTTONUP)
{
ldown = 1;
}
DispatchMessage(&msg);
if(ldown){
break;
}
}
return 0;
}
|