2010-12-21 66 views
3

我有一個正常的Windows GUI應用程序(使用API​​,而不是MFC),當我移動鼠標開啓和關閉應用程序和鼠標改變樣式(如當你移動它邊界,它變成一個調整大小的箭頭等),但有時它會「粘住」這種風格,這樣我就可以移動鼠標並保持調整大小的箭頭或其他任何東西,即使它離開了窗口邊界。如果我將它移到另一個控件上,它會自行修復。光標樣式不保持更新

這只是一個不便,但它看起來不專業,我想解決它。我怎樣才能使它始終保持在最新狀態?

回答

7

當您註冊窗口類時,請設置有效的光標句柄。見WNDCLASSEX::hCursor。使用LoadCursor加載有效的遊標。 Like,

WNDCLASSEX wc = {0}; 
... 
wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
... 
RegisterClassEx(&wc); 
+0

這很快,謝謝。 – 2010-12-21 20:25:50

4

tenfour的回答是正確的。這裏有更多的背景。

當鼠標在一個窗口內移動並且沒有被捕獲時,該窗口將會得到一個WM_SETCURSOR消息。消息名稱可能有點混亂。它基本上是窗口設置光標的機會,而不是設置光標的指令。

窗口可以通過調用SetCursor來處理此消息並返回。

也可以通過將消息傳遞給DefWindowProc來獲得默認行爲。默認行爲是查看窗口WNDCLASS中的hCursor字段。這就是爲什麼Tenfour的答案有效。

(它其實有點複雜多了,因爲DefWindowProc首先對父窗口有機會介入。)

如果你想要做的事動態,比如選擇的光標取決於一些狀態變量,那麼您應該必須處理WM_SETCURSOR,以便使用任何適當的光標調用SetCursor,然後返回TRUE。詳情請參閱SetCursor

+0

+1啓蒙信息。 – 2010-12-23 03:23:21