我有一個正常的Windows GUI應用程序(使用API,而不是MFC),當我移動鼠標開啓和關閉應用程序和鼠標改變樣式(如當你移動它邊界,它變成一個調整大小的箭頭等),但有時它會「粘住」這種風格,這樣我就可以移動鼠標並保持調整大小的箭頭或其他任何東西,即使它離開了窗口邊界。如果我將它移到另一個控件上,它會自行修復。光標樣式不保持更新
這只是一個不便,但它看起來不專業,我想解決它。我怎樣才能使它始終保持在最新狀態?
我有一個正常的Windows GUI應用程序(使用API,而不是MFC),當我移動鼠標開啓和關閉應用程序和鼠標改變樣式(如當你移動它邊界,它變成一個調整大小的箭頭等),但有時它會「粘住」這種風格,這樣我就可以移動鼠標並保持調整大小的箭頭或其他任何東西,即使它離開了窗口邊界。如果我將它移到另一個控件上,它會自行修復。光標樣式不保持更新
這只是一個不便,但它看起來不專業,我想解決它。我怎樣才能使它始終保持在最新狀態?
當您註冊窗口類時,請設置有效的光標句柄。見WNDCLASSEX::hCursor
。使用LoadCursor
加載有效的遊標。 Like,
WNDCLASSEX wc = {0};
...
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
...
RegisterClassEx(&wc);
tenfour的回答是正確的。這裏有更多的背景。
當鼠標在一個窗口內移動並且沒有被捕獲時,該窗口將會得到一個WM_SETCURSOR
消息。消息名稱可能有點混亂。它基本上是窗口設置光標的機會,而不是設置光標的指令。
窗口可以通過調用SetCursor
來處理此消息並返回。
也可以通過將消息傳遞給DefWindowProc
來獲得默認行爲。默認行爲是查看窗口WNDCLASS
中的hCursor
字段。這就是爲什麼Tenfour的答案有效。
(它其實有點複雜多了,因爲DefWindowProc
首先對父窗口有機會介入。)
如果你想要做的事動態,比如選擇的光標取決於一些狀態變量,那麼您應該必須處理WM_SETCURSOR
,以便使用任何適當的光標調用SetCursor
,然後返回TRUE
。詳情請參閱SetCursor
。
+1啓蒙信息。 – 2010-12-23 03:23:21
這很快,謝謝。 – 2010-12-21 20:25:50