MFC 对话框编程要点
来源:互联网 发布:mac安装adobe flash 编辑:程序博客网 时间:2024/05/20 17:23
http://blog.csdn.net/lesky/article/details/2471039
MFC 对话框编程要点
MFC 对话框编程要点
(一)对话框基本要点和生命周期
MFC对话框支持WYSIWYG编程模式,即What you see is what you get.。其类型分为模式对话框和非模式对话框
对话框由一个rc资源文件描述外观;与一个cpp类相连接(通过ID);对话框内的控件使用基于ID的变量映射来通讯。
模式对话框对象被定义后,通过调用DoModal()函数来显示对话框并进行相关操作,此函数当对话框被关闭时返回。其返回值标明了对话框是点击OK退出(1),还是被Cancel(2)。
非模式对话框需要与某个View相关联,以便对话框退出时发送消息给对应的View进行必要的处理。
在对话框显示前,系统会调用OnInitDialog()函数,在这个函数中你可以设置一些控件属性,进行一些初始化工作。比如,设置滚动条的最大最小值,设置List列表的初始值等。其方法是将控件ID作为参数,调用GetDlgItem函数获得控件的对象的指针(指针类型是CWnd*)然后使用对象提供的函数进行操作。
ID对于一个组件来说非常重要,通过向导,我们可以将一个变量和一个组件进行关联(映射)来实现数据交换,而这种绑定的关键就是将一个组件的ID与成员变量关联。
(二)数据交换机制
UpdateData(BOOL b)函数可以进行变量和组件内容的交换,当UpdateData函数的参数为TRUE时,数据从对话框控件传递给数据成员;参数为FALSE时,数据从数据成员传递至对话框成员。数据交换的实现是通过调用 CDialog::DoDataExchange函数。
当我们想改变获得到个别控件中的数据时,可以使用GetDlgItem函数得到对应控件的指针,对指针进行操作。
(三)特殊的Radio Button
Radio Button控件是分组的,同一组的Radio Button只能有一个被选中。这个机制的实现依赖于TAB顺序,在资源视图下按Ctrl-D键将显示对话框的TAB焦点顺序。举一个例子来说明:
Radio1,Radio2,Radio3是三个不同的Radio Button控件,其焦点顺序为1,2,3。为了实现分组Radio1的Group属性应该为TRUE,其余两个为FALSE。如果又有两个Radio4,Radio5焦点顺序为6,7。则Radio4的Group属性应为TRUE,Radio4,Radio5被分为一组。
需要注意的是,Radio以Group属性来分组,为了结束前一个组,你应该将焦点顺序为4,8的控件的Group属性设为TRUE,否则编译器会产生一个警告。
(四)一些技巧
通过向导,我们可以将一个类成员变量和控件关联以进行数据交换,例如将一个CString类型的变量和Edit控件关联。将一个int变量和一组Radio Button关联。但是,人总有犯错的时候,当我们修改或需要删除这种关联时,麻烦就来了。
在我的使用过程中没有发现VS2005提供了删除“已被关联的控件成员变量”的向导,所以我使用的是比较麻烦的手动删除。
1、 在对话框头文件中删除成员变量的定义
2、 在对话框cpp文件中删除构造函数初始化列表中的对应变量的初始化
3、 在对话框cpp文件中删除DoDataExchange函数中的对应语句(根据变量名)
此时,在class view中的向导中,已经可以重新设定控件所关联的成员变量了。
登录框的制作:
在显示主窗口之前显示一个模式对话框来提示用户登录是一个常用的功能。只需要在PreCreateWindow函数中加入显示对话框的代码就可以完成这个功能。
有些时候,我们可能需要从一个控件对象来得到它的ID。比如,你的对话框中有好几个滚动条,那么这些滚动条的事件都在OnHScroll ,OnVScroll中被响应。如何区分是哪个滚动条就需要确定ID。
在这两个函数的参数中有一个CScrollBar* pScrollBar指针,我们可以通过调用
pScrollBar->GetDlgCtrlID()来获得ID,ID是一个整数。
在对话框编程中往往需要改变某个控件的文字,比如Edit控件和static text控件。此时使用SetDlgItemText(int nID, LPCTSTR lpzString)函数比较方便。
0 0
- MFC 对话框编程要点
- MFC 对话框编程要点
- MFC 对话框编程要点
- MFC 对话框编程要点
- MFC 对话框编程要点
- MFC 对话框编程 -- 总结
- MFC 之 对话框编程
- MFC 对话框编程
- MFC对话框编程
- MFC 之 对话框编程入门
- MFC编程->打开子对话框
- MFC编程之文件对话框
- VS2013 MFC基于对话框编程
- 在MFC中的windows socket编程要点
- 孙鑫MFC笔记(7)--对话框编程
- MFC对话框编程笔记(一)
- MFC简易对话框编程(一)
- MFC属性页对话框的编程
- NSString 与 NSDate 的互相转换 本地日期字符串与UTC日期字符串的转化
- 使用Android SDK Manager下载、更新sdk时的问题
- Linux 查看系统运行信息
- [ios]IOS页面切换的几种方式
- Vertica常用操作总结
- MFC 对话框编程要点
- Lucene学习总结之五:Lucene段合并(merge)过程分析
- 黑马程序员--集合框架
- POSIX详解pthread_mutex_lock
- According to TLD or attribute directive in tag file, attribute test does not accept any expressions
- android通过执行netstat及cat /proc/net/tcp查看正在运行应用的本地端口号pid和uid以及对方的IP和端口号
- 加密技术基本原理
- hive 访问hbase表
- 最全的静态网站生成器(开源项目)