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()函數中,可以消除隱藏按鈕後留下的空白。