这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框

消息处理就不用返回0了,可直接返回DefWindowProc

HINSTANCE hInstance = ::GetModuleHandle(NULL);

    if (bUserDlgClsName)
{
TCHAR szDlgClassName[] = TEXT("MyDialogClassName"); WNDCLASSEX wndClsEx = { 0 };
wndClsEx.cbSize = sizeof(WNDCLASSEX);
if (FALSE == GetClassInfoEx(hInstance, szDlgClassName, &wndClsEx))
{
wndClsEx.lpfnWndProc = QWnd::AfxQWindowProc;
wndClsEx.cbClsExtra = 0;
wndClsEx.cbWndExtra = DLGWINDOWEXTRA; //这个必填这
wndClsEx.hInstance = hInstance;
wndClsEx.hIcon = ::LoadIcon(hInstance, IDI_APPLICATION);
wndClsEx.hIconSm = ::LoadIcon(hInstance, IDI_APPLICATION);
wndClsEx.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
wndClsEx.lpszClassName = szDlgClassName;
wndClsEx.lpszMenuName = NULL;
wndClsEx.style = CS_HREDRAW | CS_VREDRAW;
wndClsEx.hCursor = ::LoadCursor(hInstance, IDC_ARROW); if (FALSE == RegisterClassEx(&wndClsEx))
return FALSE; }
} m_hWnd = ::CreateDialogParam(hInstance,
MAKEINTRESOURCE(id),
pParent ? pParent->m_hWnd : NULL,
(DLGPROC)QWnd::AfxQWindowProc,
(LPARAM)this);

可问题就来了,在这对话框上弹出MessageBox的时候就没反应了,

找了好久,跟踪消息后发现,

MessageBox的消息也进入了消息循环,它就不能直接返回DefWindowProc,要返回0

这就尴尬了,那这自定义对话类就没有意义了,

还是只能在消息循环中判断是否是模板对话框消息来处理了。

在窗口成员变量添加:BOOL m_bDialog;来判断是否是模板对话框的消息

QWnd* pWnd = nullptr;
if (WM_CREATE == uMsg || WM_NCCREATE == uMsg)
{
pWnd = (QWnd*)((LPCREATESTRUCT)lParam)->lpCreateParams;
if (pWnd != nullptr)
{
pWnd->m_hWnd = hWnd;
::SetWindowLongPtr(hWnd, GWLP_USERDATA, LONG_PTR(pWnd)); }
}
else if (WM_INITDIALOG == uMsg)
{
QDialog* pDlg = (QDialog*)lParam;
if (pDlg != nullptr)
{
pDlg->m_hWnd = hWnd;
::SetWindowLongPtr(hWnd, GWLP_USERDATA, LONG_PTR(pDlg));
return pDlg->OnInitDialog(pDlg->m_lParam); }
}
else
{
pWnd = (QWnd*)::GetWindowLongPtr(hWnd, GWLP_USERDATA);
} if (pWnd != nullptr)
{
LRESULT lResult = 0; const MESSAGE_MAP* pMsg = pWnd->FindMessageMap(uMsg, wParam, lParam);
if (pMsg)
{ FuntionStyle funStyle;
funStyle.pfn = pMsg->pfn; switch (pMsg->singStyle)
{
case sing_vv:
(pWnd->*funStyle.pfn_vv)();
break; case sing_v_l:
(pWnd->*funStyle.pfn_v_l)(lParam);
break; case sing_v_wl:
(pWnd->*funStyle.pfn_v_wl)(wParam, lParam);
break; case sing_v_uii:
(pWnd->*funStyle.pfn_v_uii)(wParam, LOWORD(lParam), HIWORD(lParam));
break; case sing_v_up:
(pWnd->*funStyle.pfn_v_up)(wParam, POINT{ LOWORD(lParam), HIWORD(lParam) });
break; case sing_v_uh:
(pWnd->*funStyle.pfn_v_uh)(LOWORD(wParam), (HWND)lParam);
break; case sing_l_v:
lResult = (pWnd->*funStyle.pfn_l_v)();
break; case sing_l_l:
lResult = (pWnd->*funStyle.pfn_l_l)(lParam);
break; case sing_l_wl:
lResult = (pWnd->*funStyle.pfn_l_wl)(wParam, lParam);
break; default:
break;
} if (lResult)
return lResult; } if (pWnd->m_bDialog)
return 0;
} return DefWindowProc(hWnd, uMsg, wParam, lParam);

在消息循环中判断:

if (pWnd->m_bDialog)
return 0;

否则返回DefWindowProc

MessageBox弹出后无响应的更多相关文章

  1. VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案

    今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...

  2. win10 死机 无响应

    win10 死机 无响应 用着用着无响应,结束任务出不来,ctrl+alt+delete  无效. 点 窗口的关闭关闭不了. 鼠标键盘无响应. 写的代码变成乱码,影响太严重了,损失惨重. 紧急启动 c ...

  3. 在vue项目中的main.js中直接使用element-ui中的Message 消息提示、MessageBox 弹框、Notification 通知

    需求来源:向后台请求数据时后台挂掉了,后台响应就出现错误,不做处理界面就卡住了,这时需要在main.js中使用axios的响应拦截器在出现相应错误是给出提示.项目使用element-ui,就调用里面的 ...

  4. 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值

    问题描述:       某二次开发的项目反馈,不定期出现应用服务器无响应的情况,登录服务器发现任务管理器中有大量的w3wp僵尸进程. 分析过程: 针对同一进程每隔15秒抓取dump,连续抓取3个,对比 ...

  5. c#自动关闭 MessageBox 弹出的窗口

    我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的.所以如果有以下代码: MessageBox.Show("内容',"标题"); 则只有关闭 ...

  6. 调用startActivityForResult,onActivityResult无响应的解决办法

    三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...

  7. IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)

    问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器 ...

  8. VC++6.0一些常见问题解决方法(打开多个窗口、行号、添加文件无响应、更改.exe图标及名称等等)

    背景: 最近使用VC++6.0做一个界面,供测试CAN通信使用.由于客户希望我们提供简单方便的函数接口让其最快速使用CAN,DLL(动态链接库)是不二之选.做DLL需要两个VC窗口进行测试才方便.可是 ...

  9. SQL阻塞原因造成系统多功能无响应的分析解决思路

    最近遇到一个sqlserver项目,月底会出现多个财务相关功能出现不定期操作无响应问题 通过查询SQL阻塞信息,定位到阻塞源头spid.该会话的状态.等待事件及执行的SQL脚本 根据spid查询该会话 ...

  10. eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources

    做开发的同学们或多或少的都会遇到eclipse启动到一定程度时,就进入灰色无响应状态再也不动了.启动画面始终停留在Loading workbench状态.反复重启,状态依旧. 多数情况下,应该是非正常 ...

随机推荐

  1. Linux OpenGrok搭建

    目录 一.目的 二.环境 三.相关概念 3.1 OpenGrok 3.2 CTags 3.3 Tomcat 四.OpenGrok搭建 4.1 安装jdk 4.2 安装ctags依赖 4.3 安装uni ...

  2. Linux 内核:设备树 学习总结

    背景 之前写过设备树DTS 学习:学习总结(应用篇)的学习,但是是偏向于应用:这次针对了设备树的架构以及在驱动中的使用流程做了补充. 基于 Linux 内核 v4.14. 目录 标题 说明 设备树:d ...

  3. 基于附带Attention机制的seq2seq模型架构实现英译法的案例

    模型架构 先上图 我们这里选用GRU来实现该任务,因此上图的十个方框框都是GRU块,如第二张图,放第一张图主要是强调编码器的输出是作用在解码器每一次输入的观点,具体的详细流程图将在代码实现部分给出. ...

  4. 全志科技A40i开发板规格书(四核ARM Cortex-A7,主频1.2GHz)

    1.评估板简介 创龙科技TLA40i-EVM是一款基于全志科技A40i处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz,由核心板和评估底板组成. 评估板接口资 ...

  5. Linux的访问权限详解

    题目 解读访问权限 rw-r--r--分别代表什么东西 r:代表可读 w:可写 e:可执行 方便起见进行拆分 rw- 代表文件所属用户的权限 r-- 代表同组用户的权限 r-- 代表其他用户的权限 同 ...

  6. CF1860

    很失败啊 A 题大力分讨,罚了 \(2\) 次 B 题大力分讨,罚了 \(1\) 次 C 题大力 dp 一发过 然后就睡觉了 感觉 CF 打少了智商掉了,被前几题拖了太久

  7. 3.2 逻辑设计和硬件控制语言HCL

    在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器单元中存储位.大多数现代电路技术都是用信号线上的高电压或低电压来表示不同的位值.在当前的技术中,逻辑1是用1.0伏特左右的高电压表示的 ...

  8. Grafana Loki查询加速:如何在不添加资源的前提下提升查询速度

    Grafana Loki查询加速:如何在不添加资源的前提下提升查询速度 来自Grafana Loki query acceleration: How we sped up queries withou ...

  9. oeasy教您玩转vim - 26 - 缩进设置

    ​ 缩进设置 回忆上节课内容 这次了解了颜色的细节 设置 256 色模式 :set t_Co=256 然后确定了具体的各种颜色 还可以生成网页 :TOhtml 还有什么好玩的么? ​ 缩进设置 ​ 在 ...

  10. pytest批量执行多个测试文件(批量执行一个文件夹下的所有测试用例)

    图片 代码 #!/usr/bin/env python # @File : test_runall.py import pytest import os # path = os.path.dirnam ...