落花时节的笔记 https://passport2.21ic.com/?425605 [收藏] [复制] [RSS] 我的技术基地!

日志

非模态向导对话框创建方法.Wizard modeless

热度 1已有 2442 次阅读2008-11-8 11:35 |系统分类:ARM| wizard, modeless, 非模态, 向导, vc, mfc, it

网上的wizard对话框都是使用Domodel的模态对话框.要想改成modelless颇费一番周折.
下面我要慢慢介绍如何制作一个非模态对话框.


这里先提一下我遇到的问题:
由于堆和栈的不同.使用 非new的页加载到非模态向导框里面会报错!


下面慢慢说明如何添加:
1.新建一个class (MFC类)名字为:Wizard,然后基类选择CPropertySheet;
在Wizard类中,我们需要处理取消,完成和帮助.我现在没有找到帮助键的禁用方法.暂且


不管.过滤一下.
在Wizard里重载OnCmdMsg;如下:
 virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
  AFX_CMDHANDLERINFO* pHandlerInfo);
cpp:
BOOL CWizard::OnCmdMsg(UINT nID, int nCode, void* pExtra,
  AFX_CMDHANDLERINFO* pHandlerInfo)
{
//上一步12323,下一步12324,完成12325,取消2,帮助9
 if ((nID == 12325) || (nID == 2))
 {
  this->ShowWindow(SW_HIDE);
  return TRUE;
 }
 if (nID == 9)
 {
  MessageBoxA("WIZARD","WIZARD",MB_OK);
  return TRUE;
 }


 return FALSE;
}
下面还要设计一个页类,用于创建所有每一步的页.
这里只贴出第一步.
新建一个对话框,命名为IDD_STEP1
新建一个类CStep,基类是CPropertyPage,对话框ID:IDD_STEP1;
这样,在主程序里添加如下代码即可实现非模态Wizard.
注意要包含对应头文件.把声明放在类里面,用于销毁.否则会导致内存泄漏
 CWizard *pWizard = new CWizard("WIZARD");
 CStep1 *pStep1 = new CStep1();
 pWizard->AddPage(pStep1);
 pWizard->SetWizardMode();
 pWizard->SetActivePage(pStep1);
 pWizard->Create();
 pWizard->ShowWindow(SW_SHOW);


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 jidushen 2018-5-7 17:55
mark