基于mfc建立对话框一个简单的接受和发送文件的对话框的步骤

& VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
&&&&&& 前两讲中鸡啄米为大家讲解了如何创建对话框资源。创建好对话框资源后要做的就是生成对话框类了。鸡啄米再声明下,生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。&&&&&& 因为鸡啄米给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。大家用过 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在中,一般对话框类都是继承自CDialogEx类。&&&&&& 创建对话框类&&&&&& 如果是自己新添加的对话框模板,怎样为它创建对话框类呢?&&&&&& 1.首先鸡啄米就按中说的那样,在Resource View的&Dialog&节点上右键,然后在右键菜单中选择&Insert Dialog&创建一个新的对话框模板,ID就使用默认的IDD_DIALOG1。&&&&&& 2.在中间区域会显示新建的对话框模板,然后选中此对话框模板,点右键,在右键菜单中选择Add Class。&&&&&&& 3.选择&Add Class&后会弹出一个对话框,在对话框中&Class name&下的编辑框中写入自定义的类名就可以了,例如CMyDialog。&&&&&& 4.最后点&Finish&完成。&&&&&& 最终你就可以在Class View中看到新生成的对话框类CMyDialog了,并且在Solution Explorer中有相应的MyDialog.h头文件和MyDialog.cpp源文件生成。CMyDialog类同样派生于CDialogEx类。&&&&&& 注意,一般类名都以C打头,又比如,CTestDlg。&&&&&& 为对话框中的控件添加变量&&&&&& 在上一讲中,包括三个静态文本框,三个编辑框,一个按钮控件。程序自动生成的Cancel按钮保留,作为退出按钮,而OK按钮删除掉了。&&&&&& 静态文本框只是为了说明后面紧跟的编辑框中数据的意义,是被加数、加数还是和,所以它们是不会变的,我们就不为它们添加变量了。按钮控件是用来操作的,这里也不为它们添加变量。编辑框中的数据可能会经常变化,有必要为它们每个控件关联一个变量。&&&&&& 首先为被加数的编辑框IDC_SUMMAND_EDIT添加变量。&&&&&& 1.在编辑框上点右键,在右键菜单中选择&Add Variable&。弹出添加成员变量的向导对话框。&&&&&& 2.我们想为其添加值变量而不是控件变量,所以对话框中&Category&下的组合框中选择Value。&&&&&& 3.&Variable type&下的组合框此时默认选中的是&CString&,CString是字符串类,显然不能进行加法运算。我们可以选择double、float、int等。这里我们选择double,即编辑框关联一个double类型的变量。&&&&&& 4.在&Variable name&中写入自定义的变量名。鸡啄米为其取名m_editSummand。&&&&&& 5.点&Finish&完成。&&&&&& 注意,类的成员变量名一般以m_打头,以标识它是一个成员变量。&&&&&& 参照此方法,再分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。&&&&&& 对话框类的数据交换和检验&&&&&& 在程序运行界面中,用户往往会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性改变后会相应修改控件关联变量的值。这种同步的改变是通过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫做对话框的数据交换和检验机制。&&&&&&&我们为三个编辑框添加了变量以后,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函数的函数体中多了三条DDX_Text调用语句。下面是函数体代码和鸡啄米添加的注释。
void&CAdditionDlg::DoDataExchange(CDataExchange*&pDX) &&
&&&&CDialogEx::DoDataExchange(pDX); &&
&&&&DDX_Text(pDX,&IDC_SUMMAND_EDIT,&m_editSummand); &&
&&&&DDX_Text(pDX,&IDC_ADDEND_EDIT,&m_editAddend); &&
&&&&DDX_Text(pDX,&IDC_SUM_EDIT,&m_editSum); &&
}&&&&&&&& 鸡啄米再以Addition程序为例简单说下数据交换机制。如果我们在程序运行界面中输入被加数,则通过CAddition的DoDataExchange()函数可以将输入的值保存到m_editSummand变量中,反之如果程序运行中修改了变量m_editSummand的值,则通过CAddition的DoDataExchange()函数也可以将新的变量值显示到被加数的编辑框中。&&&&&& 但是这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。&&&&&& CDialogEx::UpdateData()函数的原型为:&&&&&& BOOL UpdateData(BOOL bSaveAndValidate = TRUE);&&&&&& 参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。&&&&&& 返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE。&&&&&& 在下一讲中鸡啄米将具体演示CDialogEx::UpdateData()函数如何使用。&&&&&& 鸡啄米本节主要讲的是新建对话框类和添加控件变量,控件的消息处理函数将在下一讲详细介绍。依然欢迎大家常回鸡啄米博客学习和讨论。&
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 22:15:37)&&( 22:36:0)&&( 23:17:45)&&( 19:46:26)&&( 22:7:57)&&( 23:32:16)&&( 1:53:2)&&( 23:22:54)&&( 22:18:8)&&( 22:47:28)
MFC没学了,直接用C#鸡啄米 于
10:58:03 回复嗯,现在用C#的也很多。
你的文章对我帮助很大,如果我想做两个对话框,一个是对话框里全是参数,自己输入,另一个全是运算结果,请问如何实现?我是新手,希望能详细点,非常感谢!鸡啄米 于
21:19:10 回复比较简单的是通过全局变量来保存第一个对话框里的参数,第二个对话框计算并显示结果InitWaiter 于
19:32:28 回复建议用结构体实现,需要设置的参数都放置在结构体中,虽然该结构体也是全局的,不过可控性更强,有点类似于命名空间,主要还是模块化的思想。
你好!你的文章对我太有用了,非常感谢您!
鸡啄米你好!我在看这一讲时遇到了困难,在给控件添加变量时,右键之后单击add variable可是我的vs2010却没有任何反应,也就是说不能添加变量,请问你知道这是什么原因吗?鸡啄米 于
11:28:15 回复首先确定是否生成了对话框类,如果有了对话框类还是不行,就关闭工程,删除sdf等中间文件,再打开试试。实在不行就手动添加吧。jiayaosmile 于
12:21:57 回复我也遇到了5楼的问题,按照楼主的方法,没有用呀。鸡啄米 于
17:04:31 回复可以再试试class wizard,应该可以jiayaosmile 于
17:01:55 回复是我自己的问题了,没有添加类就直接添加变量,就没反应了。谢谢鸡啄米,你的博客很好,很适合我这种初学者。plcwoaini 于
21:14:06 回复enum=IDD_xx这个对话框的IDD不同时,双击对话框,不能弹出类向导.可以手动修改.
这个文章很好,呵呵,虽然我没有看任何内容。但是它已经帮我解决了问题。其实MFC默认生成的对话框其实是不关联任何类的,所以你就无法添加变量,因为VS不知道你添加的变量到底应该放到哪个类之中!如果我们自己派生一个对话框类的话,那么是可以添加的,原因是我们此时已经派生了类,并且关联了资源。
读过你的文章,觉得写的很好,简单明了,这里支持你一下。希望你能继续写下去。
我又来了 问的是控件如何关联变量问题 就是我定义了一个MFC的类 就比如把class CEditLimit : public CEdit
比如我想关联一个我的edit控件的Control的变量 可为什么没有我的CEditLimit呐
是所有的vs都是这呐 还是我的vs是这啊 都是自己手动的更改嘛 刚从vc6转过来 好多的都不熟悉 还希望版主都赐教啊 鸡啄米 于
22:43:21 回复自定义的类是不会显示到那个列表里的,你可以先关联一个CEdit类型的控件变量,然后到头文件中手动修改为CEditLimit类型。
谢谢啊 还有就是 每次更改以后都得是生成解决方案 在调试运行嘛我以前每次用vc6.0都是直接Ctrl+F5 就是问下 在vs中怎么办啊 每次修改以后不能直接点运行 是嘛 很困惑 对与vs的一些基本操作 还请博主都体谅
你好,我在看这章的时候也出现了5楼的问题,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函数的函数体中没有变化,只有一条CDialogEx::DoDataExchange(pDX);语句。在AdditionDlg.h中有新加的变量名。只能手动添加,有什么其他方法吗?鸡啄米 于
20:04:40 回复呵呵,真是什么问题都有啊。如果你的添加方法正确的话,只加一半还真是没有道理的。这种情况下,只能手动加了
谢谢啊,学习了,可是第六讲的时候我评论中提出了一个小问题,后来咋找不到回复及我的原帖了,记得好像成功了的,觉得这边好多资源供学习,还有交流群么?
之前在公司用的VC6.0,自己电脑刚装上了VS2012,想业余时间自己学学VS,感谢你的文章,给了我不少的帮助。祝你工作顺利,身体健康!鸡啄米 于
23:17:54 回复很高兴能帮到你。同祝工作顺利!
类似于CDialogEx类。我看到它是CMyDialog的一个基类那么这样的的类又是什么样的含义呢!!博主你真的太好了!非常受用!
CDialogEx::UpdateData()函数是在哪里呢?本文来源于鸡啄米 / , 原文地址:/software/153.html
你好,我在这章照做的时候遇见了问题,就是在Add Class的时候填写Class name后点击完成,就弹出不是正当的.....h文件鸡啄米 于
22:45:30 回复sorry,这种问题从没遇到过未来记忆 于
10:16:21 回复谢谢你了。我知道了,是我在安装的时候吧一个开发工具给去掉了,我现在解决了。
非常好的博客。论述简单明了,针对性强!
非常有用的文章。感谢你的奉献!
你好!读了你的文章感觉很好,谢谢!现在有个问题请教:我用MFC做了一个界面,上面添加了2个对话框,在对话框1上有滑拉条、文本框以及spin控件,想实现当这些控件的值变化时能实时地反应到对话框2中。我不想在每个控件上都添加处理函数,能在对话框中找到一个共同的函数,处理对话框1中所有的变化?谢谢!
鸡啄米老师,你好!我想实现直接鼠标双击就可以进行文字输入,并把文字直接显示在屏幕上,按回车回到正常状态。不想用弹出对话框,接收输入文字那种,那种太麻烦了。请教下先生这个该真么实现呢?我看好多软件比如world,金山文字都这么搞的,想知道下他们是怎么弄的?谢谢
给控件添加成员变量:1.在Dialog对话框上添加一个Edit控件。2.选中Edit控件,鼠标右键点击,选择“类向导”(我用的汉化版,就不打英文了)3.在“类向导MFC”对话框中,中间部分有一个“成员变量”选项卡。点击。在下部会显示“成员变量”列表框。4.根据你自己设定的Edit的ID,在列表中选择。5.点击右侧的“添加变量”按钮。打开“添加成员变量”对话框。默认已经有“m_”。6.“类别”“变量类型”就不要改了。然后确定。7.DoDataExchange函数中会自动添加。然后直接使用关联的成员变量就行。其他也是一样。鸡啄米 于
23:19:38 回复很高兴有如此热心的网友,欢迎常来Caramel 于
9:22:04 回复我试了下这种方法,我的还是不能关联呢。。。好奇怪。。。
嗯,写的很简单明了。支持一下鸡啄米 于
21:36:56 回复谢谢支持,常来看看啊
继续学习,争取先做一个加法的简单MFC程序
谢谢楼主哦 嘿嘿
我都很认真的看啦鸡啄米 于
22:43:04 回复不用谢,常来逛逛啊
楼主,我刚接触这些,不过看你的这个觉得真心不错,我会很认真的看了,支持你哦鸡啄米 于
16:19:14 回复加油,常来交流啊
我添加对话框类的时候,右键单击 add class没反应,用class wizard 时报错?鸡啄米请问我的问题出在哪?还是软件安装的有问题
博主这样具体形式的例子比起其他长篇大论从WINDOWS原理开始介绍的MFC教程要好很多,前段时间我看了《深入浅出MFC》,书前半部分全是理论,我看完了还是编不出一个最基本的程序,那样的书可能不适合入门。感谢您的文章。鸡啄米 于
16:19:06 回复个人认为,那种书适合作工具书
很喜欢你把问题分成一部分一部分来讲,很容易理解接受~
我一直很困惑,对话框程序文档程序有啥区别么?还有 win32 程序
这三个项目模版都是干啥用的?应用场景是啥?能给讲讲不?
鸡啄米,你好,我觉得你这句话应该是写错了:“参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给数据。”最后的应该是“FALSE表示从变量传给控件。”你的文章写得简单明了,非常适合入门。在此感谢你。鸡啄米 于
16:34:27 回复已经修正,谢谢提醒。
我出现了和10楼相同的问题,即添加变量之后CAdditionDlg::DoDataExchange中没有自动增加DDX_Text函数。我发现了问题所在原因,按照教程,这个窗口是在一个单窗口的MFC工程中自己新建的窗口。它的变量是无法自动关联到AdditioniDlg.cpp中的。如果对项目本来自动创建的窗口进行操作,就可以自动建立函数了。
vs2010能不能像vc 6.0
一样将一个对话资源与一个已有的类关联,比如说我从CFileDialog 派生一个类CCustomDialog ,如何将这个类和一个对话框资源关联?
你好,我的VS2010里面的I没有IDC_SUMMAND_EDIT和那两个,手动修改后在addiondlg.cpp里错误ID没定义.怎么办?南风 于
21:30:35 回复我的也一样南风 于
21:31:33 回复怎么解决?
跪谢,太厉害了~
作者您好 我右键按完添加变量后 没有任何反应 怎么办
一开始DoDataExchange() 里面没有自动生成。。。后来就手动添加了。 看了评论应该是有问题的。 然后参考了 秦风 的方法
。解决了。。这下问题就来了, 我按照楼主的方法为什么出错了?最后我找到问题了: 添加变量的时候,太疏忽了,类别没有切换到value。所以关联不上拉,不能自动生成代码。
大家是不是和我犯的错是一样的呢。 呵呵。。。本人新手,鸡啄米老师给力哈!~~~
请问QQ交流群号是多少?
请问一下,添加了控件变量之后忘记了自己添加的变量名了,怎么可以方便的查看米 于
10:31:15 回复一个就是在DoDataExchange里看,一个就是在添加变量的对话框内,会显示之前添加的变量的,为灰色。我也是新手、
您好,我按你的说明写了以后,就是提示:m_editsum,未声明的标识符。另外,请问CDialogEx::UpdateData()这个函数写在哪个位置?
求问不小心修改了主dilogID之后,修改回来依旧无法右键添加变量的解决方法QAQ。
你好,我用vs2013按照你所说的方法去操作(加法计数器),但是一直没有成功。错误列表如下:IntelliSense:
无法用 &double& 类型的值初始化 &CWnd && 类型的引用(非常量限定)error C2664: “void DDX_Control(CDataExchange *,int,CWnd &)”: 无法将参数 3 从“double”转换为“CWnd &”请问应该如何解决?
完全随机文章查看: 10513|回复: 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 by19:27 提问
mfc初学者,想做一个基于对话框的类似搜索引擎的程序,有没有功能相近源代码借鉴一下
关于注册时的用户名密码怎么存啊,数据库怎么用啊,搜索的文件放哪啊等等问题,不胜感激
按赞数排序
最简单的是嵌入一个webbrowser控件,链接到网站上。
建议楼主先参考书籍去MFC 体验一下控件的使用和相关响应函数的编写吧,先动手操作再想思路
先学好基础再想做实际程序,数据库怎么用这些不是一两句话能说清楚的
其他相似问题
相关参考资料温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
日志分类列表加载中...
this.p={b:2};
{if defined('c')&&c.length>0} {list c as x}{/list} {else} 没有日志分类 {/if}
美女柔术瑜伽
模块内容加载中...
日常生活锦囊
模块内容加载中...
政坛风云人物
模块内容加载中...
奇闻诡异事件
模块内容加载中...
风水命理禁忌
模块内容加载中...
理睬恭候朋友到来
模块内容加载中...
阅读导航其它空间
模块内容加载中...
&&&&&&& &&&&&
<div title="点击查看" class="js-video bdwa bds0 bdc0 fc05" onclick="nb.x.a('',this);">请点击查看影音文件...
理睬音画(为你等待)
模块内容加载中...
& 本博为百科宝库,珍藏精文一万六千余篇。温馨提示: (一)有博友2万多位(早已超过上限),敬请朋友在理睬头像下加理睬为博友。 (二)首页中部有理睬其它空间入点,朋友们可从相应的空间、博客转载。 (三)咨询电脑博客问题的请从本博客首页中部的《解答专区》进入咨询。谢谢朋友们! &
QQ 博客等级
最后登录加载中...
this.p={b:2,ua:35, ub:'http://img.bimg.126.net/photo/FH_cpCeSTol5AnhWLOdN0Q==/5261450.jpg',us:'他', friendstatus:'none',followstatus:'unFollow',hmcon:'1',aShowT:'1',guideId:6};
积分 ${data.totalScore} 分,距离下一等级还有 ${data.nextGradeNeedScore}分
本站最近七天来访
模块内容加载中...
奇闻诡异谜团
模块内容加载中...
中国最美风景
模块内容加载中...
手机使用技巧
模块内容加载中...
理睬原创作品
模块内容加载中...
主题日志(一)
模块内容加载中...
主题日志(二)
模块内容加载中...
主题日志(三)
模块内容加载中...
百万书库阅读
模块内容加载中...
史海钩沉真相
模块内容加载中...
养生保健常识
模块内容加载中...
各类知识集锦
模块内容加载中...
& & & & & &
网易公司版权所有&&
用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
{list x.l as y}
{/list} {/list}
{if defined('wl')} {list wl as x}{/list} {/if}

我要回帖

更多关于 mfc打开文件对话框 的文章

 

随机推荐