MFC对话框编程详细学习笔记

本文详细介绍了如何在VS2008中进行MFC对话框编程,包括创建对话框、定义相关类、模态与非模态对话框的创建与操作、动态添加按钮及文本交互等。通过实例解析了对话框控件的访问方法,如GetDlgItem、GetDlgItemText等,并探讨了对话框的收缩与扩展功能、回车键焦点转移等实用技巧。
摘要由CSDN通过智能技术生成

        因最近研究工作要用到MFC,故再次重温了孙鑫老师的MFC对话框编程,因所用的编译软件为VS2008,与视频中孙老师使用的VC++6.0有很大出入,造成很大不便,我通过各方查找,实现了VS2008相对应于VC++6.0的方法。现将对话框编程整个视频的详细内容分享如下,希望对有缘看到的朋友提供方便。笔者水平有限,难免有不足之处,欢迎批评指正。

一.准备工作

1.创建一个MFC Application.

File->New->Project->Visual C++->MFC->MFC Application.输入项目名称Menu后,点击NEXTApplication type->Single document.建议取消勾选下方的Use Unicode libraries,不然有时候会出错。然后直接点Finish。完成MFC程序创建过程。

2.新建对话框

      点击Resource View(资源视图)->Dialog,右键添加资源->选择对话框->新建,控件IDIDD_DIALOG1

    我们会看到,程序刚建好时资源视图对话框中已有IDD_ABOUTBOX,这个是版本信息提示对话框,程序中点击帮助可查看。

点击类视图,对话框资源对应的类:CObject->CCmdTarget->CWnd->CDialog

一个概念:模态对话框和非模态对话框,模态对话框显示时不能执行程序其它任务,而非模态对此无限制。

3.新建一个和对话框相关的类

左键资源视图中刚创建的对话框资源,右键右面的对话框,Add Class->Class Name->CTestDlg,MFC中前缀C代表类。

这样,我们就得到一个新类---CTestDlg,此类就是与刚创建的对话框相对应的,我们对对话框的操作可以在这里进行。

两个重要函数:

构造函数:调用基类CDialog的构造函数,IDD为对话框资源的ID

CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)

: CDialog(CTestDlg::IDD, pParent)

}

CTestDlg::DoDataExchange(),此函数主要用来对话框数据交换和数据校验

void CTestDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

}

4.创建对话框操作

  Menu菜单中增加菜单项”Dialog”,属性设置为PopUp

在该菜单项添加消息响应函数:

Message TypeCOMMANDClass ListCmenuView

 

二.对话框操作

 

1.模态对话框与非模态对话框

   (1)模态对话框

模态对话框的创建函数:CDialog::DoModal()

   模态对话框的关闭函数:CDialog::EndDialog()

#注意:View类中并不知道CTestDlg类型,要包涵头文件”TestDlg.h”,创建过程在View类的OnDialog()函数中。

 

void CmenuView::OnDialog()

{

// TODO: Add your command handler code here

CTestDlg dlg;

dlg.DoModal();//对话框出现就不能在操作其他,除非先关闭它

}

 

(2)非模态对话框

非模态对话框的创建函数:BOOL  CDialog::Create(ID号,父窗口指针)

若父窗口指针设为NULL,对话框父窗口就被设置为主应用程序窗口(此应用中为框架窗口)。

 

CtestDlg dlg;

dlg.Create(IDD_DIALOG1,this);

 

#注意:

对于非模态对话框必须调用ShowWindow();而模态创建函数本身有显示功能  dlg.ShowWindow(SW_SHOW);

非模态对话框不能是局部变量,而模态因为要暂停,程序停止执行,停留在其生命周期内,所以可以是局部变量

非模态也可以是局部变量两种方案:

a.定义Dlg类型的成员变量   

b.定义指针,在堆上分配内存

CTestDlg *pDlg=new CTestDlg();

Dlg->Create(IDD_DIALOG1,this);

pDlg->ShowWindow(SW_SHOW);

//这种方法不能解决内存释放重利用问题,最好是添加成员变量,再用析构函数delete释放

 

#注意:

对于模态对话框,点击OK后窗口被销毁,而非模板对话框没被销毁而是隐藏了。

非模态对话框点击OK时,由基类中OnOK虚函数响应,只隐藏不销毁。

好的方法是类中要覆盖基类的OnOK()在其内部调用DestroyWindow()销毁。

所以,之后示例中我们都使用模态对话框。

 

2.关于对话框的操作

(1)Task:在对话框上添加一个按钮,点击该按钮再动态创建一个按钮

VS2008切换到资源视图,工具栏直接拖动添加名称是Add的按钮。为这个按钮添加消息响应函数,按钮的点击属于通告消息:

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值