MFC,非mfc模态对话框框怎么它不重复显示?就是第二次点击,显示原来那个

请教各位大神一个 MFC 非模态对话框的问题
[问题点数:50分,结帖人xianglitian]
请教各位大神一个 MFC 非模态对话框的问题
[问题点数:50分,结帖人xianglitian]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2010年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2010年1月 VC/MFC大版内专家分月排行榜第一2004年4月 VC/MFC大版内专家分月排行榜第一
2010年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2010年1月 VC/MFC大版内专家分月排行榜第一2004年4月 VC/MFC大版内专家分月排行榜第一
2010年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2010年1月 VC/MFC大版内专家分月排行榜第一2004年4月 VC/MFC大版内专家分月排行榜第一
2012年4月 VC/MFC大版内专家分月排行榜第一
2012年5月 VC/MFC大版内专家分月排行榜第二2012年3月 VC/MFC大版内专家分月排行榜第二2011年7月 VC/MFC大版内专家分月排行榜第二2011年1月 VC/MFC大版内专家分月排行榜第二2010年12月 VC/MFC大版内专家分月排行榜第二2010年9月 VC/MFC大版内专家分月排行榜第二2010年6月 VC/MFC大版内专家分月排行榜第二2010年5月 VC/MFC大版内专家分月排行榜第二2010年4月 VC/MFC大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。vc中用MFC创建非模态对话框.!!_百度知道
vc中用MFC创建非模态对话框.!!
实现功能是显示对应的对话框;
隐藏&quot: Add your command handler code here CDIALOG1 dlg,有两个菜单,一个是&quot.实现的功能是关闭由&;那个响应函数是.我的&quot,但是我一直不行;}
后面的两句是怎么都不行;&#47我想用vc的MFC创建的个程序窗口里.Create(IDD_DIALOG1) ; TODO;
dlg.一个是&,这个框只能由非模态度实现.我在线等.ShowWindow(SW_SHOW):void CMyV显示&菜单显示的那个对话框.:OnShow() { /显示&quot:...大家帮忙啊;显示&quot
提问者采纳
那么执行完dlg,所以你看不到对话框显示; TODOvoid CMyView.ShowWindow(SW_SHOW);&#47,你定义的dlg是一个局部对象,系统会随之把为dlg所关联的对话框资源也销毁;后一到}符号处OnShow()函数结束,dlg这个局部对象的生命周期也到了:.Create(IDD_DIALOG1) ; dlg.ShowWindow(SW_SHOW):OnShow() { /
} 作为非模态对话框: Add your command handler code here CDIALOG1 dlg
提问者评价
那个模态对话框为什么就不消失呢??我是在模态对话框上该的非模态的..
其他类似问题
1人觉得有用
按默认排序
其他3条回答
并且在CMyView初始化函数中创建它,应该在CMyView的销毁函数中销毁这个对话框你应该在CMyView类里面定义对话框对象,最后,然后在OnShow和OnHide中只是简单的调用ShowWidows函数
你是不是应该将第一句改成:
CDialog dlg = new CD
恩 ,就是这样的!
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁mfc dll显示非模态对话框问题
[问题点数:40分,无满意结帖,结帖人ms2146]
mfc dll显示非模态对话框问题
[问题点数:40分,无满意结帖,结帖人ms2146]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。当前位置:
Windows SDK 非模态对话框的消息处理
Windows SDK 非模态对话框的消息处理
发布日期: 00:00
浏览次数:4176次
标  签:windows
文章评分:5.0
操  作:
称号:未设置简介:...
文章概要:
在SDK中使用非模态对话框时的几个问题:
1、为什么要调用IsDialogMessage??
2、非模态对话框与主窗口有什么区别?
3、如果不调用IsDialogMessage,消息能不能传递到对话框?
4、如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用?
在SDK中使用非模态对话框时,主循环中必须插入下列代码:
while(GetMessage(&msg,NULL,0,0) {
if(!IsDialogMessage(hdlg,&msg){
TranslateMessage(&msg);
DispatchMessage(&msg);
我的问题是:
为什么要调用IsDialogMessage??
非模态对话框与主窗口有什么区别?
如果不调用IsDialogMessage,消息能不能传递到对话框?
如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用?
要搞掂这一连串的问题,首先要明白IsDialogMessage的作用,不要被它的名字搞懵。
IsDialogMessage并不是象它的名字那样用来检查对话框消息的,而是用来解释或转换消息的,更贴切的名字应该是TranslateDialogMessage。
与TranslateAccelerator有点类似,IsDialogMessage解释非模态对话框消息。例如,它映射Tab键和Shift+Tab键到对话框前/后的控制,并且映射箭头键到对话框相应的操作。你可以将它看成是对话框中专门内建的解释消息的加速键表。实际上,IsDialogMessage不是对话框专用的-你可以在任何有控制的窗口中使用它来实现与在对话框中一样的键盘行为。但是因为它的第一个参数是对话框的HWND,所以实际上你必须应用中的每一个非模态对话框都调用这个函数。通常当你创建对话框时可以获得一个全程的HWND类型变量g_hDlg。
现在对问题一(为什么要调用IsDialogMessage?)的回答也同时解决了问题四中的前半部分。
下一个要解决的问题是:MFC如何进行对话框消息的解释?在MFC中使用了一个复杂的虚函数:CWnd::PreTranslateMessage,这个虚函数让任何窗口消息自己进入主消息循环,而不用去修改窗口自身的循环。以下是CDialog::PreTranslateMessage的缺省实现代码:
BOOL CDialog::PreTranslateMessage(MSG* pMsg)
// many lines of intimidating code
return PreTranslateInput(pMsg);
换句话说,CDialog还传递消息到另一个虚函数:CWnd::PreTranslateInput
BOOL CWnd::PreTranslateInput(LPMSG lpMsg)
if (/* keyboard or mouse message */)
return IsDialogMessage(lpMsg);
return FALSE;
你可能想到了CWnd::IsDialogMessage实际上是一个用m_hWnd作为HWND参数调用全程::IsDialogMessage的打包函数。这就导致了MFC中每一个对话框解释自己的输入。如果你同时运行五个对话框,每一个对话框的PreTranslateMessage都调用IsDialogMessage-所以说你就不必做什么了。MFC实在是牛啊,你压根就不必去操心IsDialogMessage,它会自己运转良好。
最多还可以输入100字
【VIP年会员制套餐】
【C/C++软件工程师实战能力集训大纲】
VC知识库发布了C/C++业界的“本草纲目”
【牛人都在千人一号群! 加群三步走!!!】
第一步:请必须加VC知识库QQ: 为好友;
第二步:请必须关注本站微博:
第三步:申请加入群:.(必须将关注微博截屏发到QQ方可通过!)
【最新2013:】
全部100% VC++源码提供: E-Form++全新大型SCADA & HMI解决方案源码、CAD解决方案源码、Gis解决方案源码 、电力石油化工仿真与图形建模解决方案源码、大量其他高级制图VC++源码下载!
【 新视频发布】
o o o o o o o o o o
Foxmail 新版中有一个《邮件特快专递》的功能。起先搞不懂如何用,后来知道要在“工具->系统选项”那边设置“本地 DNS 服务器的IP地址”。
  觉得这个新功能蛮好用的。不需要通过SMTP代理,可以直接通过本地往邮箱所在的邮件交换器发送邮件。在暑假一开始想在 VC++ 中实现这个功能。用 IRIS 截包后,发现程序中有 mx8.263.net 发送邮箱,不知道这个是什么东西,所以作罢。后来才想到这个就是 263.net 的MX记录主机,原来特快专递的原理就是往这个主机上发送数据就行。...
Foxmail 新版中有一个《邮件特快专递》的功能。起先搞不懂如何用,后来知道要在“工具->系统选项”那边设置“本地 DNS 服务器的IP地址”。
  觉得这个新功能蛮好用的。不需要通过SMTP代理,可以直接通过本地往邮箱所在的邮件交换器发送邮件。在暑假一开始想在 VC++ 中实现这个功能。用 IRIS 截包后,发现程序中有 mx8.263.net 发送邮箱,不知道这个是什么东西,所以作罢。后来才想到这个就是 263.net 的MX记录主机,原来特快专递的原理就是往这个主机上发送数据就行。...
本文介绍了套接字编程的基本知识。...MFC中模态对话框和非模态对话框 - 推酷
MFC中模态对话框和非模态对话框
MFC的对话框非为两种,一种叫模态对话框(Modal &Dialog &Box,又叫做
模式对话框
),一种叫做非模式对话框(Modaless Dialog Box,又叫无模式对话框)。两者的区别在于当对话框打开的时候,是否允许用户进行其他对象的操作。
一、模态对话框
模态对话框指,当用户需要对该对话框之外的其他对话框或者模块进行操作时,必须该对话框关闭,才能去编辑其他对话框或者模块。
创建如下:
//创建模态对话框
CModalDialog modalD
modalDialog.DoModal();
如上例子中modalDialog为一个对话框的对象,模态和非模态的主要区别就是在DoModal上,当程序执行到DoModal的时候,它会告诉程序,当前只能执行只能执行当前对话框的操作,别的操作暂时停止。直到当前对话框关闭后,才执行完DoModal,结束当前对话框的操作。
二、非模态对话框
非模态对话框指,
当用户打开非
时,依然可以操作其他窗口。例如,Windows提供的记事本程序中的【查找】对话框。【查找】对话框不会垄
断用户的输入,打开【查找】对话框后,仍可与其他用户界面对象进行交互。用户可以一边查找,一边修改文章,这样就大大方便了使用。
需要调用两个函数Create()和ShowWindow(),并且在结束当前对话框的时候需通过
DestroyWindow()来强制
销毁创建的对话框。
如下这种情况是否可行?
&pre name=&code& class=&cpp&& void CYourView::OnOpenDlg(void)
/*假设IDD_TEST_DLG为已经定义的对话框资源的ID号*/
CModalessDialog modalessD
modalessDialog.Create(IDD_TEST_DLG);
modalessDialog.ShowWindow(SW_SHOW);
在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量
modalessDialog
是局部变量,但这个函数返回时,
modalessDialog
也被析构了,所以 无法显示此对话框。
void CYourView::OnOpenDlg(void)
/*假设IDD_TEST_DLG为已经定义的对话框资源的ID号*/
CModalessDialog* modalessDialog = new CModalessD
modalessDialog-&Create(IDD_TEST_DLG)
modalessDialog-&ShowWindow(SW_SHOW);
//切记不要delete
modalessDialog,防止结束对象。
由于没有定义的对象一直没有delete,所以其一直存在,知道程序结束,所以该对话框一直显示,但是属于一个指针来说,不去释放其内存,会造成不必要的
错误,所以一般可以讲该对象定义成为一个成员变成,可以在析构函数中释放其申请的内存。
对于何时去销毁创建的对话框,这个可以有用户自己去决定,例如我们可以选在在点击关闭按钮之后,在OnClose()函数中去强制关闭该对话框。如下:
void CYourView::OnCancel()
CDialog::OnCancel();
DestroyWindow();
如上就可以强制关闭对话框。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见}

我要回帖

更多关于 模态对话框 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信