当前位置: 首页 > wzjs >正文

PHP网站名字优化seo是什么意思

PHP网站名字,优化seo是什么意思,黑龙江新闻法治在线回放,网站的投票系统怎么做前言 此前系列文章回顾: 在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt) 在MFC中使用Qt(二):实现Qt文件的自动编译流程 在M…

前言

此前系列文章回顾:
在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt)

在MFC中使用Qt(二):实现Qt文件的自动编译流程

在MFC中使用Qt(三):通过编辑项目文件(.vcxproj)实现Qt的自动化编译流程

在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程

在MFC中使用Qt(五):MFC和Qt的共存和交互

通过源码qt-solutions开源项目可知QMfcApp 通过以下几个关键技术点实现 MFC 和 Qt 事件循环的共存:
1.使用Windows钩子来监控消息队列,确保Qt事件在MFC的消息循环中被处理。
2.重写事件过滤器(winEventFilter)来处理Windows消息。
3.在Qt的事件循环中集成MFC的消息泵,通过定期处理MFC的Onldl或消息分发。
4.管理模态循环的计数,调整Qt的事件处理行为,避免在模态期间出现问题。
5.静态方法run0和instance0帮助初始化和协调两个框架的事件循环。

本文将详细说明其工作原理。

深入了解QMfcApp

Windows钩子(Hook)确保事件同步

关键代码:

// 安装 WH_GETMESSAGE 钩子监控消息队列
hhook = SetWindowsHookEx(WH_GETMESSAGE, QtFilterProc, 0, GetCurrentThreadId());LRESULT CALLBACK QtFilterProc(...) {// 强制刷新 Qt 事件队列,防止事件积压qApp->sendPostedEvents();return CallNextHookEx(...);
}

作用:
在每次 Windows 消息被取出(GetMessage 或 PeekMessage)时,触发钩子回调,确保 Qt 的 DeferredDelete 等事件及时处理。

​避免阻塞:即使 MFC 窗口模态对话框阻塞了 Qt 主循环,钩子仍能保证 Qt 事件被处理。

重写事件过滤器(winEventFilter)

关键代码:

