关于WM_SETFOCUS的问题?请高人指点。
我想问一下,我设置了一个int的静态变量,然后在程序接收到WM_SETFOCUS消息时让这个变量加一,还设置了一个WM_LBUTTONDOWN的消息,每次单击鼠标左键时,就显示,当前所点的坐标和这个num值。为什么这个num增加到10时,就自动清零了?在点鼠标的时候。又从0开始记数。一直是这样。这是为什么??难道程序接收了十次WM_SETFOCUS就自动清零了?还有在什么时候能接收到这个WM_SETFOCUS消息。请高手指点。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nShowCmd)
{
static TCHAR classname[] = TEXT("I love you");
WNDCLASS wnd;
wnd.style = CS_HREDRAW | CS_VREDRAW;
wnd.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
wnd.cbWndExtra = 0;
wnd.cbClsExtra = 0;
wnd.hInstance = hInstance;
wnd.lpfnWndProc = WndProc;
wnd.lpszMenuName = NULL;
wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wnd.lpszClassName = classname;
RegisterClass(&wnd);
HWND hwnd = CreateWindowW(classname,TEXT("LINA"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static TCHAR test[10];
static HWND chwnd;
static int cxChar,cyChar;
static int num = 0;
switch(message)
{
case WM_CREATE:
cxChar = LOWORD(GetDialogBaseUnits());
cyChar = HIWORD(GetDialogBaseUnits());
chwnd = CreateWindow(TEXT("button"),TEXT("I LOVE YOU"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
100,100,20*cxChar,2*cyChar,hwnd,(HMENU)1,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
return 0;
case WM_SETFOCUS:
SetFocus(chwnd);
num++;
return 0;
case WM_LBUTTONDOWN:
wsprintf(test,TEXT("%d,%d,%d"),LOWORD(lParam),HIWORD(lParam),num);
MessageBox(hwnd,test,test,MB_OK);
return 0;
case WM_CHAR:
wsprintf(test,TEXT("%i,%c,%d"),hwnd,TCHAR(wParam),num);
MessageBox(hwnd,test,test,MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}