次の方法で共有


属性サンプル: SUBEDIT します。標準の Windows コントロールをスーパークラス

SUBEDIT 属性サンプルでは、Windows 標準エディット コントロールをスーパークラス化する ATL コントロールの作成方法を示します。

SUBEDIT サンプルは、このサンプルの属性なしバージョンです。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

このサンプルをビルドして実行するには

  1. ソリューション ファイル SubEdit.sln を開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. サンプルのビルド後に、Web ブラウザーで AtlEdit.htm を開き、コントロールを試します。

ATLEdit クラスを開くと、ActiveX コントロール テスト コンテナーでコントロールをテストできます。 テスト コンテナーにアクセスしてコントロールをテストする方法の詳細については、「テスト コンテナーでのプロパティとイベントのテスト」を参照してください。

Windows コントロールのスーパークラス化

ATL を使用すると、Windows 標準コントロールをスーパークラス化するコントロールを作成できます。 スーパークラス化を使用すると、既存のクラスに基づくウィンドウ クラスを作成できます。ただし、ウィンドウ プロシージャは既存のクラスのものではなく、別のウィンドウ プロシージャに変更されます。 次に、この新しいウィンドウ クラスに基づいてウィンドウを作成できます。 コントロールをスーパークラス化すると、メッセージは先に ATL メッセージ マップによって処理されてからコントロールの元のウィンドウ プロシージャに送られます。 したがって、Windows 標準コントロールの既定の動作を変更できます。

ATL コントロール ウィザードを使用して ActiveX コントロールを作成する場合は、標準ウィンドウ クラスに基づくコントロールを追加するように選択できます。 この場合、ウィザードを CContainedWindow の型のメンバー変数、ActiveX コントロールのクラスに追加します。 CContainedWindow::Create ウィンドウを作成するスーパークラス ウィンドウ、クラスことを指定します。 このウィンドウは CContainedWindow::WindowProc を使用し、メッセージ マップを通じてメッセージを送ります。 メッセージでさらに処理が必要な場合は、ウィンドウ クラスの元のウィンドウ プロシージャにそのメッセージが送られます。

サンプル コードのチェック (AtlEdit.h)

CAtlEdit クラスのコンストラクターに m_bWindowOnlyTRUE メンバー変数を設定します。 これで、コントロールがウィンドウなしのコントロールとしてアクティブになることはありません。

CContainedWindow のメンバー変数 m_EditCtrl は、CAtlEdit コンストラクターによって初期化されます。 CContainedWindow コンストラクター 3 つのパラメーターを受け取ります。スーパークラス (この場合は、「編集」); にウィンドウ クラスの名前メッセージ マップ; が含まれている、CAtlEdit クラスへのポインターおよび m_EditCtrl のメッセージを処理するメッセージ マップの識別子。 既定では、m_EditCtrl は ALT_MSG_MAP マクロで宣言される代替メッセージ マップを使用します。

WM_CREATE WM_CTLCOLOREDIT コントロールに送信 CAtlEdit メッセージとメッセージをハンドラー関数の名前の既定のメッセージ マップを宣言します。 OnCreate ハンドラーは、CContainedWindow::Create を呼び出して m_EditCtrl のウィンドウを作成します。 新しい背景とテキストの色を OnCtlColorEditm_EditCtrl ハンドラーを指定します。

代替メッセージ マップでは、WM_CHAR に送られる m_EditCtrl メッセージのハンドラー関数を宣言します。 このハンドラーは記号や数字ではなく文字だけを受け入れ、Windows の Edit クラスによって定義された元のウィンドウ プロシージャに WM_CHAR メッセージを渡します。

属性

このサンプルでは次の属性を使用します。

coclass , com_interface_entry, default, dual, emitidl, helpstring, implements_category, module, object, pointer_default, progid, registration_script, threading, uuid, version, vi_progid

Keywords

このサンプルでは、次のキーワードを使用します。

CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CContainedWindow::DefWindowProc; DisableThreadLibraryCalls; GetStockObject; GetWindowRect; IDataObjectImpl; IDispatchImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISpecifyPropertyPagesImpl; IViewObjectExImpl; SetBkColor; SetTextColor; SetWindowPos

注意

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

ATL 属性のサンプル