2013-01-03 35 views
1

我想隱藏光標在沒有邊框和標題欄的窗口客戶區域(這是簡單的opengl應用程序)。所以,功能WinApi,隱藏窗口客戶區域內的光標

ShowCursor(FALSE); 

是不適合的。經過一番搜索我發現這個解決方案:

//when create window class for application window 
    WNDCLASSEX WndClass; 
    //... 
    BYTE CursorMaskAND[] = { 0xFF }; 
    BYTE CursorMaskXOR[] = { 0x00 }; 
    WndClass.hCursor = CreateCursor(NULL, 0,0,1,1, CursorMaskAND, CursorMaskXOR); 

這是一個很好的方法來解決這個典型的任務?什麼方式是最好的?

回答

4

MSDN說您可以將WNDCLASSEX hCursor字段設置爲NULL,在這種情況下,您必須在窗口過程中顯式設置光標(這意味着處理WM_SETCURSOR消息)。例如:

if (Msg == WM_SETCURSOR && LOWORD(lParam) == HTCLIENT) 
{ 
    SetCursor(NULL); 

    return TRUE; 
} 

// Remainder of window procedure code 

檢查HTCLIENT確保光標只隱藏在客戶區,並且所述窗框和字幕將使用正確的遊標。

+0

看來這是更簡單和正確的代碼。 – And390

0

您使用的SetCursor()調用不需要布爾型 - 它需要一個HCURSOR。所以你調用SetCursor(NULL)這意味着「隱藏該光標」。我在過去的Windows上發現,這是視頻驅動程序的依賴,許多驅動程序不尊重它。處理這個問題的最一致的方法是在應用程序中創建一個透明的遊標資源,並從主窗口的WM_SETCURSOR消息中返回該遊標的句柄。

+0

你能給出一個信息來源或更多的細節? – And390

+0

檢查此鏈接http://msdn.microsoft.com/en-us/library/ms648391(v=VS.85).aspx加載遊標...除了那不知道你需要什麼? – HerrJoebob

+0

我的意思是你用SetCursor(NULL)表示的驅動程序行爲。我只是想知道它是如何實際的。 – And390