2016-09-05 1 views
1

複数のアプリケーションで使用するMFCのコントロールをいくつか拡張します。私はラベルとグループボックスを同様に拡張する派生クラスを持っています。なぜならそれらは静的ラベルであり、必要な描画操作だけであるからです。コントロールを拡張するときのコントロールの種類(静的、ボタン、Gropboxなど)の特定

私の派生したclass Label : public CWndには、OnEraseBkgndOnPaint msgハンドラが正しく書かれています。すべてがラベルとグループボックスでうまくいきますが、私は自分ですべてを描いても構いません。

私の質問は、この派生クラスの観点から、私は静的ラベルかグループボックスかどうかをどうやって判断するのですか?

もちろん、コントロールの種類を示すための変数や関数を追加したり、アプリケーションの先頭に設定したり、それに応じて描画したりすることができます。しかし、アプリケーションコードではなく、拡張クラスのコードでこれを解決したいと思います。

注:私はGetStyle()を試してみましたが、BS_GROUPBOXをチェックしてきた、それはBS_GROUPBOXと同じにすることができSS_*静的なスタイルのいくつかの組み合わせから、助けにはなりません。

+2

[GetClassName](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633582.aspx)。 – IInspectable

+1

これは非常に有望ですが、残念ながらそれは私を直接助けません。 'GetClassName'はグループボックスの"ボタン "を返します。私はそれがリソースファイルで定義されているように、GROUPBOXテキストを取得したかったのです。 – Alparslan

+0

プッシュボタンとグループボックスを区別する方法はすでに分かっています。あなたはボタンコントロールと静的コントロールを区別するための助けが必要でした。そして、 'GetClassName'はそれだけです。時には2つのLEGO®ピースを一緒に置く必要があります。リソースファイルステートメントは、リソース定義構文の成果物です。リソースコンパイラが完了すると、キーワードはなくなります。 – IInspectable

答えて

1

GetStyle()のスタイル属性は、コントロールクラスごとに異なります。それが静的であると判断した後、そのスタイルを見ることは、それがどのような静的タイプであるかを判断するのに役立ちます。

グループボックスはボタンなので、スタイルはBS_GROUPBOXのBUTTONクラスクラスを確認する必要があります。

ボタンのスタイルは、下位4ビットを使用してタイプを決定します。ボタンのスタイルを取得するにはBS_TYPEMASKを使用してください。

if ((GetStyle() & BS_TYPEMASK) == BS_GROUPBOX) { 
    // etc 
} 
関連する問題