如何隐藏 CPropertySheet 中的应用按钮

如何隐藏 CPropertySheet 中的应用按钮,第1张

 MFC中CPropertySheet为属性页,页面最下端自动生成的确定、取消、帮助和应用按钮无用,且放置在最下端不太美观,需要将其去掉,笔者在编程过程中采用的方法如下:

1.去掉应用按钮。在CPropertySheet的构造函数中添加添加语句:this-m_psh.dwFlags |= PSH_NOAPPLYNOW

作用是去掉应用按钮。

2.去掉帮助按钮的 *** 作稍微复杂一些,需要在CPropertySheet的构造函数中加上如下语句:this-m_psh.dwFlags &= ~

(PSH_HASHELP)

page1.m_psp.dwFlags&= ~(PSP_HASHELP)

page2.m_psp.dwFlags

&= ~(PSP_HASHELP)

然后才能添加属性页:this-AddPage(&page1)this-AddPage(&page2)

需要注意的是,由于添加属性页的 *** 作不一定在CPropertySheet的构造函数中,因此只需要保证CPropertySheet对象和属性页CPropertyPage对象中都有去掉上述去掉帮助按钮的语句即可。

另外,帮助按钮还可以采用如下方法去掉:

在CPropertySheet的OnInitDialog()函数中加入如下语句(若没有生成OnInitDialog,可在ClassView中添加虚函数OnInitDialog):

CWnd *pWnd =

GetDlgItem(IDHELP)if(pWnd &&pWnd-

GetSafeHwnd()){pWnd-ShowWindow(false)}

3.去掉确定和取消按钮。在CPropertySheet的OnInitDialog()函数中加入如下语句:1CWnd *pWnd =

GetDlgItem(IDOK)2if(pWnd &&pWnd-

GetSafeHwnd()){3pWnd-ShowWindow(false)4}56pWnd =GetDlgItem(IDCANCEL)7if(pWnd &&pWnd-

GetSafeHwnd()){8pWnd-ShowWindow(false)9}

上述方法去掉按钮后,在界面下方的按钮会消失,但是会留下空白,需要重新调整窗口,消除空白,此时可以考虑如下方法:

4.去掉四个按钮后消除界面下方的空白。1GetDlgItem(IDOK)-

ShowWindow(SW_HIDE)23GetDlgItem(IDHELP)-

ShowWindow(SW_HIDE)45GetDlgItem(IDCANCEL)-

ShowWindow(SW_HIDE)67GetDlgItem(ID_APPLY_NOW)-

ShowWindow(SW_HIDE)89//获取窗体尺寸10CRect btnRect11GetDlgItem(IDCANCEL)-GetWindowRect(&btnRect)1213CRect wdnRect14GetWindowRect(&wdnRect)1516//调整窗体大小17::SetWindowPos(this-m_hWnd, HWND_TOP,0,0

上述代码添加在CPropertySheet类的OnInitDialog()函数中,可以消除隐藏按钮后留下的空白。

在“Class View”中找到“CSummandPage”节点,点右键d出右键菜单,选择“Properties”,然后VS2010右侧面板上会显示对话框的属性列表,属性列表的工具栏上有个tip信息为“Overrides”的按钮,按下它,下方列表中就列出了重载函数,找到“OnSetActive”,点其右侧空白列表项出现向下箭头,再点箭头就在下面出现了“<Add>OnSetActive”的选项,选择它就会自动在CSummandPage类中添加函数OnSetActive。

C++代码

BOOL CSummandPage::OnSetActive()

{

// TODO: Add your specialized code here and/or call the base class

// 获得父窗口,即属性表CPropertySheet类

CPropertySheet* psheet = (CPropertySheet*) GetParent()

// 设置属性表只有“下一步”按钮

psheet->SetWizardButtons(PSWIZB_NEXT)

return CPropertyPage::OnSetActive()

}

这个实现起来很简单,首先CDialog提供一个static类指针,用于返回自身初始化好的指针。然后当点击退出按钮后,就调用这个static指针,发送WM_CLOSE即可。

CDialog::m_dialog->PostMessage(WM_CLOSE, 0, 0)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11428408.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存