我正在使用C ++和DirectD3D9绘制菜单。 我希望用鼠标浏览菜单。 我可以获得鼠标位置,但是,检查左键是否被点击是非常棘手的。 我可以检查它是否被按下,但没有点击。
bool LBUTTONDOWN = false;
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION && (wParam == WM_LBUTTONUP || wParam == WM_LBUTTONDOWN)) {
LBUTTONDOWN = wParam == WM_LBUTTONDOWN;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
如何添加支票以查看我是否点击了左键?
答案 0 :(得分:0)
LowLevelMouseProc没有DoubleClick消息。但是,我想你可以解决这个问题:
记录LBUTTONDOWN和LBUTTONUP之间的时间间隔,然后检查它是否足够快成为点击事件。并且因为鼠标动作非常快,所以最好为鼠标捕获设置一个计时器。
对于鼠标捕获,您仍然可以调用LowLevelMouseProc。但是,DirectInput更便于处理鼠标移动。
在DirectX SDK示例中,有一个名为“CustomFormat”的DirectInput示例。它显示了如何设置定时器以捕获鼠标输入。
我希望这会有所帮助。
答案 1 :(得分:0)
你需要使用计时技巧。创建一个名为' nTime'的变量, 当LButton启动时为它设置零。使用' + ='增加变量值LButton关闭时的运算符,并根据类似的值检查变量 -
bool LBUTTONDOWN = false;
int nTime = 0;
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION && (wParam == WM_LBUTTONUP || wParam == WM_LBUTTONDOWN))
{
LBUTTONDOWN = wParam == WM_LBUTTONDOWN;
if ( LBUTTONDOWN )
{
nTime += 1;
if ( nTime > 1000 /*( this value depends on you )*/ )
{
nTime = 0;
// Here is your hold event code.
}
}
else
nTime = 0;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}