WIN32傳送自定義訊息
在WIN32
訊息機制中,系統會傳送各種訊息到訊息佇列,開發可以呼叫GetMessage
得到相關訊息。
WIN32
的API也提供了對應開發自行的傳送訊息到訊息佇列的功能.
SendMessageA
直接傳送訊息到對應的視窗處理函式中,直到處理後函式才返回。
PostMessageA
將資訊放入訊息佇列中,立即返回。
//訊息處理器
LRESULT CALLBACK MYWNDPROC(HWND hwind, UINT unit, WPARAM wp, LPARAM lp) {
if (WM_COMMAND == unit) //按鈕訊息和快捷鍵
{
}
return DefWindowProc(hwind, unit, wp, lp);
}
int main(){
//載入快捷鍵資源
auto accelarator =LoadAccelerators(hInstance, MAKEINTRESOURCEA(IDR_ACCELERATOR2));
//直接傳送訊息到訊息處理器MYWNDPROC 然後在執行GetMessage函式
SendMessageA(hwnd, WM_COMMAND,0,0);
//PostMessageA();
//5訊息迴圈
while (GetMessage(&msg, NULL, 0, 0))
{
//如果傳送的訊息能被翻譯成快捷鍵訊息那麼,就不需要在分發了,
//TranslateAccelerator會傳送WM_COMMAND訊息
if (!TranslateAccelerator(hwnd, accelarator, &msg))
{
MYWNDPROC(msg.hwnd, msg.message, msg.wParam, msg.lParam);
系統預設幫我們自動分發的到類關聯的函式
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
}
上面的時序如下圖
如果上面的程式碼更換為PostMessageA
//訊息處理器
LRESULT CALLBACK MYWNDPROC(HWND hwind, UINT unit, WPARAM wp, LPARAM lp) {
if (WM_COMMAND == unit) //按鈕訊息和快捷鍵
{
}
return DefWindowProc(hwind, unit, wp, lp);
}
int main(){
//載入快捷鍵資源
auto accelarator =LoadAccelerators(hInstance, MAKEINTRESOURCEA(IDR_ACCELERATOR2));
//將訊息插入到訊息佇列中,然後立即返回
PostMessageA(hwnd, WM_COMMAND,0,0);
//5訊息迴圈
while (GetMessage(&msg, NULL, 0, 0))
{
//如果傳送的訊息能被翻譯成快捷鍵訊息那麼,就不需要在分發了,
//TranslateAccelerator會傳送WM_COMMAND訊息
if (!TranslateAccelerator(hwnd, accelarator, &msg))
{
MYWNDPROC(msg.hwnd, msg.message, msg.wParam, msg.lParam);
系統預設幫我們自動分發的到類關聯的函式
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
}
傳送自定義型別訊息
我可以通過上述兩個API
傳送(SendMessageA
PostMessageA
)系統定義的訊息型別,當然也可以傳送我們的自己的訊息。
但是為了避免和系統定義的訊息型別衝突WIN32
提供特殊的巨集定義.
#define WM_USER 0x0400
我們只需要自定義自己訊息型別加上WM_USER
即可.
int MY_MESSAGE = WM_USER + 1;
SendMessageA(hwnd, MY_MESSAGE,0,0);
相關文章
- iOS 環信 EaseUI 的使用一:可傳送類似名片自定義的訊息iOSUI
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- 訊息中介軟體—RocketMQ訊息傳送MQ
- 鴻蒙傳送訊息通知鴻蒙
- TNW-傳送模板訊息TNW
- 6-RocketMQ傳送訊息MQ
- RocketMQ(九):訊息傳送(續)MQ
- ros|自定義訊息型別ROS型別
- 排查MQ訊息傳送和接收MQ
- 小程式傳送訂閱訊息
- Kafka -- 訊息傳送儲存流程Kafka
- RocketMQ中Producer訊息的傳送MQ
- Runtime備忘-訊息傳送流程
- 快速向 Google Chat 傳送訊息Go
- RocketMQ -- 訊息傳送儲存流程MQ
- Python呼叫飛書傳送訊息Python
- 傳送不同型別的訊息型別
- RocketMQ - 生產者訊息傳送流程MQ
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 以事務方式傳送 Kafka 訊息Kafka
- 0x2_訊息的傳送
- django+小程式傳送模板訊息Django
- Android Handler 訊息傳送效能優化Android優化
- 分散式事務:訊息可靠傳送分散式
- 千牛自動傳送訊息怎麼發?來試試UiBot千牛訊息傳送機器人UI機器人
- C++編寫自定義TCP包併傳送C++TCP
- Spring Boot 整合 RabbitMQ 傳送延時訊息Spring BootMQ
- Pulsar訊息傳送、消費架構概述架構
- 一張圖進階 RocketMQ - 訊息傳送MQ
- Laravel 佇列訊息與傳送郵件Laravel佇列
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- iOS 訊息傳送與轉發詳解iOS
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- springmvc 自定義訊息轉換器完整例子SpringMVC
- Laravel 5.5 Validator 自定義錯誤返回訊息Laravel
- 在python中使用itchat傳送微信訊息Python