Visual C++——无法响应WM_LBUTTONDBLCLK消息(鼠标左键双击)问题解决方案
問題描述
在建立win32窗口項目的時候,發現窗口無法響應WM_LBUTTONDBLCLK(鼠標左鍵雙擊)消息。
MSDN
https://docs.microsoft.com/en-us/previous-versions/aa926302(v=msdn.10)?
問題分析
原因一:?
Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the OS generates when the user presses, releases, and again presses the left mouse button within the time limit for double-clicks for the system.?
翻譯:只有具有CS_DBLCLKS樣式的窗口才能接收WM_LBUTTONDBLCLK消息,該消息是OS在用戶按下,釋放并再次按下鼠標左鍵的時間內在系統雙擊時由OS生成的。
原因二:
由于鼠標雙擊的WM_LBUTTONDBLCLK消息伴隨WM_LBUTTONDOWN消息的發生,導致鼠標雙擊事件,總是被之前的WM_LBUTTONDOWN消息截斷,WM_LBUTTONDBLCLK消息觸發不了。?
解決方案
對于原因一:?
修改對應的WNDCLASS的style成員加上CS_DBLCLKS風格即可。
?
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;對于原因二:
調整消息處理函數的消息處理順序。?
問題擴展
CS幾種風格記錄:
CS_HREDRAW:當窗體的寬度發生變化時,就重新繪制窗口。
CS_VREDRAW:當窗體的高度發生變化時,就重新繪制窗口。
CS_DBLCLKS:能接收用戶在窗體總的雙擊事件。
CS_OWNDC:為該類中的每一個窗口分配各自獨立的設備環境。
CS_NOCLOSE:禁用系統菜單中的“關閉”命令。
CS_CLASSDC:為該窗口類的各窗口分配一個共享的設備環境。
CS_PARENTDC:指定子窗口繼承其父窗口的設備環境。、
CS_SAVEBITS:把被窗口遮掩的屏幕圖像部分作為位圖保存起來。當該窗口被移動時,windows使用被保存的位圖來重建屏幕圖像。
雙擊鼠標左鍵實際上會生成以下四個消息系列:
參考文章
https://blog.csdn.net/u011296732/article/details/51669181
https://blog.csdn.net/evanlinux/article/details/6598659
總結
以上是生活随笔為你收集整理的Visual C++——无法响应WM_LBUTTONDBLCLK消息(鼠标左键双击)问题解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual C++——加速键
- 下一篇: Visual C++——LoadBitm