Last Updated 2008/02/08
Programming Tips Visual C++ MFC ダイアログ プロパティシート  索 引 
プロパティシートのボタンの削除
2002/07/22

プロパティシートのヘルプボタンなどを非表示にしても,もともとボタンがあった部分はそのまま空白として残ってしまう.
ボタンを削除するには

GetDlgItem(ID_APPLY_NOW)->DestoryWindow();

とすればボタンは削除できる.

だが,なんだか DestoryWindow() は強引な気がしないでもない.

そこで CPropertySheet クラスの m_psh を使用する.
m_psh の PROPSHEETHEADER 構造体のカスタマイズによりプロパティシートの属性を細かく指定できる.
更新ボタンを削除するには PROPSHEETHEADER 構造体の dwFlags に PSH_HASHELP のフラグは OFF にして PSH_NOAPPLYNOW というフラグを ON にすれば,「ヘルプ」ボタン「更新」ボタンは表示されなくなる.

CPropertySheet  MySheet;
Page1           page1;      // CPropertyPageから派生させた独自のクラス1
Page2           page2;      // CPropertyPageから派生させた独自のクラス2

MySheet.AddPage(&page1);
MySheet.AddPage(&page2);
MySheet.m_psh.dwFlags |= (PSH_NOAPPLYNOW | PSH_PROPTITLE);
MySheet.m_psh.pszCaption = "テストシート";

MySheet.DoModal();  // プロパティシートの表示


PSH_HASHELP ボタンは,プロパティシートのヘルプボタンの表示の有無を制御するためのフラグには間違いない.が,正確にはプロパティシート内の各ページの属性に左右される.
プロパティページクラス (CPropertyPage) にも,m_psp というデータメンバがあり,これが,PROPSHEETPAGE というまた別の構造体へのアクセス変数となっている.
この PROPSHEETPAGE 構造体の dwFlags という変数に PSP_HASHELP というフラグが立っていれば,そのページがアクティブになった時プロパティシート上のヘルプボタン Enable 表示される.

プロパティシートのヘルプボタンが表示されるかどうかは,各ページがヘルプボタンのフラグ (PSP_HASHELP) を持っているかどうかで決定する.

どうしてもヘルプボタンが表示されてしまう場合は,各ページの PROPSHEETPAGE 構造体の dwFlags から PSP_HASHELP のフラグを OFF にする.

  page1.m_psp.dwFlags ^= PSP_HASHELP;
  page2.m_psp.dwFlags ^= PSP_HASHELP;

各ページのどれか1つでも PSP_HASHELP フラグ属性を持っていれば,ボタンは表示されてしまう.


参照
ボタンの非表示
前後のTips
プロパティシートのボタンの削除

DSS ProgrammingTipsCGI Ver2.01