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()函数中加入如下语句:
1 CWnd *pWnd = GetDlgItem(IDOK); 2 if(pWnd && pWnd->GetSafeHwnd()){ 3 pWnd->ShowWindow(false); 4 } 5 6 pWnd = GetDlgItem(IDCANCEL); 7 if(pWnd && pWnd->GetSafeHwnd()){ 8 pWnd->ShowWindow(false); 9 }
上述方法去掉按钮后,在界面下方的按钮会消失,但是会留下空白,需要重新调整窗口,消除空白,此时可以考虑如下方法:
4.去掉四个按钮后消除界面下方的空白。
1 GetDlgItem(IDOK)->ShowWindow(SW_HIDE); 2 3 GetDlgItem(IDHELP)->ShowWindow(SW_HIDE); 4 5 GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); 6 7 GetDlgItem(ID_APPLY_NOW)->ShowWindow(SW_HIDE); 8 9 //获取窗体尺寸 10 CRect btnRect; 11 GetDlgItem(IDCANCEL)->GetWindowRect(&btnRect); 12 13 CRect wdnRect; 14 GetWindowRect(&wdnRect); 15 16 //调整窗体大小 17 ::SetWindowPos(this->m_hWnd, HWND_TOP, 0,0,wdnRect.Width(),wdnRect.Height() - btnRect.Height(), SWP_NOMOVE | SWP_NOZORDER);
上述代码添加在CPropertySheet类的OnInitDialog()函数中,可以消除隐藏按钮后留下的空白。