当前位置:首页 > Windows程序 > 正文

对话框编程基本技术(1)

2021-03-19 Windows程序

Windows-对话框编程基本技术(1)
一 对话框简介
1.对话框实际就是一个窗口。
继承层次:

class CDialog : public CWnd

2.常用控件
在MFC中,所有的控件类都派生于CWnd。如图:

技术分享


3.对话框种类
(1).模态对话框

#if 1 //创建模态对话框 CTestDlg dlg; dlg.DoModal(); #endif

(2).非模态对话框
栈上创建

#if 1 //创建局部的对话框,函数调用完毕就生命周期即结束 CTestDlg dlg; dlg.Create(IDD_DIALOG1, this); dlg.ShowWindow(SW_SHOW); #endif

堆上创建

#if 1 //在堆上创建对话框对象,生命周期需要自己控制 CTestDlg* pDlg = new CTestDlg; pDlg->Create(IDD_DIALOG1, this); pDlg->ShowWindow(SW_SHOW); #endif

在堆上创建的变量需要手动的释放,但是在对话框中我们可以重写一个基类的虚函数来实现delete操作,如下

void CTestDlg::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 #if 1 delete this; #endif CDialog::PostNcDestroy(); }

二 对话框中动态创建按钮
我们实现在对话框中单击某个按钮时,即在对话框中控件的通告消息响应函数中动态创建一个按钮。
方法一:

#if 0 //动态创建一个对话框,只能创建一个按钮,多创建会出错 this->m_btn.Create(_T("New"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 100), this, 123); #endif

方法二:

#if 0 //第一种方法,利用类的BOOL成员变量,需要将BOOL变量设置为成员变量 //没有创建就创建 if (!m_bIsCreated) { m_btn.Create(_T("New"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 100), this, 123); m_bIsCreated = TRUE; } //创建了之后就先销毁 else { m_btn.DestroyWindow(); m_bIsCreated = FALSE; } #endif

方法三:

#if 0 //第二种方法:利用静态BOOL成员变量 //局部静态变量来作为是否创建过按钮的标识 static BOOL IsCreated = FALSE; //没有创建就创建 if (!IsCreated) { m_btn.Create(_T("New"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 100), this, 123); IsCreated = TRUE; } //创建了之后就先销毁 else { m_btn.DestroyWindow(); IsCreated = FALSE; } #endif

方法四:

#if 0 //第三种方法,最简单,最直接的方法:利用CWnd的成员变量m_hWnd //因为每一个CWnd或者它的子类自身都有一个m_hWnd成员变量,用来保存与窗口对象相关联的窗口句柄 if (!m_btn.m_hWnd) { m_btn.Create(_T("New"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 100), this, 123); } else { m_btn.DestroyWindow(); } #endif

以上的几种方法,最后一种最为简单,但是要求我们需要对CWnd的成员变量m_hWnd有清晰的理解。

三 对话框中的控件的访问

1.控件的调整
如果在对话框资源中编辑了控件,并且需要将他们手动对齐,则可以利用VS提供的开发工具来完成,如下图:

技术分享

2.静态文本控件
静态文本控件默认不发送通告消息,如果我们需要让他响应通告消息,需要两个步骤,第一步:改变它的ID,第二步:在属性对话框中选中notify选项。

3.编辑框控件
(1).我们实现下面的功能,前面两个编辑框输入的数据相加,结果放在第三个编辑框中。下面是VC中可行的几种方法。

技术分享


第一种:

#if 0 //定义三个变量代表输入的数值 int num1(0); int num2(0); int num3(0); //将输入的数值转换成字符串 CString str1; CString str2; CString str3; //获取控件的文本 GetDlgItem(IDC_EDIT1)->GetWindowText(str1); GetDlgItem(IDC_EDIT2)->GetWindowText(str2); //转换为数字 num1 = _ttoi(str1); num2 = _ttoi(str2); //数值相加 num3 = num1 + num2; //格式化到str3中 str3.Format(_T("%d"), num3); //设置文本到第三个编辑框 GetDlgItem(IDC_EDIT3)->SetWindowText(str3); #endif

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/63669.html