日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

草稿--Windows消息机制

發布時間:2023/11/29 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 草稿--Windows消息机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
消息本身是作為一個記錄傳遞給應用程序的,這個記錄中包含了消息的類型以及其他信息。 MSG含有來自windows應用程序消息隊列的消息信息,它在Windows中聲明如下:typedef struct tagMsg{HWND hwnd; // 接受該消息的窗口句柄UINT message; // 消息常量標識符,也就是我們通常所說的消息號// 通常是一個與消息有關的常量值,也可能是窗口或控件的句柄。WPARAM wParam; // 32位消息的特定附加信息,確切含義依賴于消息值// 通常是一個指向內存中數據的指針。LPARAM lParam; // 32位消息的特定附加信息,確切含義依賴于消息值DWORD time; // 消息創建時的時間POINT pt; // 消息創建時的鼠標/光標在屏幕坐標系中的位置 }MSG;// 注意:由于WParam、lParam和Pointer都是32位的,因此,它們之間可以相互轉換。 消息可以由系統或者應用程序產生。系統在發生輸入事件時產生消息。消息的種類:窗口消息: 是系統中最為常見的消息,它是指由操作系統和控制其他窗口的窗口所使用的消息。命令消息: 這是一種特殊的窗口消息,他用來處理從一個窗口發送到另一個窗口的用戶請求。控件通知消息: 只適用于標準的窗口控件如按鈕、列表框、組合框、編輯框,以及Windows公共控件如樹狀視圖、列表視圖等。窗口消息及控件通知消息主要由窗口類即直接或間接由CWND類派生類處理。命令消息的處理對象范圍就廣得多,它不僅可以由窗口類處理,還可以由文檔類,文檔模板類及應用類所處理。附:控件通知消息:按扭控件BN_CLICKED 用戶單擊了按鈕BN_DISABLE 按鈕被禁止BN_DOUBLECLICKED 用戶雙擊了按鈕BN_HILITE 用/戶加亮了按鈕BN_PAINT 按鈕應當重畫BN_UNHILITE 加亮應當去掉組合框控件CBN_CLOSEUP 組合框的列表框被關閉CBN_DBLCLK 用戶雙擊了一個字符串CBN_DROPDOWN 組合框的列表框被拉出CBN_EDITCHANGE 用戶修改了編輯框中的文本CBN_EDITUPDATE 編輯框內的文本即將更新CBN_ERRSPACE 組合框內存不足CBN_KILLFOCUS 組合框失去輸入焦點CBN_SELCHANGE 在組合框中選擇了一項CBN_SELENDCANCEL 用戶的選擇應當被取消CBN_SELENDOK 用戶的選擇是合法的CBN_SETFOCUS 組合框獲得輸入焦點編輯框控件EN_CHANGE 編輯框中的文本己更新EN_ERRSPACE 編輯框內存不足EN_HSCROLL 用戶點擊了水平滾動條EN_KILLFOCUS 編輯框正在失去輸入焦點EN_MAXTEXT 插入的內容被截斷EN_SETFOCUS 編輯框獲得輸入焦點EN_UPDATE 編輯框中的文本將要更新EN_VSCROLL 用戶點擊了垂直滾動條消息含義列表框控件LBN_DBLCLK 用戶雙擊了一項LBN_ERRSPACE 列表框內存不夠LBN_KILLFOCUS 列表框正在失去輸入焦點LBN_SELCANCEL 選擇被取消LBN_SELCHANGE 選擇了另一項LBN_SETFOCUS 列表框獲得輸入焦點消息的發送: 把一個消息發送到窗口有3種方式:發送、寄送和廣播。發送消息的函數有SendMessage、SendMessageCallback、SendNotifyMessage、 SendMessageTimeout;寄送消息的函數主要有PostMessage、PostThreadMessage、 PostQuitMessage;廣播消息的函數我知道的只有BroadcastSystemMessage、 BroadcastSystemMessageEx。函數示例:// 發送消息,會被立即處理,處理完畢后函數才會返回; LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);解析:這個函數主要是向一個或多個窗口發送一條消息,消息被處理后才返回。注意: 如果接收消息的窗口是同一個應用程序的一部分,那么這個窗口的窗口函數就被作為一個子程序馬上被調用;如果接收消息的窗口是被另外的線程所創建的,那么窗口系統就切換到相應的線程并且調用相應的窗口函數,這條消息不會被放進目標應用程序隊列中。函數的返回值是由接收消息的窗口的窗口函數返回,返回的值取決于被發送的消息。// 寄送消息,不會被立即處理,他被放到一個先進先出的隊列中,一直等到應用程序空線的時候才會被處理,不過函數放置消息后立即返回。 BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);解析:該函數把一條消息放置到創建hWnd窗口的線程的消息隊列中,該函數不等消息被處理就馬上將控制返回。注意: 如果hWnd參數為HWND_BROADCAST,消息將被寄送給系統中的所有的重疊窗口和彈出窗口,但是子窗口不會收到該消息;如果hWnd參數為NULL,則該函數類似于將dwThreadID參數設置成當前線程的標志來調用PostThreadMEssage函數。// 廣播消息, long BroadcastSystemMessage(DWORD dwFlags,LPDWORD lpdwRecipients,UINT uiMessage,WPARAM wParam,LPARAM lParam);解析:該函數可以向指定的接收者發送一條消息,這些接收者可以是應用程序、可安裝的驅動程序、網絡驅動程序、系統級別的設備驅動消息和他們的任意組合。注意:如果dwFlags參數是BSF_QUERY并且至少一個接收者返回了BROADCAST_QUERY_DENY,則返回值為0;如果沒有指定BSF_QUERY,則函數將消息發送給所有接收者,并且忽略其返回值。消息的處理:VC中的消息泵:while(GetMessage(&msg, NULL, 0, 0)){if(!TranslateAccelerator(msg.hWnd, hAccelTable, &msg)){ TranslateMessage(&msg);DispatchMessage(&msg);}}

轉載于:https://www.cnblogs.com/xuejianhui/archive/2012/11/14/2770146.html

總結

以上是生活随笔為你收集整理的草稿--Windows消息机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。