软件环境: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);
}
好像到这里该结束了……
分享到:
相关推荐
根据http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html《自己动手让Visual Studio的Win32向导支持生成对话框程序》制作的vs2012中文版创建win32基于对话框的应用程序向导(上述该文章提供的是英文版...
使用MFC制作MP3打开vc6.0,建立如图所示mfc工程文件 选择基于对话框的确定 删除所有空间,建立如图所示对话框 属性如下: 播放 IDC_open; 添加 IDC_fileopen; 暂停 IDC_pause; 删除 IDC_del; 停止 IDC_stop...
7.2 属性页和向导对话框 7.2.1 创建属性页对话框 7.2.1 创建向导对话框 7.3 公用对话框 7.3.1 增加设置对话框来完善绘图程序 7.3.2 颜色对话框的使用 7.3.3 字体对话框的使用 7.3.4 控制控件颜色做漂亮界面 ...
制作的一个向导对话框程序,基于MFC,开发环境是visual studio 2008,制作过程http://hi.baidu.com/aijianmeng/blog/item/02844230f439ad0bebc4afac.html
37 用MFC制作屏幕保护程序 38 在OpenGL视图中绘制三维物体 39 透明的按钮 40 打开真彩色位图 41 彩色立方体 42 简易的Windows媒体播放器 43 制作MIDI播放器 44 场景反走样效果 45 制作景深效果 46 进行拷屏打印 47 ...
如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮 等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。 第十一...
如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。
新增卸载Wtl向导脚本Uninstall_CHS.js。 7.制作了一个安装包有兴趣的可以尝试一下。 8.除上述外,没添加任何无关的信息,尽量保持原版特性。 二、AppWizCE 1.修改所有资源文件为中文简体资源(包括菜单,对话框...
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的简单...
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的简单...
================================================================================ ...如果应用程序在共享的 DLL 中使用 MFC,则需要重新发布这些 MFC DLL;如果应用程序所用的语言与操作系统的当
180.如何创建一个向导式的对话框窗体 181.如何创建一个属性页的对话框窗体 182.如何创建列表视图类型的程序窗体 183.如何创建不规则的对话框窗体 184.如何创建圆角状的非矩形窗体 185.如何使用文字线条填充窗体轮廓 ...
MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...
MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...
5.实现了多语言支持的软件,其界面语言(包括菜单、工具栏、状态栏、对话框、字符串等所有资源)可以实时切换,并支持多种切换方式; 6.采用了先进的“Intelligent Language Identification(智能语言辨识)”技术...
MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...
MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的...