次の方法で共有


MFC ActiveX コントロール : ActiveX コントロールにおけるデータ連結の使用

ActiveX コントロールよりも強力な使用方法の 1 つが、コントロールのプロパティがデータベースのフィールドにバインドできるようにするデータ バインディングです。ユーザーがこのバインディング プロパティのデータを変更すると、コントロールは、データベースを示して、レコード フィールドを更新する必要があります。データベースは、成功のコントロールまたは要求の失敗を通知します。

この技術情報では、タスクのコントロールの横について説明します。データベースとのデータ バインディングの対話を実行すると、コントロール コンテナーの役割です。コンテナーのデータベースの対話を管理するか、ここでは詳しく説明しません。どのように準備するときに、データ バインディングのコントロールは、この技術情報の他に示します。

データバインド コントロールの概念図

データ バインド コントロール

COleControl クラスでを実装するデータ バインディングに簡単なプロセスをする 2 とおりのメンバー関数を提供します。最初の関数、 BoundPropertyRequestEditが、プロパティ値を変更できる権限を要求するために使用されます。プロパティ値が正常に変更された後BoundPropertyChangedの 2 番目の関数で呼び出されます。

ここでは、次のトピックについて説明します。

  • バインドできるストック プロパティの作成

  • バインドできる作成して取得/設定メソッド

バインドできるストック プロパティの作成

バインドできる取得/設定メソッドの対象となる可能性が高いがデータ バインディングのストック プロパティを作成することは可能です。

[!メモ]

ストック プロパティに bindablerequestedit の属性が既定でになります。

バインドできるストック プロパティをプロパティの追加ウィザードを追加するには

  1. MFC ActiveX コントロール ウィザードを使用してプロジェクトを開始します。

  2. コントロールのインターフェイス ノードを右クリックします。

    これは、ショートカット メニューが開きます。

  3. ショートカット メニューのをクリック 追加 は、 プロパティの追加をクリックします。

  4. プロパティ,Property名前 のドロップダウン リストからエントリの 1 種類を選択します。たとえば、 テキストを選択できます。

    テキスト がストック プロパティであるため、 bindablerequestedit の属性は既にチェックされます。

  5. IDL Attributes のタブから、次のチェック ボックスをオンにします: プロジェクトの .IDL のプロパティ定義に属性を追加する displaybinddefaultbind です。これらの属性は、コントロールをユーザーに表示されるようにし、ストック プロパティに既定の連結できるプロパティについて説明します。

この時点で、コントロールは、データ ソースのデータを表示できますが、更新データ フィールドにできません。また、コントロールにデータに更新できるようにするには、次のように確認するに OnOcmCommandOnOcmCommand の関数を変更する:

#ifdef _WIN32
   WORD wNotifyCode = HIWORD(wParam);
#else
   WORD wNotifyCode = HIWORD(lParam);
#endif

   if(wNotifyCode==EN_CHANGE)
   {
      if(!BoundPropertyRequestEdit(DISPID_TEXT))
      {
         SetNotSupported();
      }
      else
      {
         GetText();
         // Notify container of change
         BoundPropertyChanged(DISPID_TEXT);
      }
   }

   return 0;

これで、コントロールを登録するプロジェクトをビルドできます。ダイアログ ボックスにコントロールを挿入すると、 データ フィールドデータ ソース のプロパティが追加され、コントロールに表示する、データ ソースとフィールドを選択できます。

バインドできる作成して取得/設定メソッド

データ バインディングに加えて、 バインドできるストック プロパティを作成できます。または、 SET メソッド。

[!メモ]

この手順では、のサブクラスで Windows 制御できる ActiveX コントロール プロジェクトがあるとします。

