win32鼠标事件,没单击但是自动发出WM_LBUTTONDOWN,求解释
win32鼠标事件,没有单击但是自动发出WM_LBUTTONDOWN,求解释
我在做鼠标事件的测试时,没有单击窗口,但是用于测试的控制台却显示有了一个WM_LBUTTONDOWN信息,
当我单击后却又多出了一个WM_LBUTTONDOWN信息,求大神解释原因,小弟不胜感谢。
代码如下:
我在做鼠标事件的测试时,没有单击窗口,但是用于测试的控制台却显示有了一个WM_LBUTTONDOWN信息,
当我单击后却又多出了一个WM_LBUTTONDOWN信息,求大神解释原因,小弟不胜感谢。
代码如下:
// WinMouse.cpp : Defines the entry point for the application.
//
#include <windows.h>
#include <stdio.h>
HINSTANCE g_hInst = NULL;
HANDLE g_hStdOut = NULL;
int g_nXpos = 0;
int g_nYpos = 0;
int g_nXupperLeftCorner = 0;
int g_nYupperLeftCorner = 0;
int g_nXdownrightCorner = 0;
int g_nYdownrightCorner = 0;
void PrintLog(LPSTR pszLog)
{
WriteConsole(g_hStdOut,pszLog,strlen(pszLog),NULL,NULL);
}
void OnPaint(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
// CHAR szText[] = "Hello Paint";
PAINTSTRUCT ps = {0};
HDC hDc = BeginPaint(hWnd,&ps);
// TextOut(hDc,g_nXpos,g_nYpos,szText,strlen(szText));
// Rectangle(hDc,g_nXupperLeftCorner,g_nYupperLeftCorner,g_nXdownrightCorner,g_nYdownrightCorner);
EndPaint(hWnd,&ps);
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
CHAR szText[100] = {0};
switch (uMsg)
{
case WM_PAINT:
OnPaint(hWnd,uMsg,wParam,lParam);
case WM_LBUTTONDOWN:
{
PrintLog("WM_LBUTTONDOWN\n");
g_nXupperLeftCorner = LOWORD(lParam);
g_nYupperLeftCorner = HIWORD(lParam);
sprintf(szText,"x1:%d y1:%d\n",g_nXupperLeftCorner,g_nYupperLeftCorner);
PrintLog(szText);
// InvalidateRect(hWnd,NULL,TRUE);
// UpdateWindow(hWnd);
}
break;
case WM_LBUTTONUP:
{
PrintLog("WM_LBUTTONUP\n");
g_nXdownrightCorner = LOWORD(lParam);
g_nYdownrightCorner = HIWORD(lParam);
sprintf(szText,"x2:%d y2:%d\n",g_nXdownrightCorner,g_nYdownrightCorner);
PrintLog(szText);
InvalidateRect(hWnd,NULL,FALSE);
UpdateWindow(hWnd);
}
break;
case WM_RBUTTONUP:
PrintLog("WM_RBUTTONUP\n");
break;
case WM_RBUTTONDOWN:
PrintLog("WM_RBUTTONDOWN\n");
break;
case WM_MOUSEMOVE:
{
// int nX = LOWORD(lParam);
// int nY = HIWORD(lParam);
// if(wParam & MK_LBUTTON)
// {
// // g_nXpos = nX;
// // g_nYpos = nY;
// g_nXdownrightCorner = LOWORD(lParam);
// g_nYdownrightCorner = HIWORD(lParam);
// InvalidateRect(hWnd,NULL,TRUE);
// UpdateWindow(hWnd);
// }
// LPPOINT ptScreen = new POINT;
// ptScreen->x = nX;
// ptScreen->y = nY;
// ClientToScreen(hWnd,ptScreen);
// sprintf(szText,"x:%d(%d) y:%d(%d)",nX,ptScreen->x,nY,ptScreen->y);
// PrintLog(szText);
// PrintLog("WM_MOUSEMOVE\n");
// delete(ptScreen);
// if(wParam & MK_CONTROL)
// {
// PrintLog("WM_MOUSEMOVE: MK_CONTROL\n");
// }
// if(wParam & MK_LBUTTON)
// {
// PrintLog("WM_MOUSEMOVE: MK_LBUTTON\n");
// }
}
break;
case WM_DESTROY:
PostQuitMessage(0);
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL MyRegister(LPSTR pszClassName)
{
WNDCLASSEX wce = {0};
wce.cbSize = sizeof(wce);
wce.style = CS_VREDRAW|CS_HREDRAW;
wce.lpfnWndProc = WndProc;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hInstance = g_hInst;
wce.hIcon = NULL;
wce.hCursor = NULL;
wce.hbrBackground = HBRUSH(COLOR_BTNFACE);
wce.lpszMenuName = NULL;
wce.lpszClassName = pszClassName;
wce.hIconSm = NULL;
ATOM aTom = RegisterClassEx(&wce);
if(0 == aTom)
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd(LPSTR pszClassName)
{
HWND hWnd = CreateWindowEx(0,pszClassName,"MyWnd",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,
NULL,g_hInst,NULL);
return hWnd;
}
void DisplayWnd(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
void Message()
{
MSG msg = {0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
void NewConsole()
{
AllocConsole();
g_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)