好文档 - 专业文书写作范文服务资料分享网站

Visual_C++MFC入门教程(免费版)

天下 分享 时间: 加入收藏 我要投稿 点赞

木有页眉

? ? ? ?

PSWIZB_BACK 显示“上一步”按钮 PSWIZB_NEXT 显示“下一步”按钮 PSWIZB_FINISH 显示“完成”按钮

PSWIZB_DISABLEDFINISH 显示禁止的“完成”按钮

void CPropertySheet::SetWizardButtons( DWORD dwFlags )也可以在其他地方调用,比如说在显示最后一页时先显示禁止的“完成”按钮,在完成某些操作后再显示允许的“完成”按钮。 在使用向导对话框时可以通过重载一些函数来达到控制的目的:

? ? ?

void CPropertyPage::OnWizardBack() 按下了“上一步”按钮。返回0表示有系统决定需要显示的页面,-1表示禁止页面转换,如果希望显示一个特定的页面需要返回该页面的ID号。 void CPropertyPage::OnOnWizardNext() 按下了“下一步”按钮。返回值含义与void CPropertyPage::OnWizardBack()相同。

void CPropertyPage::OnWizardFinish() 按下了“完成”按钮。返回FALSE表示不允许继续,否则返回TRUE向导对话框将被结束。

在向导对话框的DoModal()返回值为ID_WIZFINISH或IDCANCEL。下面的代码演示了如何创建并使用向导对话框:

//创建有模式向导对话框 void CMy56_s1Dlg::OnWiz() { CSheet sheet; sheet.SetWizardMode(); int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL }

//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮 BOOL CPage1::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT); return CPropertyPage::OnSetActive(); }

BOOL CPage2::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH); return CPropertyPage::OnSetActive();

}

下载本节例子。

5.7 使用通用对话框

71

木有页眉

在Windows系统中提供了一些通用对话框如:文件选择对话框如图,

颜色选择对话框如图,

字体选择对话框如图。

72

木有页眉

在MFC中使用CFileDialog,CColorDialog,CFontDialog来表示。一般来讲你不需要派生新的类,因为基类已经提供了常用的功能。而且在创建并等待对话框结束后你可以通过成员函数得到用户在对话框中的选择。

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );参数意义如下:

? ? ? ? ?

?

bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。 lpszDefExt 指定默认的文件扩展名。 lpszFileName 指定默认的文件名。 dwFlags 指明一些特定风格。

lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如: \Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||\文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 pParentWnd 为父窗口指针。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:

? ? ? ? ? ?

CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\\test\\test1.txt

CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt

CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1 POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。 CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

CColorDialog颜色选择对话框的使用:首先通过CColorDialog::CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL )构造一个对象,其中clrInit为初始颜色。通过调用DoModal()创建对话框,在返回后调用COLORREF CColorDialog::GetColor( )得到用户选择的颜色值。

CFontDialog字体选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFontDialog::CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );构造一个对象,其中参数lplfInitial指向一个LOGFONG结构(该结构介绍请见2.2 在窗口中输出文字),如果该参数设置为NULL表示不设置初始字体。pdcPrinter指向一个代表打印机设备环境的DC对象,若设置该参数则选择的字体就为打印机所用。pParentWnd用于指定父窗口。通过调用DoModal()创建对话框,在返回后通过调用以下函数来得到用户选择:

?

?

void CFontDialog::GetCurrentFont( LPLOGFONT lplf );用来获得所选字体的属性。该函数有一个参数,该参数是指向LOGFONT结构的指针,函数将所选字体的各种属性写入这个LOGFONT结构中。

CString CFontDialog::GetFaceName( ) 得到所选字体名字。

73

木有页眉

? ? ?

int CFontDialog::GetSize( ) 得到所选字体的尺寸(以10个象素为单位)。 COLORREF CFontDialog::GetColor( ) 得到所选字体的颜色。 BOOL CFontDialog::IsStrikeOut( ) BOOL CFontDialog::IsUnderline( ) BOOL CFontDialog::IsBold( ) BOOL CFontDialog::IsItalic( )

得到所选字体的其他属性,是否有删除线,是否有下划线,是否为粗体,是否为斜体。

5.8 建立以对话框为基础的应用

我认为初学者使用以对话框为基础的应用是一个比较好的选择,因为这样一来可以摆脱一些开发界面的麻烦,此外也可以利用ClassWizard自动的添加消息映射。

在VC中提供了生成“以对话框为基础的应用”的功能,你所需要选择的是在使用AppWizard的第一步选择“对话框为基础的应用”,如图。

VC会生成包含有应用派生类和对话框派生类的代码。在应用类的InitInstance()成员函数中可以看到如下的代码:

BOOL CMy58_s1App::InitInstance() { CMy58_s1Dlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } return FALSE; }

74

木有页眉

这是产生一个有模式对话框并创建它,在对话框返回后通过返回FALSE来直接退出。在设计时通过编辑对话框资源你可以设计好界面,然后通过ClassWizard映射消息来处理客户的输入,由于前几节已经讲过本节也就不再重复。

同样基于对话框的应用也同样可以使用属性对话框做为界面,或者是通过使用经过派生的通用对话框作为界面。

提示:当你使用有模式对话框时最开始是无法隐藏窗口的,而只能在对话框显示后再隐藏窗口,所以这会造成屏幕的闪烁。一个解决办法就是采用无模式的对话框,无模式的对话框在创建后是隐藏的,直到你调用ShowWindow(SW_SHOW)才会显示。相关代码如下:

BOOL CMy58_s1App::InitInstance() { //必须新生成一个对象,而不能使用局部变量 CMy58_s1Dlg* pdlg=new CMy58_s1Dlg; m_pMainWnd = pdlg; pdlg->Create(); return TRUE; }

5.9 使用对话框作为子窗口

使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。 简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,如图。

接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:

int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //创建子窗口 m_dlgChild.Create(IDD_CHILD_DLG,this); //重新定位 m_dlgChild.MoveWindow(0,0,400,200); //显示窗口 m_dlgChild.ShowWindow(SW_SHOW); return 0; }

75

Visual_C++MFC入门教程(免费版)

木有页眉????PSWIZB_BACK显示“上一步”按钮PSWIZB_NEXT显示“下一步”按钮PSWIZB_FINISH显示“完成”按钮PSWIZB_DISABLEDFINISH显示禁止的“完成”按钮voidCPropertySheet::SetWizardButtons(DWORDdwFlag
推荐度:
点击下载文档文档为doc格式
5sv4n9qpyw5s23r4ajle
领取福利

微信扫码领取福利

微信扫码分享