MFC 导航界面

这篇博客介绍了如何在MFC环境中构建一个导航界面。通过步骤a到k详细阐述了如何从新建工程开始,添加对话框资源,创建CPropertyPage和CPropertySheet类的派生类,重载相关函数以实现页面间的导航逻辑,并最终设置启动时显示导航界面。涉及到的关键技术包括CPropertyPage和CPropertySheet的使用,以及MFC类的继承和事件处理。
部署运行你感兴趣的模型镜像

参考:

http://blog.youkuaiyun.com/system14/article/details/9620999

http://blog.youkuaiyun.com/foreverhuylee/article/details/23450639

http://bbs.youkuaiyun.com/topics/50029048


CPropertyPage 是一个从CDialog派生而来的一个类,基本功能与对话框类一样,

CPropertySheet不是一个CDialog的派生类,他是派生自CWnd的,其实它就是一个CDialog上加了一个CTabCtrl的组合类


a.新建一个MFC工程navigation

b.插入两个Dialog资源,Caption改为A,B

c.分别为两个Dialog绑定CPropertyPage类 ,命名CPageA,CPageB

d.使用Class Wizard新建一个MFC类,名字CMSheet,父类CPropertySheet

e.在CMSheet中添加

//.h
	CPageA* pageA;
	CPageB* pageB;
================================
//.cpp
CMSheet::CMSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage) {
	pageA = new CPageA();
	pageB = new CPageB();
	AddPage(pageA);
	AddPage(pageB);
	SetActivePage(iSelectPage);
	SetWizardMode();  //指定为导向页面,不这样指定默认把虽偶有页面放在一起变成tab标签形式的了
}

CMSheet::CMSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
: CPropertySheet(pszCaption, pParentWnd, iSelectPage) {
	pageA = new CPageA();
	pageB = new CPageB();
	AddPage(pageA);
	AddPage(pageB);
	SetActivePage(iSelectPage);
	SetWizardMode();  //指定为导向页面,不这样指定默认把虽偶有页面放在一起变成tab标签形式的了
}

CMSheet::~CMSheet() {
	if(pageA) {
		delete pageA;
	}
	if(pageB) {
		delete pageB;
	}
}


f.在navigation的初始化函数中添加

CMSheet wizard(L"Register Wizard Page", this, 0);
wizard.DoModal();


g.在CPageA, CPageB中,需要的地方重载

virtual BOOL OnInitDialog();//只执行一次,back时不调用
virtual LRESULT OnWizardBack();
virtual BOOL OnWizardFinish();
virtual LRESULT OnWizardNext();
virtual BOOL OnSetActive();//当该页面成为活动页面时被调用,可以执行多次

//CPageA.cpp
BOOL CPageA::OnSetActive() {
	CPropertySheet* psheet = (CPropertySheet*)GetParent();
	psheet->SetWizardButtons(PSWIZB_NEXT);
	return CPropertyPage::OnSetActive();
}

//CPageB.cpp
BOOL CPageB::OnSetActive() {
	CPropertySheet* psheet = (CPropertySheet*)GetParent();
	psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
	return CPropertyPage::OnSetActive();
}


h.去除cancel和help按钮,在CMSheet的初始化中添加

CWnd *pWnd = GetDlgItem(IDCANCEL);
pWnd->ShowWindow(FALSE);
pWnd = GetDlgItem(IDHELP);
pWnd->ShowWindow(FALSE);


i.对于按钮位置和大小的调整,查看别处(o_O)

j.设置打开软件就进入导航界面

在Navigation.cpp中

#include"NavigationDlg.h" 改为  #include"MSheet.h"

CNavigationDlg dlg 改为  CMSheet dlg(L"Register Wizard Page", NULL, 0)

k.隐藏分割线下的所有东西,在CMSheet的初始化中添加

	RECT rect;
	GetWindowRect(&rect);
	int width = rect.right - rect.left;
	int height = rect.bottom - rect.top;
	SetWindowPos(NULL, 0, 0, width, height * 0.9, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);// * 0.9 这个参数根据自己的界面改值




您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值