bool QMfcApp::winEventFilter(MSG *msg, long *result)
{static bool recursion = false;if (recursion)return false;recursion = true;QWidget *widget = QWidget::find((WId)msg->hwnd);HWND toplevel = 0;if (widget) {HWND parent = (HWND)widget->winId();while(parent) {toplevel = parent;parent = GetParent(parent);}HMENU menu = toplevel ? GetMenu(toplevel) : 0;if (menu && GetFocus() == msg->hwnd) {if (msg->message == WM_SYSKEYUP && msg->wParam == VK_MENU) {// activate menubar on Alt-up and move focus awaySetFocus(toplevel);SendMessage(toplevel, msg->message, msg->wParam, msg->lParam);widget->setFocus();recursion = false;return TRUE;} else if (msg->message == WM_SYSKEYDOWN && msg->wParam != VK_MENU) {SendMessage(toplevel, msg->message, msg->wParam, msg->lParam);SendMessage(toplevel, WM_SYSKEYUP, VK_MENU, msg->lParam);recursion = false;return TRUE;}}}
#ifdef QTWINMIGRATE_WITHMFCelse if (mfc_app) {MSG tmp;while (doIdle && !PeekMessage(&tmp, 0, 0, 0, PM_NOREMOVE)) {if (!mfc_app->OnIdle(idleCount++))doIdle = FALSE;}if (mfc_app->IsIdleMessage(msg)) {doIdle = TRUE;idleCount = 0;}}if (mfc_app && mfc_app->PreTranslateMessage(msg)) {recursion = false;return TRUE;}
#endifrecursion = false;
#if QT_VERSION < 0x050000return QApplication::winEventFilter(msg, result);
#elseQ_UNUSED(result);return false;
#endif
}
  • 作用QMfcApp::winEventFilter 是 Qt 与 MFC 消息协调的核心枢纽,其核心目标是 ​优先让 MFC 处理关键消息(如菜单、快捷键、空闲任务),剩余消息交由 Qt 处理
  • 处理逻辑
    • winEventFilter 中优先处理 MFC 消息(如 WM_ENTERIDLE),调用 MFC 的 OnIdle 等接口。
    • 剩余消息交给 Qt 的标准处理流程 QApplication::winEventFilter()

Qt 主循环驱动 MFC 消息泵

关键代码:

// 伪代码:Qt 主循环内部逻辑
int QApplication::exec() {while (!exit_loop) {// 处理 Qt 事件processEvents(); // 嵌入 MFC 消息泵逻辑while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {TranslateMessage(&msg);DispatchMessage(&msg); // MFC 窗口处理消息}}return exit_code;
}

关键点
Qt 的 exec() 并非单纯阻塞,其内部会通过 ​非阻塞轮询(PeekMessage)​ 持续检查并分发 Windows 消息。

  • PeekMessage 代替了 MFC 的 PumpMessage,允许在 Qt 主循环中处理 MFC 窗口消息。
  • MFC 无需独立事件循环:所有消息最终由 DispatchMessage 分发到 MFC 窗口过程(如 CWnd::WindowProc)。

模态循环协同

关键代码:

// 进入/退出模态循环时更新计数器
void QMfcApp::enterModalLoop() { ++modalLoopCount; }
void QMfcApp::exitModalLoop()  { --modalLoopCount; }

作用:在 MFC 模态对话框(如 MessageBox)期间调整 Qt 事件处理策略。

逻辑细节

  • 进入模态时暂停 Qt 的 DeferredDelete 事件,防止对象在模态期间被销毁。
  • 退出时恢复事件处理,确保 UI 状态一致。

绕过MFC 的 CWinApp::Run

QMfcApp 的设计中,​MFC 的消息循环并未独立启动,而是通过 ​将 MFC 消息泵嵌入到 Qt 的主事件循环 中实现共存。

// 典型 MFC 应用的主循环(被 QMfcApp 替换)
int CWinApp::Run() {while (PumpMessage()) {} // 传统 MFC 消息泵return ExitInstance();
}// QMfcApp 的替代实现
int QMfcApp::run(CWinApp *mfcApp) {qApp->exec();          // 启动 Qt 主循环(内含 MFC 消息泵)mfcApp->ExitInstance(); // 清理 MFC 资源
}

关键设计

  • 不调用 CWinApp::Run:QMfcApp 完全接管消息循环,避免 MFC 自身循环启动。
  • 资源清理:Qt 主循环退出后,手动调用 ExitInstance 完成 MFC 清理。

总结

QMfcApp ​未同时运行两个独立事件循环,而是通过以下方式实现协作而非并行:

  1. Qt 主循环驱动:通过 PeekMessage 处理所有消息(包括 MFC 窗口消息)。
  2. MFC 逻辑嵌入:消息过滤器和钩子确保 MFC 的 PreTranslateMessageOnIdle 等关键逻辑被触发。
  3. 无阻塞设计:Qt 的 exec() 内部以非阻塞方式轮询消息,避免独占线程。

这种设计使得 MFC 窗口能够响应消息,而 Qt 控件也能正常更新,实现无缝混合运行。

http://www.dtcms.com/wzjs/106869.html

相关文章:

  • 同城招聘网站自助建站建立一个网站需要多少钱?
  • 西安建网站的公司百度点击软件还有用吗
  • 类似稿定设计的网站推广文章的推广渠道
  • 郑州市住房和城乡建设厅网站推广如何做网上引流
  • 做国际网站有用外包
  • 做网站建设价格提高工作效率整改措施
  • 无锡网站建设君通科技公司重庆网站seo服务
  • 网页设计布局分析百度seo推广怎么做
  • 上海做高端网站建设网站优化培训
  • 门户网站网站建设费用
  • 网络优化网站建设学习关键词seo深圳
  • 大连网站哪家做的好推广拉新任务的平台
  • h5响应式网站做动画营销策划公司的经营范围
  • 青海建设厅质检站网站西安seo托管
  • 广东品牌网站建设平台网站的营销推广方案
  • 誉字号网站广告联盟有哪些
  • 东莞腾宇科技网站建设百度竞价托管代运营公司
  • 西宁市城东区住房和建设局网站合肥seo网站排名
  • 老板让做网站报价世界500强企业
  • 设计与绘制一个网站首页国内能用的搜索引擎
  • 杭州网站建设出名培训计划和培训内容
  • 网站策划书编写天津天狮网络营销课程
  • 网站收录登录入口新媒体平台
  • 国外顶级域名注册商郑州seo顾问外包公司
  • 江苏住房和城乡建设厅官方网站6班级优化大师网页版登录
  • 北京西站疫情防控最新消息关键词搜索工具app
  • 建站哪家好就要用兴田德润网络营销策划方案3000字
  • 国内最好的crm石家庄seo管理
  • 网站制造宁波seo外包引流推广
  • 网站数据展示软件推广平台有哪些?哪个比较好