您的位置:首页 > 运维架构

如何使用标准按钮创建无模式 CPropertySheet

2013-04-17 10:28 681 查看
本文介绍如何在无模式的CPropertySheet对象中实现标准的确定、取消和应用按钮。

我们知道,在MFC中,如果是普通的Dialog,模态显示使用DoModal,非模态显示就稍微麻烦一些:

CSampleDlg *dlg = new CSampleDlg(IDD_SAMPLE_DLG);

if(NULL == dlg)

return;

dlg->Create(this);

if(dlg->GetSafeHWnd() == NULL)

return;

dlg->ShowWindow(SW_NORMAL);

销毁:

dlg->DestroyWindow();

delete dlg;

dlg = NULL;

但是CPropertySheet如果采用类似的方法创建非模态显示,是无法显示出下方的标准按钮的:Apply/OK/Cancel

可以通过这种方法解决:

对于无模式CPropertySheet,Microsoft 基础类 (MFC) 调整表的大小,并隐藏中的CPropertySheet::OnInitDialog成员函数的标准按钮。若要防止 MFC 执行此操作,请执行以下步骤:

从CPropertySheet派生类和重写OnInitDialog函数。

设置为 FALSE 时"m_bModeless",并删除"m_nFlags"的 WF_CONTINUEMODAL 样式。

调用CPropertySheet::OnInitDialog

将"m_bModeless"重新设置为 TRUE,并将 WF_CONTINUEMODAL 的样式添加到"m_nFlags"。

下面的代码示例阐释了这种技术:

// CMySheet is derived from CpropertySheet.

// Compile options needed: default.

BOOL CMySheet::OnInitDialog()

{

m_bModeless = FALSE;

m_nFlags |= WF_CONTINUEMODAL;

BOOL bResult = CPropertySheet::OnInitDialog();

m_bModeless = TRUE;

m_nFlags &= ~WF_CONTINUEMODAL;

return bResult;

}

无模式的CPropertySheet对象中的确定和取消按钮不关闭属性表在被单击时。他们不要向工作表中,发送 WM_COMMAND 消息来使用 IDOK 或 IDCANCEL, OnOK或OnCancel函数调用的页。若要关闭该工作表,可以为 IDOK 和CPropertySheet中的 IDCANCEL 实现 ON_COMMAND 处理程序,并调用EndDialog函数,以关闭表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: