【转】WM_MESSAGE、WM_COMMAND、WM_NOTIFY等消息有什么不同
轉自:https://blog.csdn.net/newstarao/article/details/3775690
WM_MESSAGE是最普通的WINDOWS消息,對于這種類型的消息沒什么好說的。那WM_COMMAND和WM_NOTIFY消息都是WINDOWS CONTROL給它的父窗體發的消息,那這兩種消息有什么不同呢?WM_COMMAND消息其實是早期的(WIN3.X時代)子窗體消息,子窗體給父窗體發送消息,父窗體就捕獲WM_COMMAND來處理子窗體的消息。但是這個消息只包括了有限的信息,例如wParam包括了子窗口ID和通知碼,lParam則包括了子窗口句柄,就這點信息了,如果想知道一些額外的信息的話(例如,鼠標點在了子控件的什么位置)就要借助于其他的WM_*消息。所以對于新型的WIN32控件,微軟就增加了一個新的NOTIFICATION消息,這個消息的參數是這樣的:wParam包含了控件ID,而lParam則包含了一個結構體的指針,這個結構體是NMHDR結構或者以NMHDR結構為第一項的一個更大的結構體。這樣就可以包含了很多的子控件想給父窗體提供的信息了,甚至可以自己去定義這種的結構體。
???? 這就是這幾種消息的差別點了。
控件的自畫:
???? 首先在創建控件的時候增加BS_OWNERDRAW選項,這個STYLE是告訴控件,別自己處理外觀,讓主程序來處理你的外觀,這時你就有權決定這個控件是畫成什么樣子了。然后就是處理WM_DRAWITEM的消息,利用 LPDRAWITEMSTRUCT pdis = (LPDRAWITEMSTRUCT) lParam; 來取得一些必要的信息,如按鈕的DC,位置等,通過這些參數實現對這個DC的內容進行繪畫。COMMON Ctronller的STYLE都在COMMCTRL.H頭文件里。
按鈕在以下狀態時會對它的父窗口發送WM_COMMAND的消息:
按了一次(BN_CLICKED),取得焦點(BN_SETFOCUS),失去焦點(BN_KILLFOCUS)等。
這個是按鈕的發送WM_COMMAND的條件,其他的控件什么時候會發送WM_COMMAND消息可查看該控件的通知碼(在wParam的高位HIWORD)。例如,滾動條控件在被滾動的時候會向它的父窗體發送消息,但是不是WM_COMMAND消息,而是WM_VSCROLL和WM_HSCROLL消息。這只是為了說明凡是子控件,都會在適當的條件下向它的父窗體發送消息。無論是WM_COMMAND還是WM_NOTIFY或是WM_VSCROLL消息等。
另外,MoveWindow會產生WM_SIZE消息。
總結
以上是生活随笔為你收集整理的【转】WM_MESSAGE、WM_COMMAND、WM_NOTIFY等消息有什么不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沪深300etf期权什么时候上市?沪深3
- 下一篇: 神经网络与深度学习——TensorFlo