VC编程技术点滴(二)定义一个简单的对话框
2011-08-19 21:06
351 查看
一、定义对话框资源
继续上一节使用的程序例子。如下图所示,在程序资源视图中添加一个自定义的对话框:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/aa6d5b827650ce4e3fb14a2c83e2695a)
对话框比较简单,只是添加了一个编辑框控件和一个显示提示文字的静态文本控件,另外的OK按钮和Cancel按钮是系统自动添加的。
二、定义对话框类
有了对话框资源,还要定义一个与之关联的对话框类才可以使用。如下图所示定义对话框类:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/6cb3d1496993c707dde339d9df1694f6)
有了对话框类,为了使其它对象(如CSysMenuView对象)可以获取对话框中的控件信息,需要为对话框类添加一个公共成员变量,以保存编辑框的输入值。这里定义一个字符串变量name,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/d740298bf21debb6956588dbcfe8d6af)
获取对话框中编辑控件输入值的方法有多种,下图是通过定义编辑框控件的关联变量(控件的成员变量有两种类型,一种是值变量,保存用户输入;一种是控件变量,代表当前控件对象)m_Name来获取输入值:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/9a4674fe7cb038f591582b1e4a152f3a)
也可以实验一下定义一个编辑框的控件变量m_Edit,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/870b03a5fd3718e5aa7bb19909b3606a)
为控件添加成员变量后,系统自动生成以下代码:
//MyDialog.h
......
class
MyDialog : public CDialog
{
// Construction
public:
CString name;//前面定义的MyDialog类的公共成员变量,用于在对话框以外获取数据信息
MyDialog(CWnd* pParent = NULL);
// standard constructor
// Dialog Data
//{{AFX_DATA(MyDialog)
enum { IDD = IDD_DIALOG1 };
CEdit m_Edit;
CString m_Name;
//}}AFX_DATA
......
//MyDialog.cpp
......
MyDialog::MyDialog(CWnd* pParent )
: CDialog(MyDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(MyDialog)
m_Name = _T("");//在构造函数中初始化控件成员变量
//}}AFX_DATA_INIT
}
//对话框数据交换函数
void
MyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(MyDialog)
//关联编辑控件及其成员变量
DDX_Control(pDX, IDC_EDIT1, m_Edit);
DDX_Text(pDX, IDC_EDIT1, m_Name);
//}}AFX_DATA_MAP
}
......
下面为对话框的OK按钮添加消息处理函数。可以在ClassWizard类向导中为对话框的OK按钮控件(编号IDOK)添加消息处理,也可以在对话框资源图中双击OK按钮添加消息。OK按钮的消息处理函数代码如下:
void
MyDialog::OnOK()
{
//第一种获取编辑框输入值的方法(IDC_EDIT1是编辑框编号ID),GetDlgItem是MFC类Cdialog集成
//的Win32函数
//GetDlgItem(IDC_EDIT1)->GetWindowText(name);
//或者:
//GetDlgItemText(IDC_EDIT1,name);
//第二种方法
//UpdateData(TRUE);//更新数据以使m_Name获取编辑框输入值
//name=m_Name;
//第三种方法,利用编辑框的控制变量m_Edit读取输入值
m_Edit.GetWindowText(name);
CDialog::OnOK();
}
三、自定义对话框类的使用
首先在主窗口的工具栏控件中添加一个按钮,点击该按钮将弹出自定义的对话框。如下图所示,在工具栏资源图中添加一个按钮位图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/c61271139653f9e592f6751b1a575905)
双击该按钮可以编辑它的控件编号等属性。
如下图所示,在CSysMenuView视图类中添加按钮消息处理函数:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/28/632f046ed5dd559ccbaf20deabf92643)
在生成的OnBUTTONName()函数中添加如下代码:
void
CSysMenuView::OnBUTTONName()
{
// TODO: Add your command handler code here
MyDialog myDia;//定义对话框类对象
myDia.DoModal();//显示自定义对话框
CClientDC mydc(this);
mydc.TextOut(10,100,myDia.name);//获取并在窗口客户区显示对话框编辑控件的值
}
继续上一节使用的程序例子。如下图所示,在程序资源视图中添加一个自定义的对话框:
对话框比较简单,只是添加了一个编辑框控件和一个显示提示文字的静态文本控件,另外的OK按钮和Cancel按钮是系统自动添加的。
二、定义对话框类
有了对话框资源,还要定义一个与之关联的对话框类才可以使用。如下图所示定义对话框类:
有了对话框类,为了使其它对象(如CSysMenuView对象)可以获取对话框中的控件信息,需要为对话框类添加一个公共成员变量,以保存编辑框的输入值。这里定义一个字符串变量name,如下图所示:
获取对话框中编辑控件输入值的方法有多种,下图是通过定义编辑框控件的关联变量(控件的成员变量有两种类型,一种是值变量,保存用户输入;一种是控件变量,代表当前控件对象)m_Name来获取输入值:
也可以实验一下定义一个编辑框的控件变量m_Edit,如下图所示:
为控件添加成员变量后,系统自动生成以下代码:
//MyDialog.h
......
class
MyDialog : public CDialog
{
// Construction
public:
CString name;//前面定义的MyDialog类的公共成员变量,用于在对话框以外获取数据信息
MyDialog(CWnd* pParent = NULL);
// standard constructor
// Dialog Data
//{{AFX_DATA(MyDialog)
enum { IDD = IDD_DIALOG1 };
CEdit m_Edit;
CString m_Name;
//}}AFX_DATA
......
//MyDialog.cpp
......
MyDialog::MyDialog(CWnd* pParent )
: CDialog(MyDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(MyDialog)
m_Name = _T("");//在构造函数中初始化控件成员变量
//}}AFX_DATA_INIT
}
//对话框数据交换函数
void
MyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(MyDialog)
//关联编辑控件及其成员变量
DDX_Control(pDX, IDC_EDIT1, m_Edit);
DDX_Text(pDX, IDC_EDIT1, m_Name);
//}}AFX_DATA_MAP
}
......
下面为对话框的OK按钮添加消息处理函数。可以在ClassWizard类向导中为对话框的OK按钮控件(编号IDOK)添加消息处理,也可以在对话框资源图中双击OK按钮添加消息。OK按钮的消息处理函数代码如下:
void
MyDialog::OnOK()
{
//第一种获取编辑框输入值的方法(IDC_EDIT1是编辑框编号ID),GetDlgItem是MFC类Cdialog集成
//的Win32函数
//GetDlgItem(IDC_EDIT1)->GetWindowText(name);
//或者:
//GetDlgItemText(IDC_EDIT1,name);
//第二种方法
//UpdateData(TRUE);//更新数据以使m_Name获取编辑框输入值
//name=m_Name;
//第三种方法,利用编辑框的控制变量m_Edit读取输入值
m_Edit.GetWindowText(name);
CDialog::OnOK();
}
三、自定义对话框类的使用
首先在主窗口的工具栏控件中添加一个按钮,点击该按钮将弹出自定义的对话框。如下图所示,在工具栏资源图中添加一个按钮位图:
双击该按钮可以编辑它的控件编号等属性。
如下图所示,在CSysMenuView视图类中添加按钮消息处理函数:
在生成的OnBUTTONName()函数中添加如下代码:
void
CSysMenuView::OnBUTTONName()
{
// TODO: Add your command handler code here
MyDialog myDia;//定义对话框类对象
myDia.DoModal();//显示自定义对话框
CClientDC mydc(this);
mydc.TextOut(10,100,myDia.name);//获取并在窗口客户区显示对话框编辑控件的值
}
相关文章推荐
- VC编程技术点滴(七)简单的数据库应用开发
- SDK编程:任务栏TaskBar与对话框Dialog实现一个简单功能
- 简单编程(十八)定义一个数组来存储12个学生的成绩
- VC编程技术点滴(八)如何在视图类中获取主窗口指针
- 简单编程(十九)定义一个数组来存储12个学生的成绩。统计各成绩等级
- 简单编程(十四)定义一个方法能够判断并返回两个整数的最大值,并调用自己的方法测试是否正确。
- 一个简单的非模式对话框在VC下的内存泄漏!
- VC编程技术点滴(四)鼠标绘制任意图形
- vc编程中遇到一个编译问题,原来是少了LIB文件 (ZT)
- [转自Oracle官方技术博客]对于一个非空字段定义的表导出后,再imp时候报错ORA-01400: cannot insert NULL into xxx 为何呢?
- 一个socket编程的简单示例
- c++定义一个简单的银行账户类
- 初学者入门:一个COM/ATL简单项目 - VC编程
- 定义一个简单的移动端轻击事件方法tap
- 【socket编程】一个简单的基于UDP的客户/服务端例子(vs2008)
- VC++简单数据库编程(一)
- Socket编程回顾,一个最简单服务器程序
- VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
- 如何定义一个数组,编程打印它的全排列
- linux socke编程实例:一个简单的echo服务器程序