簡體   English   中英

強制 WM_NCHITTEST 返回 HTCAPTION,使用自定義光標..?

[英]Forcing WM_NCHITTEST to return HTCAPTION, with a custom cursor..?

我創建了一個無邊框窗口,它使用wndProc()函數強制WM_NCHITTEST case返回HTCAPTION; ,它允許用戶拖動窗口,無論其光標位於何處。
問題是我已經設置了一個自定義光標,但是使用上述方法,光標總是設置回IDC_ARROW
我該如何解決?

編輯:我也試過在WM_NCHITTEST case使用SetCursor() ,但它沒有用。

您可以使用 WM_SETCURSOR 消息來覆蓋光標。 lParam 的 LOWORD 表示命中測試代碼,即您使用 WM_NCHITTEST 處理程序更改的代碼。 這工作得很好:

static HCURSOR CustomCursor;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_NCHITTEST: {
        LRESULT result = DefWindowProc(hWnd, message, wParam, lParam);
        if (result == HTCLIENT) result = HTCAPTION;             
        return result;
    }
    case WM_SETCURSOR: 
        if (LOWORD(lParam) == HTCAPTION) {
            SetCursor(CustomCursor);
            return TRUE;
        }
        return DefWindowProc(hWnd, message, wParam, lParam);
    // etc...
}

在您的窗口初始化中初始化 CustomCursor。 說:

CustomCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_SIZEALL));

除了SetCursorWM_NCHITTEST嘗試SetCursorWM_SETCURSOR了。

通常設置游標的正確方法是響應WM_SETCURSOR消息。 (另見http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspx

但是,如果您在捕獲鼠標的位置處理鼠標拖動,您的窗口將不會收到WM_SETCURSOR消息,我認為唯一的替代方法是在這種情況下在WM_MOUSEMOVE處理程序中設置光標。

暫無
暫無

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

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