三 MFC编程入门之对话框

1 创建对话框模板和修改对话框属性

Application Type->Dialog based

 

ID:对话框ID

Caption:对话框标题

Maximize:最大化按钮

Minimize:最小化按钮

Style:对话框类型,overlapped重叠窗口  popup弹出式窗口  child子窗口

System Menu:是否带有标题栏左上角的系统菜单

Title Bar:是否带有标题栏

Font:字体类型和字体大小

Owner Draw :更改控件

 

2 为对话框添加控件

View-> Toolbox(工具箱)

 

3 创建对话框类和添加控件变量

创建对话框类:Resource View->Dialog->Insert Dialog  之后选中对话框,右击,选择AddClass

创建控件变量:选中控件,右击,选择Add Variable

 

DoDataExchange

DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,

由UpdateData()函数再去自动调用DoDataExchange()的

 

BOOL UpdateData(BOOL bSaveAndValidate =TRUE);

TRUE:控件->变量

FALSE:变量->控件

 

4 为控件添加消息处理函数

a.使用Class Wizard添加消息处理函数:选中控件,右击,选择Class Wizard

b.通过“Add EventHandler...”添加处理函数:选中控件,右击,选择Add Event Handler

c.在按钮的属性视图中添加消息处理函数:选中控件,右击,选择属性,点击Control Events(类似闪电标志)

d.双击按钮添加消息处理函数

 

OnBnClickedAddButton:

// 将各控件中的数据保存到响应的变量

UpdateData(TRUE);

// 将被加数和加数的加和赋值给m_editSum

m_editSum = m_editSummand + m_editAddend;

// 根据各变量值更新相应的控件。和的编辑框会显示m_editSum的值

UpdateData(FALSE);

 

5 设置对话框控件的Tab顺序

主菜单->Format->Tab Order,直接依次点击即可修改

 

6 模态对话框及其弹出过程

模态对话框:其他窗口无法与用户交互

非模态对话框:其他窗口仍能响应用户输入

 

INT_PTR nRes;                            // 用于保存DoModal函数的返回值

CTipDlg tipDlg;                            // 构造对话框类CTipDlg的实例

nRes = tipDlg.DoModal();        // 弹出对话框

if(nRes == IDCANCEL)               // 判断对话框返回值是否为IDCANCEL,如果是则return,否则就继续向下执行

         return;

 

注:都说DoModal返回值为OK或CANCEL键的ID,其实,这种说法是错误的。

在关闭此模态对话框时,返回值(IDOK或IDCANCEL)为关闭对话框所采用的方式,

默认对话框关闭方式有2种:OnOK(); OnCancel();

 

7 非模态对话框的创建及显示

// 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建

if(NULL == m_pTipDlg)

{

         //创建非模态对话框实例

         m_pTipDlg= new CTipDlg();

         m_pTipDlg->Create(IDD_TIP_DIALOG,this);

}

 

// 显示非模态对话框实例

m_pTipDlg->ShowWindow(SW_SHOW);

 

// 删除非模态对话框对象

delete m_pTipDlg;

 

8 属性页对话框及相关类的介绍

a.分类

一般属相页对话框:通过标签切换各个页面

向导对话框:通过点击next等按钮来切换页面

 

b.相关类

CPpropertyPage : CDialog

用于处理某单个的属性页

(1)构造函数

CPropertyPage();

CPropertyPage(

         UINTnIDTemplate,   //对话框资源ID

         UNITNIDCaption = 0,  //标题字符串资源ID,默认设为0

         DWORDdwSize = sizeof(PROPSHEETPAGE)

);

 

CPropertyPage(

         LPCTSTRlpszTemplateName,

         UNITNIDCaption = 0,

         DWORDdwSize = sizeof(PROPSHEETPAGE)

);

 

(2)CancelToClose

进行某些不可恢复操作后,OK按钮改为Close按钮,并禁用Cancel按钮

 

(3)SetModified

激活或进行Apply按钮

void SetModified(BOOL bChanged = TRUE);

 

(4)可重载函数

OnOK

OnCancel

OnQueryCancel

OnApply

OnReset

OnKillActive

