现在,我正在开发应用程序以重置窗口的位置。 需要注意的一点是,我使用全局鼠标钩来监听桌面鼠标事件。 Global Mouse钩子运行良好。 我的问题是SetWindowPos()方法工作奇怪。 以下是我的代码:
case WM_LBUTTONUP:
mouselbut_clicked = false;
if (mousewnd_drag)
{
TRACE("mouse - lbutton release\n");
if ( window_moved )
{
::SetWindowPos(hWnd, 0, 0, 0, 500, 500, SWP_ASYNCWINDOWPOS | SWP_NOZORDER);
window_moved = false;
}
}
break;
当我构建应用程序时,窗口会进入桌面的左上角,但突然之间,它会回到原来的位置。
您是否愿意帮助我解决此问题?
答案 0 :(得分:0)
移动/调整窗口大小会导致DefWindowProc
执行内部移动或大小调整模式循环。在操作完成之前,控件不会返回到应用程序,并且没有记录它的确切行为和消息处理。
您是否尝试在CallNextHookEx
之前致电SetWindowPos
?
作为一个黑客,您可以尝试将您的呼叫延迟到SetWindowPos
,直到您的钩子返回后(向您自己发送消息或使用工作线程)。
你也可以尝试使用不同的钩子来捕捉移动操作的结束: