MFC中如何去掉CPropertySheet界面下方的按鈕

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章