ウィンドウを実装するには、 CWindowImplからクラスを派生します。派生クラスでは、メッセージ マップとメッセージ ハンドラー関数を宣言します。今 3 つの異なる方法でクラスを使用することができます。:
CWindowImpl にはウィンドウ クラスの情報を宣言するには、マクロが含まれています。このマクロは、CWndClassInfoを使用して新しいウィンドウ クラスの情報を定義する、 GetWndClassInfo関数を実装します。CWindowImpl::Createが呼び出されると、このウィンドウ クラスが登録されているし、新しいウィンドウが作成されます。
注特価;CWindowImplでは、ATL ウィンドウ クラス名が生成されることを意味は、マクロには、 NULLを渡します。あなた自身の名前を指定するには、文字列ではは、あなたのCWindowImplを渡す-派生クラス(&N)。
次は、新しいウィンドウ クラスに基づいてウィンドウを実装するクラスの例です。:
cMyWindow クラス: 公共の CWindowImpllt;CMyWindow >、.{パブリック。・必要に応じて、新規の Windows クラスの名前を指定DECLARE_WND_CLASS("MyName")/このマクロで指定されていない場合、・ クラス、ATL はクラス名を生成します。...BEGIN_MSG_MAP(CMyWindow)割り当てます (WM_PAINT、OnPaint)END_MSG_MAP()LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){//いくつかの描画コードを行う0 を返します。}}
ウィンドウを作成するには、インスタンスの作成 CMyWindow とCreateメソッドを呼び出す。
注特価;既定の Windows クラスの情報を上書きするには、 GetWndClassInfoメソッドを派生クラスでは、CWndClassInfoメンバーを適切な値に設定して実装します。(&N)。
DECLARE_WND_SUPERCLASSマクロは、スーパークラスを既存の Windows のウィンドウを作成することができますクラス。このマクロは、 CWindowImplの指定-クラスを派生します。その他の ATL のウィンドウと同様、メッセージのメッセージ マップによって処理します。
DECLARE_WND_SUPERCLASSを使用すると、新しいウィンドウ クラスが登録されます。この新しいクラス指定しますが、 CWindowImpl::WindowProc (またはこのメソッドをオーバーライドして、関数を)、ウィンドウ プロシージャが置き換えられます、既存のクラスと同じになります。
次のクラスの例は、スーパークラスの標準の編集ですクラス:
cMyEdit クラス: 公共の CWindowImpllt;CMyEdit >、.{パブリック。・「編集」は、標準の Windows クラスの名前。・「MyEdit」は、新しい Windows クラスの名前//編集クラスに基づくでしょう。DECLARE_WND_SUPERCLASS (「編集」、「MyEdit」)...BEGIN_MSG_MAP(CMyEdit)割り当てます (WM_CHAR、OnChar)END_MSG_MAP()LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){//いくつかの文字のコードの処理を行う}}
Superclassed の編集ウィンドウを作成するには、インスタンスの作成 CMyEdit とCreateメソッドを呼び出す。
スーパークラス化の詳細についてを参照してください 、 Win32 SDKのウィンドウ プロシージャのスーパークラス化。
既存のウィンドウをサブクラス化するCWindowImplからクラスを派生し、前の 2 つのケースのように、メッセージ マップを宣言します。ただし、既存のウィンドウのサブクラスをするので、ウィンドウ クラスの情報を指定しないことです。
Createを呼び出して、 SubclassWindowを呼び出すし、既存のウィンドウをサブクラス化する場合、ハンドルを渡します。ウィンドウをサブクラス化すると、 CWindowImpl::WindowProc (このメソッドをオーバーライドして、関数) を使用して、直接のメッセージをメッセージ マップにします。オブジェクトからサブクラス化されたウィンドウをデタッチするには、 UnsubclassWindowを呼び出します。ウィンドウの元のウィンドウ プロシージャを復元します。
サブクラス化の詳細についてを参照してください 、 Win32 SDKでは、ウィンドウ プロシージャ サブクラス化。