按下 Ctrl + C 后,会发送 WM_COPY 消息。然而,在 Windows 中,Ctrl + C 也被用作“复制”命令。因此,为了兼容不同的应用程序,操作系统在发送 WM_COPY 消息时也同时发送了 char code 为 3 的 WM_CHAR 消息。
如果您需要区分 WM_COPY 和 WM_CHAR 消息,可以使用 GetKeyState 函数来检查 Ctrl 键是否按下。下面是一个简单的示例:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_KEYDOWN:
if(wParam == VK_CONTROL)
{
if(GetKeyState(VK_CONTROL) & 0x8000) // 检查 Ctrl 键是否按下
{
// 处理 Ctrl + C 操作
}
else
{
// 处理其他 Ctrl 操作
}
}
break;
case WM_COPY:
// 处理复制操作
break;
case WM_CHAR:
if(wParam == 3) // char code 为 3 表示 Ctrl + C
{
// 处理 Ctrl + C 操作
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
在上面的示例中,我们使用 GetKeyState 函数来检查 Ctrl 键是否按下,并分别处理 WM_KEYDOWN 和 WM_CHAR 消息。同时,我们也处理了 WM_COPY 消息以支持 Ctrl + C 复制操作。