注意如果要使用双击事件,需要在注册类中使用CS_DBLCLKS。下面是一个例子。
#include <windows.h>
//typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
int(*Pmyf)(int a, int b);
LRESULT CALLBACK MywinPorc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
wchar_t szName[] = L"Ty";
WNDCLASS wnclass;
wnclass.cbClsExtra = NULL;
wnclass.cbWndExtra = NULL;
wnclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wnclass.hCursor = LoadCursor(hInstance, IDC_ARROW);
wnclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wnclass.hInstance = hInstance;
wnclass.lpszClassName = szName;
wnclass.lpszMenuName = NULL;
//注意:如果需要窗口接收双击事件,一定要使用CS_DBLCLKS
wnclass.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wnclass.lpfnWndProc = MywinPorc;
//1.注册窗口
RegisterClass(&wnclass);
//2.创建窗口
HWND hwnd = CreateWindow(szName, L"Ty", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 600, 400, NULL, NULL, hInstance, 0);
//3.显示窗口
ShowWindow(hwnd, SW_SHOW);
//4.更新窗口
UpdateWindow(hwnd);
//5.消息循环
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
//6.翻译消息
TranslateMessage(&msg);
//7.分发消息
DispatchMessage(&msg);
}
return 1;
}
LRESULT CALLBACK MywinPorc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
{
int x = LOWORD(lparam);
int y = HIWORD(lparam);
wchar_t str[24];
wsprintf(str, L"(%d,%d)\n", x, y);
OutputDebugString(str);
}
break;
case WM_LBUTTONDBLCLK:
{
OutputDebugString(L"双击了鼠标【左】键\n");
return 0;
}
case WM_RBUTTONDBLCLK:
{
OutputDebugString(L"双击了鼠标【右】键\n");
return 0;
}
default:
break;
}
return DefWindowProc(hwnd, message, wparam, lparam);
}
结果:
下面是一个测试,部分代码如下:
case WM_KEYDOWN:
{
wchar_t str[24] = { 0 };
wsprintf(str, L"键盘按下:%X,%c\n", wparam, wparam);
OutputDebugString(str);
return 0;
}
break;
case WM_CHAR:
{
wchar_t str[24] = { 0 };
wsprintf(str, L"字符信息:%X,%c\n", wparam, wparam);
OutputDebugString(str);
return 0;
}
break;
case WM_KEYUP:
{
wchar_t str[24] = { 0 };
wsprintf(str, L"键盘弹起:%X,%c\n", wparam, wparam);
OutputDebugString(str);
return 0;
}
结果:
CapsLock没有打开的情况:
CapsLock打开的情况: