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

本文介绍如何在无模式的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函数,以关闭表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值