MFC编程,这个是不是要创建基于单mfc多文档编程的,还是基于对话框的?

& VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)
VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)
&&&&&& 加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。&&&&&& 一.模态对话框和非模态对话框&&&&&& Windows对话框分为两类:模态对话框和非模态对话框。&&&&& &模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。&&&&& &非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。&&&&&& 大家对Windows系统很了解,相信这两种对话框应该都遇到过。之前的加法计算器对话框其实就是模态对话框。&&&&&& 二.模态对话框是怎样弹出的&&&&&& 毕竟加法计算器程序大部分都是MFC自动生成的,对话框怎么弹出来的大家可能还不是很清楚。鸡啄米下面简单说说它是在哪里弹出来的,再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了。&&&&&& 大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,在中提到过此函数,不过那是单文档应用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。&&&&& &InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的,鸡啄米下面给出这段代码并加以注释:
CAdditionDlg&&&&&&&&&&&
m_pMainWnd&=&&&&&&&& &&
INT_PTR&nResponse&=&dlg.DoModal();&&&&&
if&(nResponse&==&IDOK)&&&&&&&&&&&&&&&&&
else&if&(nResponse&==&IDCANCEL)&&&&&&&&
}&&&&&&&&&弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModal()函数的原型为:&&&&&&&virtual INT_PTR DoModal();   &&&&&&&返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。&&&&&&&调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了&退出&按钮,那么DoModal返回值为IDCANCEL。&&&&&& 三.添加一个新对话框并弹出它&&&&&&&鸡啄米再为加法计算器程序添加一个对话框,以在计算之前询问用户是否确定要进行计算。大家可以完整的看下对话框的添加和弹出过程。&&&&&&&1.根据&&中所讲的方法,在Resource View中的&Dialog&上点右键选择&Insert Dialog&,创建一个新的对话框模板,修改其ID为IDD_TIP_DIALOG,Caption改为&提示&,然后参考&&中所讲,在对话框模板上添加一个静态文本框(static text),Caption改为&您确定要进行加法计算吗?&,接下来修改OK按钮的Caption为&确定&,Cancel按钮的Caption为&取消&,最后调整各个控件的位置和对话框的大小。最终的对话框模板如下图:&&&&&&&2.根据&&中创建对话框类的方法,在对话框模板上点右键选择&Add Class...&,弹出添加类的对话框,设置&Class name&为CTipDlg,点&OK&。在Solution Explorer中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。&&&&&&&3.我们要在点&计算&按钮之后弹出此提示对话框,那么就要在&计算&按钮的消息处理函数OnBnClickedAddButton()中访问提示对话框类,所以为了访问CTipDlg类,在AdditionDlg.cpp中包含CTipDlg的头文件:#include &TipDlg.h&。&&&&&&&4.修改OnBnClickedAddButton()的函数体,在所有代码前,构造CTipDlg类的对象tipDlg,并通过语句tipDlg.DoModal();弹出对话框,最后判断DoModal()函数的返回值是IDOK还是IDCANCEL来确定是否继续进行计算。OnBnClickedAddButton()函数修改后如下:
void&CAdditionDlg::OnBnClickedAddButton() &&
&&&&INT_PTR&nR&&&&&&&&&&&&&&&
&&&&CTipDlg&tipD&&&&&&&&&&&&&
&&&&nRes&=&tipDlg.DoModal();&&&&
&&&&if&(IDCANCEL&==&nRes)&&&&&&&
&&&&&&&&return; &&
&&&&UpdateData(TRUE); &&
&&&&m_editSum&=&m_editSummand&+&m_editA &&
&&&&UpdateData(FALSE); &&
}&&&&&&&&&5.测试。编译运行程序后,在对话框上输入被加数和加数,点&计算&,弹出提示对话框询问是否进行计算,如果选择&确定&,则提示对话框退出,并在主对话框上显示被加数和加数的和,而如果选择&取消&,则提示对话框也会退出,但主对话框显示的和不变,即没有进行加法计算。&&&&&& 到此,大家对于模态对话框的基本使用方法应该掌握了吧。希望大家继续关注鸡啄米的MFC教程,我们共同进步。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 20:12:32)&&( 20:5:25)&&( 22:18:12)&&( 22:15:37)&&( 22:36:0)&&( 23:17:45)&&( 19:46:26)&&( 22:7:57)&&( 23:32:16)&&( 1:53:2)
这个看的有点晕!由 鸡啄米 于
22:41:46 最后编辑
表示你们都能挂百度。。咱就不通过 。。。鸡啄米 于
22:42:09 回复多试几次啊
觉着还是看着JAVA熟悉,呵呵鸡啄米 于
22:42:38 回复呵呵,你是搞java的,当然了
博主 赶紧更新12,13,14,15。。。。。。。啊嗄。。。。
太谢谢您了,讲解的很详细,很有帮助鸡啄米 于
23:53:00 回复能够帮到你很高兴
你好!非常详细,我是初学者,按照博主的指导做很好!想咨询一下,在源文件中有 Addition.cpp和AddtionDlg.cpp两个函数中分别有void CAdditionApp::OnBnClickedAddButton(),void CAdditionDlg::OnClickedAddButton();我在后者中加入的博文中的函数,想问这有什么区别吗?不是很清楚两个源文件的关系
你好,为什么我的会出现编辑提示窗口时,会提示没可用kong jian a?thank you ! you have helped me a lot .学士之爱2012 于
17:55:22 回复好吧,我删了,重来下好了,呵呵呵
在AdditionDlg.cpp中包含CTipDlg的头文件:#include &TipDlg.h&。 为什么我的还要自己手动加:#include &TipDlg.h&?是不是软件设置的问题?鸡啄米 于
22:48:07 回复这条包含语句就是要手动加的秦风 于
12:57:22 回复这个访问另外一个类,就需要添加要访问类的头文件。如果是这个类的.cpp文件,对应的.h文件不用手动。
最近开始学Windows编程,看了作者的教程很清晰明了。非常适合我这种对Windows编程一无所知,而又不知道从哪下手的新人。 感谢作者的辛勤劳动和无私奉献!!!鸡啄米 于
22:36:22 回复此教程很适合入门,欢迎常来交流
我想知道怎样修改对话框的caption,在代码中,哪个函数里写?鸡啄米 于
22:37:02 回复SetWindowText秦风 于
12:58:59 回复邮件点击对话框,点属性。右侧出现属性列表。找到Caption改
注意到对话框类都分为CTipDlg和CAdditionDlg,是不是每一个新的对话框都要建一个新的类才能使用鸡啄米 于
22:41:18 回复是这样的
为什么我生成的对话框被主对话框挡住了??鸡啄米 于
22:46:44 回复没遇到过,呵呵,你试试用SetWindowPos把它置于最顶层
鸡啄米,如果要在一个对话框上输入一组数据,按下这个对话框上的一个按钮后,弹出一个新的对话框,要求在这个新的对话框上能画出这组数据作为纵坐标的图,怎么实现呢?
就是要求两个对话框之间实现数据传递如何实现?!
老师你好,我有一个问题想问,就是当我把按钮的ID值改为ID_NO,和ID_YES时,代码属性都同时改,可以通过编译,但是,返回值不是ID_NO或ID_YES,请问这是什么原因啊?
运行错误啊!提示:#include tipdlg.h:skipped when looking for precompiled header use.。其他几个错误意思ctipdlg未声明标识符,新手啊,百度上木有答案哪tgyd 于
18:34:06 回复原来#include也要注意顺序啊,放在最后就好了
所有的编辑框添加一个变量,用来输出和输入数据,按钮添加消息处理函数,用来弹出提示框和进行数据计算及调用数据流向函数!!!!
很好的教材,赞一个!
你好,新建立的模态对话框的 两个button ,并没有设置 click 事件呀?怎么自动退出的呢?我按照你的 步骤,怎么点击 确定 or 取消
都不能退出呢?dramed 于
16:36:06 回复我也和你一样,不能退出。。
大神太感谢您了我也出现了这个问题 :#include tipdlg.h:skipped when looking for precompiled header use为啥把#include tip.h 放在最后就不会报错了 这其中原理是啥啊
言简意赅,照着做了一遍,O(∩_∩)O谢谢楼主分享!
一次搞定,多谢米哥。。
我的虽然也调试成功了,但是在TipDlg.h头文件下的// 对话框数据enum { IDD = IDD_TIP_DIALOG };中IDD_TIP_DIALOG 出现未定义标示符错误躺着的懒虫 于
1:08:39 回复在头部加入一个#include &resource.h&这是没有引入资源文件的问题。
感谢作者的教程,我觉得此教程很是适合我
MFC弹出对话框后,鼠标进过对话框形状会变化,求解决方法!
m_pMainWnd = &
// 将dlg设为主窗口
请问为什么要有这句??其作用是什么?在我这里没有这句也可以运行,区别是什么?
站长这个MFC的教程看起来和王爽老师的汇编教程一样,本来很生涩的内容看起来都很简单了,希望站长继续加油,谢谢
为什么我CTipDlg的的头文件是CTipDlg然后出错Domodal”: 不是“CDialog”的成员巴恩 于
13:38:15 回复注意大小写再试一下 是DoModal 不是Domodal 哦~
如果要在运行程序的时候显示两个对话框,怎么设置
最近在学mfc,看了一遍孙鑫老师的视频教程,又发现鸡啄米也有教程,就用vs2010再看一遍~学习下基础~
受益匪浅,感谢你的无私奉献
回复27楼在添加类的时候选择基类为:CDialog类,再编译就没问题了
为什么我按下窗口的确定和取消之后没有反应呢?是哪里的程序没有添加进来吗?
今天下午先看到这里,最近刚学MFC,孙鑫的感觉很多都不适合了,真心感谢博主,收获很多。
如果我在给对话框创建了CTipDlg类名后发现这个名字写错了写成CTip,然后我想改回来,我该怎么改呢?
如果我添加好提示对话框后觉得这个提示好多余好恼火想要删掉它,该怎么删除呢?
完全随机文章test10 利用MFC创建一个单文档应用程序,进行对话框编程。在主菜单中添加
项“ ” GUI Develop 界面
238万源代码下载-
&文件名称: test10
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 1908 KB
&&上传时间:
&&下载次数: 18
&&提 供 者:
&详细说明:利用MFC创建一个单文档应用程序,进行对话框编程。在主菜单中添加
菜单项“对话框”,点击该菜单项时,创建模态对话框和非模态对话框。在非模态对话框中,添加一个按钮ADD,点击该按钮可实现另外一个按钮的动态添加和删除
-Use MFC to create a single document application, dialog box programming. In the main menuThe menu item " dialog", click on the menu item, create modal and modeless dialogs. In a modeless dialog box, add a button ADD, click the button to achieve another button to dynamically add and remove
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&test10\Debug\MainFrm.obj&&......\.....\Mydlg.obj&&......\.....\MyMdlg.obj&&......\.....\StdAfx.obj&&......\.....\t11.exe&&......\.....\t11.ilk&&......\.....\t11.obj&&......\.....\t11.pch&&......\.....\t11.pdb&&......\.....\t11.res&&......\.....\t11Doc.obj&&......\.....\t11View.obj&&......\.....\vc60.idb&&......\.....\vc60.pdb&&......\MainFrm.cpp&&......\MainFrm.h&&......\Mydlg.cpp&&......\Mydlg.h&&......\MyMdlg.cpp&&......\MyMdlg.h&&......\ReadMe.txt&&......\res\t11.ico&&......\...\t11.rc2&&......\...\t11Doc.ico&&......\...\Toolbar.bmp&&......\resource.h&&......\StdAfx.cpp&&......\StdAfx.h&&......\t11.aps&&......\t11.clw&&......\t11.cpp&&......\t11.dsp&&......\t11.dsw&&......\t11.h&&......\t11.ncb&&......\t11.opt&&......\t11.plg&&......\t11.rc&&......\t11Doc.cpp&&......\t11Doc.h&&......\t11View.cpp&&......\t11View.h&&......\Debug&&......\res&&test10
&近期下载过的用户:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 一个MFC单文档文件,其中在菜单界面嵌入对话框的实验程序
&[] - mfc menu的用法,可以动态创建菜单,响应用户单击事件.
&[] - 简单的MFC编程,建立一个单文档添加选项并打开一个对话框。
&[] - vc++基于单文档的一个小应用。可以将单文档视进行分割,形成左边对话框右边显示的界面。对于需要设计这种界面的新手大有帮助。
&[] - 主要是在桌面添加窗口小部件,给开发者极大的帮忙,同时也美观了界面拿到一个MFC程序,如何判断是基于对话框的还是基于单文档的,如何判断基于CView类还是基于CFormView类?_百度知道
拿到一个MFC程序,如何判断是基于对话框的还是基于单文档的,如何判断基于CView类还是基于CFormView类?
我刚开始学MFC老师给了我一个程序实例让我看懂它我现在想知道如何通过这个程序实例查看它是基于对话框的还是基于单文档的?另外如果是单文档的,怎么判断是基于CView类还是基于CFormView类呢?我只看最后生成的界面看不出来。。。。谢谢!
PS,如果是基于对话框的,我想把它转换成基于CFormView类的程序,应该怎么做呢?
提问者采纳
查看它的类的组成就可以看到了,还有就是个各个类的基类,单文档的程序一般默认都有以app、view、doc结尾的类名,基于对话框的一般是以dlg结尾的类名
其他类似问题
为您推荐:
其他1条回答
这个 单文档的有菜单默认项吧!!老师不会闲的把它删除吧!!!基于视类的没有表单吧!!转换我还真不会 ,一般都是建工程的时候设置的。
cview的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 9830|回复: 8
MFC的单文档、多文档、对话框有什么区别?各擅长做什么样的软件?
项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&
学习MFC不够系统,所以只了解多文档、单文档和对话框程序的基础。知道“记事本”是单文档,WORD是多文档的,而对话框程序是我多用的。目前也只习惯用多文档程序。如AISAlarm 1.0程序,就是对话框的。
在编程方面,我知道单文档和多文档程序都有菜单栏,很方便添加工具栏,而对话框程序添加菜单和工具似乎非常难。目前,我就像实现一些带有菜单和工具栏的对话框程序。如准备开发的AISAlarm更新版,想参考Arcsoft的软件来做,界面如下:
uWebCam.JPG (56.66 KB, 下载次数: 29)
虹软网络视频软件
21:06 上传
但是现在问题是,不知道它到底是基于什么类型的软件。是对话框?还是某中文档的?MFC单文档能实现这样的对话框吗?如果使用对话框,每点一个按钮就全部重绘客户区的所有按钮,似乎太夸张,不可能。而多文档也可以肯定不是。那这是基于单文档的吗?windows自带的扫雷程序感觉和这个类似,扫雷是基于对话框的?还是单文档呢?
从网上了解到:单文档就是一个窗口只能处理一个文档,多文档就是同时可以处理多个,共享工具栏,菜单栏什么的,对话框就是一个提示用户进行选择或者确认的窗体。对话框模板适合于做交互界面,单文档模板适合于做文件处理,多文档模板适合于做多文件处理。不过,还是没法明确这个问题。
用 对话框 写一个带菜单和工具栏的应用程序好像很麻烦。单文档的应用程序和对话框应用程序其实很相似的。我就见过一个在但文档应用程序框架的编辑区加入一个对话框模板的程序。基本上和对话框程序一样。
那是我一本书中的实例。我给你找啊。等你上线给你发~
找到方法了。
生成单文档工程,最后一部选择基类CFormView,就可以了添加控件了
哈哈。。你看看吧。。很实用啊
这下 对话框 和 单文档 统一啦
项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&
好呀,我昨天也找到试验可以了。我昨天就想找你,我弄这个就是要和你做一个摄像头录像软件,暂定名为AISWebCam。界面仿制上面界面的捕获部分,当然,美化放在后期。
我也在学习VC++中~
应该是单文档的程序
项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&项目:&
应该是,估计我们三个对VC的MFC都不太熟悉,哈哈。
我在写自动骂人程序呢。。。目前头疼~
本站采用进行许可。
Powered byMFC中基于单文档的应用程序,我新建了两个对话框A和B,怎样实现对话框中的数据相互传递?_百度知道
MFC中基于单文档的应用程序,我新建了两个对话框A和B,怎样实现对话框中的数据相互传递?
具体是这样的:A对话框有一个编辑框,关联的变量为m_fRadio (float型),B对话框也有一个编辑框,关联的变量为m_fRadio1 (float型),我在A对话框中填入了m_fRadio的值,点击确定后,我希望B对话框的值m_fRadio1 也跟着变化,并且显示出来,请问该如何实现?
提问者采纳
1·A对话框添加一个public的成员变量 float m_2·A对话框OnOK函数添加如下代码UpdateData(TRUE);m_ok&=&m_fR3·B对话框调用A的(按钮)响应函数添加如下代码if(DlgA.DoModal()==IDOK)//替换你原来的DoModal{&&&&m_fRadio1&=&DlgA.m_&&&&UpdateData(FALSE);}
if(DlgA.DoModal()==IDOK)//替换你原来的DoModal{
m_fRadio1 = DlgA.m_
UpdateData(FALSE);}这段代码写在B类哪里啊?是不是要在B类中申请一个A类的对象DlgA ?
你原来怎么调用的A?一般程序逻辑,应该是B类点击某个按钮弹出A吧,这个代码就是B类按钮点击调用A的代码。CxxxADlg&DlgA;if(DlgA.DoModal()==IDOK)//替换你原来的DoModal{&&&&m_fRadio1&=&DlgA.m_&&&&UpdateData(FALSE);}
不是这样的~A和B都是两个独立的对话框~~我的逻辑是这样的:在CformView主界面中,把A对话框打开,写入数据之后,点击OK关闭;再在主界面中打开B 对话框,我希望B对话框打开后,它的数据能更新(即由A传入)这该怎么实现呢?
模态对话框(DoModal)在调用之后窗口已经销毁,因此你需要用一个变量记录这个值,推荐使用你的APP类成员变量来记录(记录方式同上,OnOk里面)在程序任意框架内位置,AfxGetApp()都可以访问你自己的APP类成员,并且是全局值不变(相当于全局变量)
提问者评价
终于做出来了,非常感谢\(^o^)/~
其他类似问题
为您推荐:
其他2条回答
在ONOK中UpdateData(true);m_fRadio1 =m_fRUpdateData(false);试一下
创建新的对话框类CDlgA和CDlgB,在单文档类中添加类CDlgA和CDlgB类的内部对象。这样他们两个就有共同的父类了,轻松完成通信
在View类中新建CDlgA和CDlgB类的对象,他们在view类中只是相当于一个变量而已,为什么说他们有共同的父类?具体怎么通信?可以清楚点吗\(^o^)/~
在onCreate()函数里用CreateDialog函数给两个对话框对象建立对话框,使用GetParent函数就能获取view父类的对象。
于单的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 mfc多文档编程 的文章

更多推荐

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

点击添加站长微信