【发布时间】:2018-02-24 14:54:34
【问题描述】:
我想听一下鼠标左键是否被点击,还有一个字母,例如'a'
我已经这样做了,只用鼠标点击,我不能同时听 我尝试了以下代码,但对我不起作用
case WM_LBUTTONDOWN:
hdc = GetDC(hWnd);
if(GetKeyState('a') & 0x8000)
{
SetPixel(hdc, LOWORD(lp), HIWORD(lp), red);
}
x = LOWORD(lp);
y = HIWORD(lp);
for (int i = 1; i < 200; i++)
for (int j = 1; j < 200; j++)
SetPixel(hdc, x + i, y + j, red);
break;
如果我单击左按钮,它会绘制形状,但如果我在按下“a”时尝试这样做,它什么也不做
【问题讨论】:
-
'a'是0x61是VK_NUMPAD1。 A 键的虚拟键码是'A'。此外,您希望GetKeyState,而不是GetAsyncKeyState,以避免在用户按下 A,然后单击摩丝,然后在鼠标处理程序运行之前释放 A 时出现竞争情况。最后,您在绘图处理程序之外进行绘图,这意味着您的绘图代码将擦除您在此处绘制的任何内容。 -
使用完后,您应该使用
hdc调用ReleaseDC。 -
@RaymondChen 我试过 if(GetKeyState('A') & 0x8000) 但也没有用!而且我已经在使用 GetKeyState 而不是异步,除此之外我的程序也画得很好问题,没有什么是外部处理程序!
-
@VTT 我做了,但什么也没改变!
-
如果您将
a更改为A并将x = LOWORD(lp);之后的内容放入else块中,那么当您单击并按A时应该会看到点出现。现在你在一个点旁边画了一个巨大的正方形,所以可能很难发现它。需要ReleaseDC以防止资源泄漏。