ホーム ATL/WTL
フレームウィンドウクラス情報
ドキュメント種別 ATL/WTL に関する文書
最終更新日 2003/12/17
PR
 メインウィンドウの基底クラスにCWindowImplクラスを使用していた場合は、 ウィンドウクラス名や背景色、カーソルなど属性を指定するためにDECLARE_WND_CLASSなどのマクロや、 CWndClassInfo構造体を使用しました。 メインウィンドウの基底クラスにCFrameWindowImplクラスを使用した場合にも同様のマクロやクラスが用意されています。

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

  • DECLARE_FRAME_WND_CLASS(ウィンドウクラス名, 共通リソースID)
    ウィンドウクラス名と共通リソースIDを定義します。なお、ATLのDECLARE_WND_CLASSマクロでは、 デフォルトのスタイルとして CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS を設定してくれますが、 DECLARE_FRAME_WND_CLASSでは 0 を設定します。

  • DECLARE_FRAME_WND_CLASS_EX(ウィンドウクラス名, 共通リソースID, スタイル, 背景色)
    ウィンドウクラス名、共通リソースID、スタイル、背景色を定義します。

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

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

class CMyWindow : public CFrameWindowImpl<CMyWindow>
{
public:
    static WTL::CFrameWndClassInfo& GetWndClassInfo()
    {
        static WTL::CFrameWndClassInfo wc =
        {
            {sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, StartWindowProc,
            0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, 
            "MyWindow", NULL},            // WNDCLASSEX構造体
            NULL,                         // 既存のウィンドウクラス名
            NULL,                         // 既存のウィンドウプロシージャ
            MAKEINTRESOURCE(IDC_CURSOR1), // カーソルリソース名
            FALSE,                        // システムカーソルならばTRUE、それ以外はFALSE
            0,                            // 登録済みウィンドウクラスの識別子
            _T("")                        // ATLが自動生成したウィンドウクラス名
            IDR_MAINFRAME                 // 共通リソースID
        };
        return wc;
    }
...
};