DoModal函数的一些问题
来源:互联网 发布:usb端口管理软件 编辑:程序博客网 时间:2024/04/28 08:18
转自:http://blog.csdn.net/clever101/article/details/2576968
对话框DoModal()函数调用失败一般而言有两种表现形式:一是对话框弹不出来,但是没有错误提示;二是对话框弹不出来,同时伴随内存访问错误的提示框出现。
第一种表现主要是因为没有对资源句柄进行切换造成的,以在DLL中弹出对话框中最为常见。解决办法是:如果是MFC规则DLL,可以使用所有导出函数的开始处添加 AFX_MANAGE_STATE宏,具体代码为:AFX_MANAGE_STATE(AfxGetStaticModuleState( )),如果是MFC扩展DLL,具体做法是
1. 在DLL中定义两个全局变量,
HINSTANCE hResOld; // 旧的资源句柄
HINSTANCE hDll; // DLL资源句柄
2. 在DllMain函数里初始化hDll
hDll = hInstance;
3. 在调用对话框DoModal()函数之前进行资源句柄切换
HINSTANCE hResOld = AfxGetResourceHandle();
AfxSetResourceHandle(hDll);
……
CYourDlg dlg;
dlg.DoModal();
……
AfxSetResourceHandle(hResOld);
若是第二种表现,即对话框弹不出来,同时伴随内存访问错误的提示框出现,那么问题很可能出现在初始化对话框界面的代码方面,具体是在OnInitDialog函数,即使它是在DLL中弹出对话框。事实上在在DLL中弹出对话框如果不进行资源句柄切换,顶多是弹不出对话框,并不会出现内存访问方面的错误。在解决这方面的错误,一个误区是单步进入DoModal()函数调试,直至定位DoModal函数内部哪一句出错。后来我发现这纯粹是浪费时间,就算定位了在DoModal函数内部哪一句出错,你依然不知道为什么会出错。实际上调用DoModal()函数,激发的却是OnInitDialog函数。因此你只需确定OnInitDialog函数哪一句出错了(这里的OnInitDialog函数是指派生对话框类的OnInitDialog函数)。
0 0
- DoModal函数的一些问题
- DoModal 函数的用法
- 解决不能单步调试dlg.DoModal()函数的问题
- DoModal函数的执行过程
- DoModal函数的执行过程
- MFC:DoModal 函数的用法
- DoModal()函数调用失败的原因分析:
- CFileDialog::DoModal()在xp下打不开的问题
- 关于 DoModal 函数
- DoModal()后出现问题。
- 关于对话框DoModal()函数调用失败的原因分析
- 关于对话框DoModal()函数调用失败的原因分析
- MFC DoModal弹出对话框很慢的问题
- 》[MFC] CDialog::DoModal()函数用法
- [MFC] CDialog::DoModal()函数用法
- DoModal
- DoModal
- ioctl函数的一些问题
- PMON详解
- struts2 中自定义拦截器
- Vision引擎中 环境地形植被
- VS2010 快捷键 (空格显示 绿点, Tab 显示箭头)
- webservice(一)开篇
- DoModal函数的一些问题
- Linux命令之Dialog练习
- eclipse智能提示及快捷键
- Hibernate的一个注释 @Transient
- STL容器与默认拷贝构造函数,默认赋值函数
- c++11线程之条件变量condition_variable(二)
- webservice(二)webservice基本原理
- 折半查找--Binary Search
- hadoop模拟实现pagerank算法过程