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状态.反复重启,状态依旧. 多数情况下,应该是非正常 ...
随机推荐
- Prometheus监控系统(二)Prometheus部署与使用
1. Prometheus安装 官网:https://prometheus.io/ 下载地址:https://prometheus.io/download/ Prometheus基于Golang编写, ...
- Codeforces Round 941 (Div. 2) cf 941 div2 A~D
每题都有AC代码在伸缩代码框请留意!! A. Card Exchange -------------------------------------------题解------------------ ...
- javaApi,mapreduce,awk,scala四种方式实现词频统计
awk方式实现词频统计: 方式一: vi wordcount.awk { for (i = 1; i <=NF;i++) //NF 表示的是浏览记录的域的个数 freq[$i]++ } END{ ...
- vscode 使用 python 进行 UG 二次开发 实现代码提示功能
vscode 使用 python 进行 UG 二次开发的 实现代码提示功能 用 VSCODE 进行 UG 二次开发的时候, 想要用代码提示的时候,可以用 pydev 插件, 但是,pydev 只有一个 ...
- Maven Helper插件——实现一键Maven依赖冲突问题
业余在一个SpringBoot项目集成Swagger2时,启动过程一直出现以下报错信息-- An attempt was made to call a method that does not exi ...
- redis-sort排序
sort命令可以对列表(lpush rpush).集合(sadd srem).有序集合(zadd)进行排序 1.复习一下三种数据结构(1)列表 lpush key val1 val2 val3 .. ...
- 让摄像头带上智慧“智驭视界·AIEye”
接上一篇<物联网浏览器(IoTBrowser)-基于计算机视觉开发的应用"智慧眼AIEye">,经过AI的包装很高级,确实很屌炸天. 智驭视界·AIEye 在科技赋能的 ...
- TokenObtainPairSerialize和TokenObtainPairView
TokenObtainPairSerializer和TokenObtainPairView是Django REST framework的SimpleJWT库提供的两个相关的类. TokenObtain ...
- oeasy 教您玩转 linux 之 010302 火狐浏览器 firefox
我们来回顾一下 上一部分我们都讲了什么? oneko xeyes 这次看看这个火狐 火狐 看看当前版本 看看是否可以更新 如果需要更新就更新 firefox -v apt search f ...
- [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)
牛说(cowsay) 回忆上次内容 上次我们研究了shell脚本的编程 并且在shell中实现了 循环语句 延迟命令 清屏命令 python命令 figlet命令 编辑 还能整点什么呢? 还想 ...