ホーム ATL/WTL
ウィンドウクラス情報
ドキュメント種別 ATL/WTL に関する文書
最終更新日 2007/01/08
PR
 SDKスタイルのWindowsプログラミングでは、ウィンドウクラス名や背景色、カーソルなどの 属性を指定するためにWNDCLASSEX構造体のメンバに値をセットしますが、 ATLにはその作業を単純化するマクロや構造体が用意されています。

ウィンドウクラス名マクロ
 ウィンドウクラス名を指定するためのマクロを以下に示します。

  • DECLARE_WND_CLASS(ウィンドウクラス名)
    ウィンドウクラス名のみを定義します。

  • DECLARE_WND_CLASS_EX(ウィンドウクラス名, スタイル, 背景色)
    ウィンドウクラス名、スタイル、背景色を定義します。

これらのマクロはpublic宣言で使用しなければなりません。 これらのマクロを使ってウィンドウクラス名を明示的に登録しなければ、ATLは "ATL:00406060" のような名前を自動的に 登録します。

CWndClassInfo構造体
 CWndClassInfo構造体はウィンドウクラス名マクロよりもウィンドウの属性を細かく指定できます。 CWndClassInfoを使用して新しい属性を指定するためには、 CWindowImpl::GetWndClassInfo()をオーバーライドして、 カスタマイズした静的なCWndClassInfoインスタンスの参照を返します。

 以下に示すのは、CWndClassInfo構造体を使用して十字カーソルに変更する例です。

プロジェクトファイル ダウンロード
class CMainWindow : public CWindowImpl<CMainWindow>
{
public:
    static CWndClassInfo& GetWndClassInfo()
    {
        static CWndClassInfo wc =
        {
            {
                sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
                StartWindowProc, 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1),
                NULL, _T("Hello"), NULL
            },              // WNDCLASSEX構造体
            NULL,           // 既存のウィンドウクラス名
            NULL,           // 既存のウィンドウプロシージャ
            IDC_CROSS,      // カーソルリソース名
            TRUE,           // システムカーソルならばTRUE、それ以外はFALSE
            0,              // 登録済みウィンドウクラスの識別子
            _T("")          // ATLが自動生成したウィンドウクラス名
        };
        return wc;
    }
...
};