OnSetActive

OnWizardBack

OnWizardFinish

OnWizardNext

 

CPropertySheet  : CWnd

属性表类,负责加载、打开或删除属相页

(1)构造函数

CPropertySheet();

 

CPropertySheet(

         UNITnIDCaption,    //标题的字符串资源ID

         CWnd*pParentWnd = NULL,

         UINTiSelectPage = 0

);

 

CPropertySheet(

         LPCTSTRpszCaption,//标题字符串

         CWnd*pParentWnd = NULL,//父窗口

         UINTiSelectPage = 0   //活动属性页的索引

);

 

CPropertyPage *GetActivePage() const;   当前活动属性页对象的指针

CPropertyPage *GetPage(int nPage)const;  目标属相页对象的指针

int GetPageCount() const;  属性页的数量

int GettPageIndex(CPropertyPage*pPage);  属性页对象的索引

BOOL SetActivePage(int nPage);

BOOL SetActivePage(CPropertyPage*pPage);  设置某个属性页为活动属性页

void SetTitle(LPCTSTR lpszText, UINTnStyle);  设置标题,nStyle:0或PSH_PROPTITLE

void AddPage(CPropertyPage *pPage);   添加新的属性页

void PressButton(int nButton);   模拟按下某指定的按钮

PSBTN_BACK

PSBTN_NEXT

PSBTN_FINISH

PSBTN_OK

PSBTN_APPLYNOW

PSBTN_CANCEL

PSBTN_HELP

void RemovePage(CPropertyPage *pPage);

void RemovePage(int nPage);   删除某属性页

void SetWizardMode();   设置属性页对话框为向导对话框模式

void SetWizardButtons(DWORD dwFlags);  设置向导按钮  PSWIZB_NEXT, PSWIZB_BACK, PSWIZB_FINISH

void SetFinishText(LPCTSTR lpszText);

 

9 向导对话框的创建及显示

a. 创建属性页对话框资源

Resource View->Dialog->Insert Dialog

 

ID:IDD_SUMMAND_PAGE Caption:被加数页 style:ChildBorder:Thin

ID:IDD_ADDEND_PAGE Caption:被加数页style:Child Border:Thin

ID:IDD_ADD_PAGE Caption:被加数页style:Child Border:Thin

 

b. 创建属性页

创建属性页类:右击属性页对话框,选择“Add Class”

“下一步”按钮添加方法:Class View->Additon->CSummandPage->右击->选择属性->按下“overrides”按钮->找到OnSetActive

 

c. 创建属性表类

Solution ExploreràAddtionàAdd ClassàMFC ClassàAdd

# #include "SummandPage.h"

CSummandPage summandPage;

AddPage(&m_summandPage);  

 

d. 显示向导对话框

在加法计算器对话框中添加使用说明IDC_INSTRUCT_BUTTON按钮,为IDC_INSTRUCT_BUTTON按钮添加点击消息的处理函数OnBnClickedInstructButton

 

// 创建属性表对象  

CAddSheet sheet(_T(""));

// 设置属性对话框为向导对话框

sheet.SetWizardMode();

// 打开模态向导对话框

sheet.DoModal();


10 一般属性对话框的创建及显示

 

11 消息对话框

a. MessageBox

int MessageBox(

LPCTSTR lpszText,                         //需要显示的消息字符串

LPCTSTR lpszCaption=NULL,            //消息对话框的标题字符串

UINT nType=MB_OK);                        //消息对话框的风格和属性,MB_OKCANCEL | MB_ICONQUESTION

 

nType 取值

参数说明

MB_ABORTRETRY

终止重试忽略按钮

MB_OK

确定按钮

MB_OKCANCEL

确定取消按钮

MB_RETRYCANCEL

重试取消按钮

MB_YESNO

按钮

MB_YESNOCANCEL

取消按钮

 

nType 取值

显示图标

MB_ICONEXCLAMTION
MB_ICONWARNING

MB_ICONASTERISK
MB_ICONINFORMATION

MB_ICONQUESTION

MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR

 

 

b. AfxMessageBox

