簡體   English   中英

使用WM_NCHITTEST時捕捉鼠標左鍵問題

[英]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_NCLBUTTONDOWNWM_NCLBUTTONUP的文檔說它們立即啟動。 忘記InvalidateRect調用非常容易,因此不必為您重新繪制屏幕,​​因此顯示速度很慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM