MessageBox弹出后无响应
这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框
消息处理就不用返回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弹出后无响应的更多相关文章
- VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案
今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...
- win10 死机 无响应
win10 死机 无响应 用着用着无响应,结束任务出不来,ctrl+alt+delete 无效. 点 窗口的关闭关闭不了. 鼠标键盘无响应. 写的代码变成乱码,影响太严重了,损失惨重. 紧急启动 c ...
- 在vue项目中的main.js中直接使用element-ui中的Message 消息提示、MessageBox 弹框、Notification 通知
需求来源:向后台请求数据时后台挂掉了,后台响应就出现错误,不做处理界面就卡住了,这时需要在main.js中使用axios的响应拦截器在出现相应错误是给出提示.项目使用element-ui,就调用里面的 ...
- 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值
问题描述: 某二次开发的项目反馈,不定期出现应用服务器无响应的情况,登录服务器发现任务管理器中有大量的w3wp僵尸进程. 分析过程: 针对同一进程每隔15秒抓取dump,连续抓取3个,对比 ...
- c#自动关闭 MessageBox 弹出的窗口
我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的.所以如果有以下代码: MessageBox.Show("内容',"标题"); 则只有关闭 ...
- 调用startActivityForResult,onActivityResult无响应的解决办法
三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...
- IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)
问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器 ...
- VC++6.0一些常见问题解决方法(打开多个窗口、行号、添加文件无响应、更改.exe图标及名称等等)
背景: 最近使用VC++6.0做一个界面,供测试CAN通信使用.由于客户希望我们提供简单方便的函数接口让其最快速使用CAN,DLL(动态链接库)是不二之选.做DLL需要两个VC窗口进行测试才方便.可是 ...
- SQL阻塞原因造成系统多功能无响应的分析解决思路
最近遇到一个sqlserver项目,月底会出现多个财务相关功能出现不定期操作无响应问题 通过查询SQL阻塞信息,定位到阻塞源头spid.该会话的状态.等待事件及执行的SQL脚本 根据spid查询该会话 ...
- eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources
做开发的同学们或多或少的都会遇到eclipse启动到一定程度时,就进入灰色无响应状态再也不动了.启动画面始终停留在Loading workbench状态.反复重启,状态依旧. 多数情况下,应该是非正常 ...
随机推荐
- 什么是spring,它能够做什么?
1.什么是SpringSpring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. ...
- 个人团队兼职开发app(社交,语聊1v1,视频直播)
如果您有意向创业,意向社交类产品,如语聊,及时通信,视频直播,1v1等,又苦无没有人力资源. 我们岁数都是30+,在互联网行业摸爬滚打十年有余. 后端,前端,客户端,运维,四个人. 我们共事很长一段时 ...
- Linux 应用案例开发手册——基于Zynq-7010/20工业开发板
目 录 1 开发案例说明 4 2 Linux 常用开发案例 4 2.1 tl_led_flash 案例 4 2.2 tl_key_test 案例 7 2.3 tl_can_echo 案例 11 2.4 ...
- Java反射与Fastjson的危险反序列化
Preface 在前文中,我们介绍了 Java 的基础语法和特性和 fastjson 的基础用法,本文我们将深入学习fastjson的危险反序列化以及预期相关的 Java 概念. 什么是Java反射? ...
- Spring DI(依赖注入)自动装配 @Autowired、@Resource注解
@Autowired:一部分功能是查找实例,从Spring容器中根据类型(Java类)获取对应的实例:另一部分功能就是赋值,将找到的实例,装配给另一个实例的属性值.(注:一个Java类型在同一个Spr ...
- Luogu P2036 [COCI2008-2009 #2] PERKET
今天我们来看一道题:Luogu P2036 [COCI2008-2009 #2] PERKET 这道题不难,典型的暴力枚举 由于食材数量随机,无法直接用循环解,但是可以使用递归 \(MY_{CODE: ...
- 史上最详细的Composer安装tp5教程
Composer安装tp5教程1.下载composer先介绍几个网站Composer官网https://getcomposer.org/ Composer中文网http://www.phpcompos ...
- Java实现快速快速排序算法
算法简介 快速排序(Quick Sort) 是由冒泡排序改进而得的.在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序.如果能通过两个(不相邻)记录的一次交换直接 ...
- 前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!
首先聊下node.js的优缺点和应用场景 Node.js的优点和应用场景 Node.js作为后端开发的选择具有许多优点,以下是其中一些: 高性能: Node.js采用了事件驱动.非阻塞I/O模型,使得 ...
- Langchain 与 LlamaIndex:LLM 应用开发框架的比较与使用建议
Langchain 和 Llamaindex 是两种广泛使用的主流 LLM 应用开发框架.两者有什么不同?我们该如何使用?以下我根据各类资料和相关文档做了初步选型. 一.Langchain 1. 适用 ...