我有一個窗口具有滾動條樣式,因此它有自己的滾動條。當鼠標懸停在滾動條上時,我希望發生某種情況,但處理窗口的鼠標移動並不能解決問題。我如何處理滾動條的mousemove事件?處理窗口的滾動條的鼠標移動(WinAPI)
謝謝
我有一個窗口具有滾動條樣式,因此它有自己的滾動條。當鼠標懸停在滾動條上時,我希望發生某種情況,但處理窗口的鼠標移動並不能解決問題。我如何處理滾動條的mousemove事件?處理窗口的滾動條的鼠標移動(WinAPI)
謝謝
在Win32 API中,滾動條沒有'mousemove事件'。您從垂直滾動條獲得的唯一消息是WM_VSCROLL
。
如果你想讓你的滾動條有特殊的行爲,你必須繼承它們並覆蓋Mouse Messages的處理。由於它在MSDN說(Scroll Bar Controls in Win32):
但是,如果你想改變 標準的外觀或功能 滾動條,你可以子類 你的窗口或 上的滾動條創建獨立控制。
您可以通過搜索'子類滾動條'找到代碼示例。
編輯
我試圖做的是使用邊緣滾動條的 讓我的子窗口 可調整大小,這可能嗎?
滾動條不是這樣做的。相反,在滾動條的右側(和高度)定義一個窗口,寬度爲幾個像素。設置光標爲窗口是一個「調整大小」光標(這樣用戶就會知道單擊並拖動):
當這個窗口得到一個WM_LBUTTONDOWN消息,就應該開始跟蹤鼠標,調整並在鼠標移動時重新繪製您的控件。當窗口獲得WM_LBUTTONUP時,它應該停止跟蹤並將控件保留爲新的大小。
Here's some code這會讓你開始使用鼠標跟蹤功能。這是繪製線條的過程,但過程很相似。
我想要做的是使用滾動條的邊緣,使我的子窗口可調整大小,這可能嗎? – jmasterx 2010-05-17 02:56:27
檢查截取WM_NCMOUSEMOVE是否有幫助。
的WM_NCMOUSEMOVE消息發佈 到窗口時,光標在 窗口的非工作區內移動 。此消息發佈到包含光標的 窗口。如果一個 窗口捕獲了鼠標,則不會發送此消息 。
基本上我希望它的行爲就像當你有WS_SIZEBOX但只有底部和右側,而不是頂部和左側.. – jmasterx 2010-05-17 03:04:43