MFC对话框文档格式.docx

上传人:b****1 文档编号:13340442 上传时间:2022-10-09 格式:DOCX 页数:24 大小:55.78KB
下载 相关 举报
MFC对话框文档格式.docx_第1页
第1页 / 共24页
MFC对话框文档格式.docx_第2页
第2页 / 共24页
MFC对话框文档格式.docx_第3页
第3页 / 共24页
MFC对话框文档格式.docx_第4页
第4页 / 共24页
MFC对话框文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

MFC对话框文档格式.docx

《MFC对话框文档格式.docx》由会员分享,可在线阅读,更多相关《MFC对话框文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

MFC对话框文档格式.docx

选择”Dialog”->

单击”New”按钮

3、为新建资源添加对应的类:

View->

ClassWizard->

将类名取为”CTestDlg”,Baseclass选择CDialog->

OK按钮

在MFC中,对资源的操作通常都是通过一个与资源相关的类来完成的。

对话框资源有一个相应的基类:

CDialog。

4、在菜单栏中添加菜单项Dialog,其ID设置为IDM_DIALOG。

利用ClassWizard为该菜单项添加COMMAND命令消息响应函数。

其中Classname选择CDlgView。

5、上步会在DlgView源文件中生成voidCDlgView:

:

OnDialog()函数,在此函数中创建不同的对话框:

(1)、创建模态对话框

CTestDlgdlg;

//记得添加#include"

TestDlg.h"

dlg.DoModal();

//DoModal函数本身有显示模态对话框的作用

(2)、创建非模态对话框,由于生命周期的原因,不能将对话框对象定义为局部变量,可以:

ⅰ将dlg定义为全局变量

dlg.Create(IDD_DIALOG1,this);

dlg.ShowWindow(SW_SHOW);

此时必须重写ID为IDOK按钮的OnOK虚函数且不要再调用基类的OnOK函数,以免出错。

同样也须重写ID为IDCANCEL按钮的OnCancel虚函数。

如:

voidCTestDlg:

OnOK()

{

DestroyWindow();

}

ⅱ定义一个指针,在堆上分配内存

CTestDlg*PDlg=newCTestDlg;

PDlg->

Create(IDD_DIALOG1,this);

ShowWindow(SW_SHOW);

PDlg指针是局部变量,当它的生命周期结束时,它所保存的内存地址就丢失了,那么在程序中也就无法再引用到它所指向的那块内存了。

解决办法有两种:

一是将该指针定义为DlgView的成员变量,然后在View类的析构函数中调用delete函数。

二是在CTestDlg类

中重载PostNcDestroy虚函数,在该虚函数中调用delete函数释放指针所指向的内存。

voidCTestDlg:

PostNcDestroy()

{

deletethis;

CDialog:

PostNcDestroy();

}

三、动态创建按钮

1、新建对话框资源,ID为IDD_DIALOG1。

2、添加一个按钮,ID设为IDC_BTN_ADD,Caption设为Add。

3、为IDC_BTN_ADD按钮添加BN_CLICKED消息响应函数,其中Classname选择CTestDlg。

(1)、使用标识来确定按钮是否创建,编写消息响应函数如下:

OnBtnAdd()

//m_bIsCreated是全局BOOL类型变量,标示点击IDC_BTN_ADD按钮时,m_btn按钮是否创建,在CTestDlg构造函数中初始化为FALSE。

m_btn是全局的CButton变量。

if(m_bIsCreated==FALSE)//还未动态生成按钮

{

m_btn.Create("

New"

BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,

CRect(0,0,50,50),this,123);

//生成动态按钮

m_bIsCreated=TRUE;

//表示按钮已经动态生成

}

else

m_btn.DestroyWindow();

//动态按钮已创建,现销毁

m_bIsCreated=FALSE;

//表示动态按钮已销毁

创建按钮时,没有指定WS_VISIBLE风格,那么随后一定要调用这个按钮对象的ShowWindow函数,将该按钮控件显示出来。

(2)、CButton是CWnd子类,所以它有一个m_hWnd窗口句柄,可以通过该句柄判断按钮是否创建,编写消息响应函数如下:

if(!

m_btn.m_hWnd)

按钮的单击、列表框的选择这类消息都属于通告消息。

