ホーム ATL/WTL
フレームウィンドウクラス情報
ドキュメント種別 ATL/WTL に関する文書
最終更新日 2007/09/24
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インスタンスの参照を返します。

 以下に示すのは、CFrameWndClassInfoクラスを使用して十字カーソルに変更する例です。

プロジェクトファイル ダウンロード
class CMainWindow : public CFrameWindowImpl<CMainWindow>,
    public CMessageFilter, public CIdleHandler
{
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, 
                _T("Hello"), NULL
            },              // WNDCLASSEX構造体
            NULL,           // 既存のウィンドウクラス名
            NULL,           // 既存のウィンドウプロシージャ
            IDC_CROSS,      // カーソルリソース名
            TRUE,           // システムカーソルならばTRUE、それ以外はFALSE
            0,              // 登録済みウィンドウクラスの識別子
            _T(""),         // ATLが自動生成したウィンドウクラス名
            IDR_MAINFRAME   // 共通リソースID
        };
        return wc;
    }
...
};