博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 中消息循环实例
阅读量:5013 次
发布时间:2019-06-12

本文共 2040 字,大约阅读时间需要 6 分钟。

让 APP 发送和处理自定义消息

1,自定消息;由于 app 不是继承与窗口类,所以不能向窗口那样 send 或 post message;

2,可以直接在 app 中 post thread message,例如这里的 WM_APP1;也可以从窗口中 post WM_COMMAND,例如这里的 WM_APP2;

2,防止 thread message 丢失,下面这个例子中,WM_APP2在主窗口创建后被post,处理函数弹出一个dialog,这时如果不显示滴用PeekMessage,thread message就被发到了窗口线程里,就丢失了。参考:

 

#define WM_APP1 (WM_APP+1) #define WM_APP2 (WM_APP+2)
BEGIN_MESSAGE_MAP(CProgramApp, CWinApp) (WM_APP1, &CProgramApp::OnHandleApp1) (WM_APP2, &CProgramApp::OnHandleApp2)     ON_COMMAND(ID_APP_ABOUT, &CProgramApp::OnAppAbout) // Standard file based document commands     ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)     ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen) END_MESSAGE_MAP()
BOOL CProgramApp::InitInstance() {
... // Dispatch commands specified on the command line. Will return FALSE if // app was launched with /RegServer, /Register, /Unregserver or /Unregister. if (!ProcessShellCommand(cmdInfo)) return FALSE; // The main window has been initialized, so show and update it pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); // // WM_APP2 was posted after main window created, need dispatch all those msg, // then post the thread msg, otherwise, the thread message lost. // MSG Msg; while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&Msg); DispatchMessage(&Msg); } this->PostThreadMessage(WM_APP1, 0, 0); return TRUE; } void CProgramApp::OnHandleApp1(WPARAM wParam, LPARAM lParam) {
AfxMessageBox(_T("WM_APP1 handler")); } void CProgramApp::OnHandleApp2() {
AfxMessageBox(_T("WM_APP2 handler")); }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndStatusBar.Create(this)) {
TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // this->PostMessage(WM_COMMAND, WM_APP2, 0); return 0; }

-

转载于:https://www.cnblogs.com/yapzhang/archive/2011/06/09/2076213.html

你可能感兴趣的文章
如何解决最后一个尾注引用显示与致谢混为一谈的问题-下
查看>>
Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...
查看>>
阅读之https及加密原理
查看>>
HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
查看>>
css文本样式text、字体样式font
查看>>
python判断图片是否损坏
查看>>
MySQL服务启动:某些服务在未由其他服务或程序使用时将自动停止
查看>>
软件工程第四周作业 - 单元测试
查看>>
KNN与SVM对比&SVM与逻辑回归的对比
查看>>
php 现在拓展地址
查看>>
【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)...
查看>>
团队个人冲刺第三天
查看>>
unit
查看>>
2017-10-17 NOIP模拟赛2
查看>>
How to install ia32-libs in Ubuntu 14.04 LTS (Trusty Tahr)
查看>>
ACM/ICPC 之 模拟 (HNUOJ 13391-换瓶模拟)
查看>>
JavaWeb学习——JSP基础
查看>>
Eclipse tomcat server 无法添加项目
查看>>
黑寡妇黄飞鸿
查看>>
leetcode 217 Contains Duplicate 数组中是否有重复的数字
查看>>