四、控件的访问

1、静态文本控件的消息响应:

(1)、创建对话框资源,ID为IDD_DIALOG1,如下:

按住Ctrl键再点击控件,可以选择多个控件。

选择多个控件后可以用菜单栏中的Layout子菜单对这些控件进行布局。

也可使用工具栏的相应按钮来布局。

若要再添加一个对话框中已有类型的控件,可以按住Ctrl键,并用鼠标拖动这个已有控件到需要的位置,然后松开鼠标键,在松开Ctrl键,即可实现对已有控件的复制和粘贴功能。

(2)、通过ClassWizard为静态文本控件IDC_NUMBER1添加BN_CLICKED消息处理函数如下:

OnNumber1()

CStringstr;

//逗号表达式的结果是最后一个表达式的返回值。

if(GetDlgItem(IDC_NUMBER1)->

GetWindowText(str),str=="

Number:

"

GetDlgItem(IDC_NUMBER1)->

SetWindowText("

Text:

);

静态文本控件在默认状态下是不发送通告消息的。

为了使一个静态文本控件能够响应鼠标单击消息,需要两个步骤:

一是改变它的ID;

二是在它的属性对话框Style选项卡下选中Notify选项。

2、编辑框控件的访问

方式一(GetDlgItem()的方式):

intnum1,num2,num3;

charch1[10],ch2[10],ch3[10];

//获得静态文本控件IDC_EDIT1的文本,将该文本放入ch1,10表示最大字符数

GetDlgItem(IDC_EDIT1)->

GetWindowText(ch1,10);

GetDlgItem(IDC_EDIT2)->

GetWindowText(ch2,10);

num1=atoi(ch1);

//将字符数组转换成整型

num2=atoi(ch2);

num3=num1+num2;

//将num3转换成字符数组保存到ch3中,10表示十进制

itoa(num3,ch3,10);

GetDlgItem(IDC_EDIT3)->

SetWindowText(ch3);

方式二(GetDlgItemText()的方式):

//以下语句相当于GetDlgItem(IDC_EDIT1)->

GetDlgItemText(IDC_EDIT1,ch1,10);

GetDlgItemText(IDC_EDIT2,ch2,10);

SetDlgItemText(IDC_EDIT3,ch3);

方式三(GetDlgItemInt()的方式):

//GetDlgItemInt返回指定控件的文本,并将其转换为一个整型数值

num1=GetDlgItemInt(IDC_EDIT1);

num2=GetDlgItemInt(IDC_EDIT2);

SetDlgItemInt(IDC_EDIT3,num3);

方式四(将控件和整型变量相关联):

ⅰ、使用ClassWizard为IDC_EDIT1控件添加变量m_num1,其中Category:

选择Value,Variabletype:

选择int。

同理可为其他控件添加变量。

ClassWizard还可设置变量的取值范围。

MFC中DDV_为前缀的函数用于数据校验,DDX_为前缀的函数用于数据交换。

ⅱ、使用UpdateData函数实现控件和变量数据的交换:

//将控件中的数据传到变量中

UpdateData(TRUE);

m_num3=m_num1+m_num2;

UpdateData(FALSE);

//将变量的数据传回控件

对话框控件与类成员变量的关联是在类的DoDataExchange函数中实现的。

DoDataExchange函数主要用来完成对话框数据的交换和校验。

UpdateData函数会去调用DoDataExchange函数。

方式五(将控件和控件变量相关联):

ⅰ、使用ClassWizard为IDC_EDIT1等控件添加控件变量,即代表控件本身。

其中Category:

选择Control,Variabletype:

选择CEdit。

ⅱ、编写函数如下:

m_edit1.GetWindowText(ch1,10);

//m_edit1控件变量就相当于IDC_EDIT1控件

m_edit2.GetWindowText(ch2,10);

m_edit3.SetWindowText(ch3);

方式六(利用PlatformSDK的SendMessage函数):

intnum1,num2,num3;

:

SendMessage(GetDlgItem(IDC_EDIT1)->

m_hWnd,

WM_GETTEXT,10,(LPARAM)ch1);

SendMessage(GetDlgItem(IDC_EDIT2)->

WM_GETTEXT,10,(LPARAM)ch2);

ito

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1