追加するには、バインドできるプロパティの追加ウィザードを使用して、 get または set メソッド

  1. コントロール プロジェクトを読み込んでください。

  2. Control Settings のページで、サブクラスにコントロールのウィンドウ クラスを選択します。たとえば、サブクラスのエディット コントロールが必要になる場合があります。

  3. コントロール プロジェクトを読み込んでください。

  4. コントロールのインターフェイス ノードを右クリックします。

    これは、ショートカット メニューが開きます。

  5. ショートカット メニューのをクリック 追加 は、 プロパティの追加をクリックします。

  6. プロパティ名(O),プロパティ名 ボックスのプロパティ名を入力します。この例では、 MyProp を使用します。

  7. プロパティの型,プロパティの種類,プロパティの種類(Y),プロパティ型 のボックスの一覧からデータ型を選択します。この例では、 short を使用します。

  8. Implementation Typeでは、をクリック Get/Set Methods

  9. IDL 属性のタブから、次のチェック ボックスをオンにします: bindablerequestedit、プロジェクトの .IDL のプロパティ定義に属性を追加する displaybinddefaultbind です。これらの属性は、コントロールをユーザーに表示されるようにし、ストック プロパティに既定の連結できるプロパティについて説明します。

  10. [完了] をクリックします。

  11. 次のコードを含むように SetMyProp 関数本体を変更する:

    if(!BoundPropertyRequestEdit(1))
    {
       SetNotSupported();
       return;
    }
    else
    {
       if(AmbientUserMode()) // SendMessage only at run-time
       {
          _stprintf_s(m_strText.GetBuffer(10), 10, _T("%d"), newVal);
          SetWindowText(m_strText);
          m_strText.ReleaseBuffer();
       }
       else
       {
          InvalidateControl();
       }
    
       // Signal a property change
       // This is the MFC equivalent of OnChanged()
       BoundPropertyChanged(1);
       SetModifiedFlag();
    }
    
  12. BoundPropertyChanged と BoundPropertyRequestEdit 関数に渡されるパラメーターは .IDL ファイルのプロパティの ID ()属性に渡されるパラメーターのプロパティの dispid です。

  13. OnOcmCommand の関数を変更して、次のコードが含まれています:

    #ifdef _WIN32
       WORD wNotifyCode = HIWORD(wParam);
    #else
       WORD wNotifyCode = HIWORD(lParam);
    #endif
    
       if(wNotifyCode==EN_CHANGE)
       {
          if(!BoundPropertyRequestEdit(DISPID_TEXT))
          {
             SetNotSupported();
          }
          else
          {
             GetText();
             // Notify container of change
             BoundPropertyChanged(DISPID_TEXT);
          }
       }
    
       return 0;
    
  14. 次のコードを含むように OnDraw の関数を変更する:

    if(!AmbientUserMode())
    {
       // Draw the Text property at design-time
       pdc->FillRect(rcBounds, 
          CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
       pdc->DrawText(m_strText, -1, (LPRECT)&rcBounds, 
          DT_LEFT | DT_TOP | DT_SINGLELINE);
    }
    else
    {
       DoSuperclassPaint(pdc, rcBounds);
    }
    
  15. ヘッダー ファイルのパブリック セクションにコントロール クラスのヘッダー ファイルは、メンバー変数の次の定義 (コンストラクター)を追加します:

    CString m_strText;
    short m_nMyNum;
    
  16. 次の行に DoPropExchange の最後の行を機能する:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. 次のコードを含むように OnResetState の関数を変更する:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. 次のコードを含むように GetMyProp の関数を変更する:

    if(AmbientUserMode())
    {
       GetWindowText(m_strText);
       m_nMyNum = (short)_ttoi(m_strText);
    }
    return m_nMyNum;
    

これで、コントロールを登録するプロジェクトをビルドできます。ダイアログ ボックスにコントロールを挿入すると、 データ フィールドデータ ソース のプロパティが追加され、コントロールに表示する、データ ソースとフィールドを選択できます。

参照

関連項目

データ連結コントロール (ADO および RDO)

概念

MFC ActiveX コントロール