[英]Problem capturing mouse left button while using WM_NCHITTEST
case WM_NCHITTEST: {
LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam );
if ( hit == HTCLIENT ) {
hit = HTCAPTION;
SendNotifyMessageA( hWnd, WM_MOUSEMOVE, NULL, MAKELPARAM( LOWORD(lParam), HIWORD(lParam) ) );
pts.x = pts.y = 0;
ClientToScreen( hWnd, &pts );
SendNotifyMessageA( hWnd, WM_EXITSIZEMOVE, NULL,NULL );
return hit;
} } break;
case WM_NCLBUTTONDOWN: { LMB_Dyn[h2] = true; } break;
在嘗試通過單擊工作區(窗口中的任何位置)來移動窗口時,我正在使用此代碼。 這很好。 但是我在正確接收鼠標左鍵的狀態時遇到問題,盡管這種代碼有效,但問題是當我執行簡單的單擊而不是“單擊並移動”時, LMB_Dyn
變量(鼠標左鍵)會有一些延遲(不會立即收到我按下鼠標按鈕的通知。
使用WM_NCHITTEST
如何正確獲取鼠標左鍵的狀態?
錯誤: } } break;
應該讀為} return hit; }
} return hit; }
但是,這里還有一些更根本的事情。 WM_NCHITTEST
並非旨在那樣使用,而是可以使用當前鼠標位置以外的坐標來調用。 這意味着您的SendNotifyMessageA
可以發送垃圾。
我看到您有WM_NCLBUTTONDOWN
的處理程序。 也許這就是您所需要的。 或者,如果您嘗試使窗口在其上的任何位置均可拖動,則應該像這樣:
case WM_NCHITTEST: {
LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam );
if ( hit == HTCLIENT ) {
return HTCAPTION;
}
return hit;
}
WM_NCLBUTTONDOWN
和WM_NCLBUTTONUP
的文檔說它們立即啟動。 忘記InvalidateRect
調用非常容易,因此不必為您重新繪制屏幕,因此顯示速度很慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.