2010-05-17 93 views
0

我有一個窗口具有滾動條樣式,因此它有自己的滾動條。當鼠標懸停在滾動條上時,我希望發生某種情況,但處理窗口的鼠標移動並不能解決問題。我如何處理滾動條的mousemove事件?處理窗口的滾動條的鼠標移動(WinAPI)

謝謝

+0

基本上我希望它的行爲就像當你有WS_SIZEBOX但只有底部和右側,而不是頂部和左側.. – jmasterx 2010-05-17 03:04:43

回答

1

在Win32 API中,滾動條沒有'mousemove事件'。您從垂直滾動條獲得的唯一消息是WM_VSCROLL

如果你想讓你的滾動條有特殊的行爲,你必須繼承它們並覆蓋Mouse Messages的處理。由於它在MSDN說(Scroll Bar Controls in Win32):

但是,如果你想改變 標準的外觀或功能 滾動條,你可以子類 你的窗口或 上的滾動條創建獨立控制。

您可以通過搜索'子類滾動條'找到代碼示例。

編輯

我試圖做的是使用邊緣滾動條的 讓我的子窗口 可調整大小,這可能嗎?

滾動條不是這樣做的。相反,在滾動條的右側(和高度)定義一個窗口,寬度爲幾個像素。設置光標爲窗口是一個「調整大小」光標(這樣用戶就會知道單擊並拖動):

resize cursors

當這個窗口得到一個WM_LBUTTONDOWN消息,就應該開始跟蹤鼠標,調整並在鼠標移動時重新繪製您的控件。當窗口獲得WM_LBUTTONUP時,它應該停止跟蹤並將控件保留爲新的大小。

Here's some code這會讓你開始使用鼠標跟蹤功能。這是繪製線條的過程,但過程很相似。

+0

我想要做的是使用滾動條的邊緣,使我的子窗口可調整大小,這可能嗎? – jmasterx 2010-05-17 02:56:27

0

檢查截取WM_NCMOUSEMOVE是否有幫助。

的WM_NCMOUSEMOVE消息發佈 到窗口時,光標在 窗口的非工作區內移動 。此消息發佈到包含光標的 窗口。如果一個 窗口捕獲了鼠標,則不會發送此消息 。