Visual C++——无法响应WM_LBUTTONDBLCLK消息(鼠标左键双击)问题解决方案
問(wèn)題描述
在建立win32窗口項(xiàng)目的時(shí)候,發(fā)現(xiàn)窗口無(wú)法響應(yīng)WM_LBUTTONDBLCLK(鼠標(biāo)左鍵雙擊)消息。
MSDN
https://docs.microsoft.com/en-us/previous-versions/aa926302(v=msdn.10)?
問(wèn)題分析
原因一:?
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在用戶按下,釋放并再次按下鼠標(biāo)左鍵的時(shí)間內(nèi)在系統(tǒng)雙擊時(shí)由OS生成的。
原因二:
由于鼠標(biāo)雙擊的WM_LBUTTONDBLCLK消息伴隨WM_LBUTTONDOWN消息的發(fā)生,導(dǎo)致鼠標(biāo)雙擊事件,總是被之前的WM_LBUTTONDOWN消息截?cái)?#xff0c;WM_LBUTTONDBLCLK消息觸發(fā)不了。?
解決方案
對(duì)于原因一:?
修改對(duì)應(yīng)的WNDCLASS的style成員加上CS_DBLCLKS風(fēng)格即可。
?
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;對(duì)于原因二:
調(diào)整消息處理函數(shù)的消息處理順序。?
問(wèn)題擴(kuò)展
CS幾種風(fēng)格記錄:
CS_HREDRAW:當(dāng)窗體的寬度發(fā)生變化時(shí),就重新繪制窗口。
CS_VREDRAW:當(dāng)窗體的高度發(fā)生變化時(shí),就重新繪制窗口。
CS_DBLCLKS:能接收用戶在窗體總的雙擊事件。
CS_OWNDC:為該類(lèi)中的每一個(gè)窗口分配各自獨(dú)立的設(shè)備環(huán)境。
CS_NOCLOSE:禁用系統(tǒng)菜單中的“關(guān)閉”命令。
CS_CLASSDC:為該窗口類(lèi)的各窗口分配一個(gè)共享的設(shè)備環(huán)境。
CS_PARENTDC:指定子窗口繼承其父窗口的設(shè)備環(huán)境。、
CS_SAVEBITS:把被窗口遮掩的屏幕圖像部分作為位圖保存起來(lái)。當(dāng)該窗口被移動(dòng)時(shí),windows使用被保存的位圖來(lái)重建屏幕圖像。
雙擊鼠標(biāo)左鍵實(shí)際上會(huì)生成以下四個(gè)消息系列:
參考文章
https://blog.csdn.net/u011296732/article/details/51669181
https://blog.csdn.net/evanlinux/article/details/6598659
總結(jié)
以上是生活随笔為你收集整理的Visual C++——无法响应WM_LBUTTONDBLCLK消息(鼠标左键双击)问题解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Visual C++——加速键
- 下一篇: Visual C++——LoadBitm