CPropertySheetで[ヘルプ]や[適用]をなくす方法
CPropertySheetには標準で、[OK][キャンセル][適用][ヘルプ] と言ったボタンがついてきます。 しかし、これらを消したい場合があると思います。 まぁ[OK][キャンセル]を消したい人は居ないと思いますので、 [適用][ヘルプ] に限ってみましょう。 力ずくでこれらを消すには、CPropertySheetから派生した任意のクラスを作って、 そのクラスにOnInitDialog()をオーバーライドして、 その中で、IDOKとか、IDHELPとかのコントロールを取得して、 削除してしまえば消すことは可能です。
でも、これは、あんまりスマートではありません。 というか、この方法で強引にボタンを消すと、 なんか、[OK]や[キャンセル]の位置がとても間抜けになります。 そこで、MSDNを見てみると、 CPropertySheet::m_pshを操作すれば、 任意のプロパティーシートが作れるようです。 CPropertySheet::m_pshは、 PROPSHEETHEADER構造体で、 特に、CPropertySheet::m_psh::dwFlags がプロパティーシートの状態を定義するためのものです。 そこで、
としてみると、はい、[適用]が消えました。 同様に、
で、[ヘルプ]が消えます。 がっ、[ヘルプ]に関しては、 MSDNには、上記コードで消えるとかいてあるのに、 消えない場合があります。 特に、アプリケーションウイザードで作っていると遭遇する現象です。 じつは、アプリケーションクラスでID_HELPの応答をしていると、 この現象が発生します。 なので、
という行を見つけたら
としてやりましょう。 これで、[ヘルプ]も消えたはずです。 余談ですが、 PSH_HASHELP 等の値は、 #define PSH_HASHELP 0xXXXXXXXX というように、定義されているようです。 なので、使う際には、 (PSH_HASHELP) というように、括弧を付けたほうが無難です。 |