`
yingyingol
  • 浏览: 746646 次
文章分类
社区版块
存档分类
最新评论

MFC 制作向导对话框

 
阅读更多

软件环境:visual studio 2008

先看效果图:

下面是具体做法:

1、建立以各基于对话框的MFC应用程序,例如Wizard,在向导的最后一步“生成的类”将对话框的类名改为CStep1Dlg,头文件、cpp文件相应的改过来(不改也可以,只是容易区分而已)。

2、建立的CStep1Dlg类是派生自CDialog的,我们需要将其改为派生自CPropertyPage。

在StepDlg.h文件中,类的定义class CStep1Dlg : public CPropertyPage要改过来,在Step1Dlg.cpp中,有个类是CAboutDlg,这个不要管,要改的是


然后在资源视图里添加两个dialog资源,并添加类,基类选择CPropertyPage.界面设计一下。

现在一共有3个对话框资源了,分别将这三个对话框资源的属性里面的Border、Style、Title Bar设置为Thin、Child、True。Caption等随便设置。

3、给工程添加一个派生自CPropertySheet的类,取名CWizardSheet。

在WizardSheep.h文件里将三个对话框资源的头文件包含进来。

#include "Step1Dlg.h"

#include "Step2Dlg.h"

#include "Step3Dlg.h"

并添加三个成员变量:

private:

CStep1Dlg m_dlgStep1;

CStep2Dlg m_dlgStep2;

CStep3Dlg m_dlgStep3;

在WizardSheet.cpp文件里,找到构造函数(第一个参数类型为LPCTSTR的那个),添加如下代码:

CWizardSheet::CWizardSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)

:CPropertySheet(pszCaption, pParentWnd, iSelectPage)

{

this->AddPage(&m_dlgStep1);

this->AddPage(&m_dlgStep2);

this->AddPage(&m_dlgStep3);

}

然后在项目的启动文件Wizard.cpp,添加头文件

#include "WizardSheet.h"

找到BOOL CWizardApp::InitInstance()函数,将

CStep1Dlg dlg;

m_pMainWnd = &dlg;

替换为

CWizardSheet dlg(_T("向导"));

m_pMainWnd = &dlg;

dlg.SetWizardMode();//这个不是DoModel了。

现在将程序编译运行下,可以发现基本上已经成型了。

4、现在要设置向导的按钮。

1)在CStep1Dlg.cpp文件里包含进#include "WizardSheet.h"

然后要重载virtual BOOL OnSetActive()函数。在工作区的左边点击“类视图”,点击CStep1Dlg类,右键,选择“属性”,在属性里切换到重写页面,找到OnSetActive,然后添加。

添加如下代码:

BOOL CStep1Dlg::OnSetActive()

{

// TODO: 在此添加专用代码和/或调用基类

CWizardSheet *ros = reinterpret_cast<CWizardSheet*>(GetParent());

ros->SetWizardButtons(PSWIZB_NEXT);//设置下一步按钮可用

return CPropertyPage::OnSetActive();

}

分别给CStep2Dlg、CStep3Dlg添加OnSetActive函数(别忘了include头文件),代码分别如下:

BOOL CStep2Dlg::OnSetActive()

{

// TODO: 在此添加专用代码和/或调用基类

CWizardSheet *ros = reinterpret_cast<CWizardSheet*>(GetParent());

ros->SetWizardButtons(PSWIZB_NEXT | PSWIZB_BACK);

return CPropertyPage::OnSetActive();

}

BOOL CStep3Dlg::OnSetActive()

{

// TODO: 在此添加专用代码和/或调用基类

CWizardSheet *ros = reinterpret_cast<CWizardSheet*>(GetParent());

ros->SetWizardButtons(PSWIZB_BACK );

return CPropertyPage::OnSetActive();

}

现在上一步、下一步按钮正常了。但是旁边的取消和帮助按钮挺烦人的,现在对它们进行改造。

5、在CWizardSheet的OnInitDialog()函数里添加如下代码:

BOOL CWizardSheet::OnInitDialog()

{

BOOL bResult = CPropertySheet::OnInitDialog();

// TODO: 在此添加您的专用代码

CButton *btnFinish;

btnFinish = reinterpret_cast<CButton *>(GetDlgItem(IDCANCEL));

btnFinish->SetWindowText(_T("完成"));

CButton *btnClose;

btnClose = reinterpret_cast<CButton *>(GetDlgItem(IDHELP));

btnClose->SetWindowText(L"关闭");

return bResult;

}

现在只是给它们化了下妆而已。接下来就要进行改头换面了。

对IDCANCEL和IDHELP消息映射函数进行改写。方法有点笨,没有找到向导添加消息映射,只好手动了。

首先在CWizardSheet.h文件里声明两个虚函数。

protected:

virtual void OnFinishButton();

virtual void OnCloseButton();

然后设置消息映射,打开WizardSheet.cpp文件,找到

BEGIN_MESSAGE_MAP(CWizardSheet, CPropertySheet)

END_MESSAGE_MAP()

在之间添加

BEGIN_MESSAGE_MAP(CWizardSheet, CPropertySheet)

ON_COMMAND(IDCANCEL, &CWizardSheet::OnFinishButton)

ON_COMMAND(IDHELP, &CWizardSheet::OnCloseButton)

END_MESSAGE_MAP()

最后是编写响应函数部分了。

void CWizardSheet::OnFinishButton()

{

AfxMessageBox(_T("The Finish button of the wizard was clicked."));

}

void CWizardSheet::OnCloseButton()

{

AfxMessageBox(_T("The wizard will be closed!"));

PostQuitMessage(0);

}

好像到这里该结束了……

分享到:
评论

相关推荐

    vc2012中文版创建win32基于对话框应用程序向导

    根据http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html《自己动手让Visual Studio的Win32向导支持生成对话框程序》制作的vs2012中文版创建win32基于对话框的应用程序向导(上述该文章提供的是英文版...

    MFC制作的MP3

    使用MFC制作MP3打开vc6.0,建立如图所示mfc工程文件 选择基于对话框的确定 删除所有空间,建立如图所示对话框 属性如下: 播放 IDC_open; 添加 IDC_fileopen; 暂停 IDC_pause; 删除 IDC_del; 停止 IDC_stop...

    MFC教程入门知识全集.rar

    7.2 属性页和向导对话框 7.2.1 创建属性页对话框 7.2.1 创建向导对话框 7.3 公用对话框 7.3.1 增加设置对话框来完善绘图程序 7.3.2 颜色对话框的使用 7.3.3 字体对话框的使用 7.3.4 控制控件颜色做漂亮界面 ...

    Wizard向导源码

    制作的一个向导对话框程序,基于MFC,开发环境是visual studio 2008,制作过程http://hi.baidu.com/aijianmeng/blog/item/02844230f439ad0bebc4afac.html

    100实例(c++)

    37 用MFC制作屏幕保护程序 38 在OpenGL视图中绘制三维物体 39 透明的按钮 40 打开真彩色位图 41 彩色立方体 42 简易的Windows媒体播放器 43 制作MIDI播放器 44 场景反走样效果 45 制作景深效果 46 进行拷屏打印 47 ...

    VC学习大纲 VC学习讲义

    如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮 等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。 第十一...

    VC++ 逃跑按钮的制作实例

    如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。

    WTL90_4140_Final中文安装最新版

    新增卸载Wtl向导脚本Uninstall_CHS.js。 7.制作了一个安装包有兴趣的可以尝试一下。 8.除上述外,没添加任何无关的信息,尽量保持原版特性。 二、AppWizCE 1.修改所有资源文件为中文简体资源(包括菜单,对话框...

    Visual C++ 数据库系统开发完全手册.part2

    4.1.2 Visual C++ 6.0中的应用程序向导 4.1.3 MFC应用程序的开发流程 4.2 应用程序向导生成文件 4.2.1 文件类型 4.2.2 典型文件举例 4.3 ClassWizard(类向导) 4.3.1 ClassWizard的功能 4.3.2 ClassWizard的简单...

    Visual C++ 数据库系统开发完全手册.part1

    4.1.2 Visual C++ 6.0中的应用程序向导 4.1.3 MFC应用程序的开发流程 4.2 应用程序向导生成文件 4.2.1 文件类型 4.2.2 典型文件举例 4.3 ClassWizard(类向导) 4.3.1 ClassWizard的功能 4.3.2 ClassWizard的简单...

    vs2010聊天程序

    ================================================================================ ...如果应用程序在共享的 DLL 中使用 MFC,则需要重新发布这些 MFC DLL;如果应用程序所用的语言与操作系统的当

    Visual C++编程技巧精选集 光盘

    180.如何创建一个向导式的对话框窗体 181.如何创建一个属性页的对话框窗体 182.如何创建列表视图类型的程序窗体 183.如何创建不规则的对话框窗体 184.如何创建圆角状的非矩形窗体 185.如何使用文字线条填充窗体轮廓 ...

    vc++ 应用源码包_1

    MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...

    vc++ 应用源码包_2

    MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...

    LocWise

    5.实现了多语言支持的软件,其界面语言(包括菜单、工具栏、状态栏、对话框、字符串等所有资源)可以实时切换,并支持多种切换方式; 6.采用了先进的“Intelligent Language Identification(智能语言辨识)”技术...

    vc++ 开发实例源码包

    MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...

    vc++ 应用源码包_6

    MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...

Global site tag (gtag.js) - Google Analytics