int AfxMessageBox(

LPCTSTR lpszText,

UINT nType=MB_OK,

UINT nIDHelp=0    //此消息的帮助的上下文ID

);

 

c. 返回值

IDABORT:终止

IDCANCEL:取消

IDIGNORE:忽略

IDNO:否

IDOK:确定

IDRETRY:重试

IDYES:是

 

12 文件对话框

例子:Example17

a. 成员变量

explicit CFileDialog(

BOOL bOpenFileDialog,   //对话框类型,TRUE:打开文件对话框  FALSE:保存文件对话框

LPCTSTR lpszDefExt = NULL,   //默认的文件扩展名

LPCTSTR lpszFileName = NULL,   //初始文件名

DWORD dwFlags =OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,  //文件对话框的属性

LPCTSTR lpszFilter = NULL,   //文件过滤器,

CWnd *pParentWnd = NULL,  //文件对话框的父窗口的指针

DWORD dwSize = 0,                  //OPENFILENAME结构体的大小

BOOL bVistaStyle = TRUE   //指定文件对话框的风格,TRUE:Vista风格

);

 

OFN_HIDEREADONLY:隐藏只读选项

OFN_OVERWRITEPROMPT:弹出文件覆盖选择选项

 

static TCHAR BASED_CODEszFilter[] = _T("Chart Files (*.xlc)|*.xlc|Worksheet Files(*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files(*.*)|*.*||");

 

// 打开文件对话框

CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); 

// 保存文件对话框

CFileDialog fileDlg(FALSE, _T("txt"),_T("my"), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter, this);

 

b. 成员函数

GetFileExt()

GetFileName()

GetFileTitle()

GetFolderPath()

GetNextPathName()

GetPathName()

GetReadOnlyPref()

GetStartPosition()

 

13 字体对话框

例子:Example18    TestCtrl

CFontDialog(

LPLOGFONT lplflnitial = NULL,   //字体特征

DWORD dwFlags = CF_EFFECTS|CF_SCREENFONTS,  //选择字体的一个或多个属性

CDC* pdcPrinter = NULL,   //指向一个打印设备上下文的指针

CWnd *pParentWnd = NULL  //指向字体对话框父窗口的指针

);

 

typedef struct tagLOGFONT {

   LONG lfHeight;   //高度

   LONG lfWidth;          //宽度

   LONG lfEscapement;

   LONG lfOrientation;         //方向

   LONG lfWeight;        //粗细

   BYTE lfItalic;              //倾斜

   BYTE lfUnderline;  //下划线

   BYTE lfStrikeOut;

   BYTE lfCharSet;

   BYTE lfOutPrecision;

   BYTE lfClipPrecision;

   BYTE lfQuality;

   BYTE lfPitchAndFamily;

   TCHAR lfFaceName[LF_FACESIZE];  //字体名

} LOGFONT;

 

typedef struct {

   DWORD lStructSize;

   HWND hwndOwner;

   HDC hDC;

   LPLOGFONT lpLogFont;

   INT iPointSize;

   DWORD Flags;

   COLORREF rgbColors;

   LPARAM lCustData;

   LPCFHOOKPROC lpfnHook;

   LPCTSTR lpTemplateName;

    HINSTANCE hInstance;

   LPTSTR lpszStyle;

   WORD nFontType;

   INT nSizeMin;

   INT nSizeMax;

} CHOOSEFONT, *LPCHOOSEFONT;

 

CFont m_font;

LOGFONT lf;

CFontDialog fontdlg(&lf);

m_font.CreateFontIndirect(fontdlg.m_cf.lpLogFont);

 

14 颜色对话框

例子:Example19

a. 成员变量

CColorDialog(

         COLORREFclrInit = 0,  //默认选择颜色的颜色值

         DWORDdwFlags = 0,  //自定义颜色对话框功能和外观的属性值

         CWnd*pParentWnd = NULL  //颜色对话框的父窗口的指针

);

 

b. 成员函数

COLORREF GetColor() const;   //返回所选颜色的COLORREF值

BYTE GetRValue(DWORD rgb);

BYTE GetGValue(DWORD rgb);

BYTE GetBValue(DWORD rgb);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值