次の方法で共有


AfxOleRegisterControlClass

更新 : 2007 年 11 月

Windows 登録情報データベースにコントロール クラスを登録します。

BOOL AFXAPI AfxOleRegisterControlClass(
   HINSTANCE hInstance,
   REFCLSID clsid,
   LPCTSTR pszProgID,
   UINT idTypeName,
   UINT idBitmap,
   int nRegFlags,
   DWORD dwMiscStatus,
   REFGUID tlid,
   WORD wVerMajor,
   WORD wVerMinor 
);

パラメータ

  • hInstance
    コントロール クラスに関連付けられたモジュールのインスタンス ハンドル。

  • clsid
    コントロールごとに固有のクラス ID。

  • pszProgID
    コントロールごとに固有のプログラム ID。

  • idTypeName
    ユーザーが判読できる形式でコントロール名を持つ文字列のリソース ID。

  • idBitmap
    ツール バーまたはパレットで OLE コントロールを表現するのに使うビットマップのリソース ID。

  • nRegFlags
    次のフラグのいずれかが入ります。

    • afxRegInsertable   コントロールは、OLE オブジェクトの [オブジェクトの挿入] ダイアログ ボックスに表示されます。

    • afxRegApartmentThreading   レジストリのスレッド モデルを ThreadingModel=Apartment に設定します。

    • afxRegFreeThreading   レジストリのスレッド モデルを ThreadingModel=Free に設定します。

      2 つのフラグ afxRegApartmentThreadingafxRegFreeThreading を組み合わせて、ThreadingModel=Both を設定できます。スレッド モデル登録の詳細については、Windows SDK の「InprocServer32」を参照してください。

    4e353ze7.alert_note(ja-jp,VS.90).gifメモ :

    4.2 以前のバージョンの MFC では、intnRegFlags は、BOOLbInsertable であり、[オブジェクトの挿入] ダイアログ ボックスでコントロールを挿入できるかどうかを示していました。

  • dwMiscStatus
    次のいずれかのステータス フラグまたはその組み合わせが入ります。フラグの詳細については、Windows SDK の「OLEMISC」を参照してください。

    • OLEMISC_RECOMPOSEONRESIZE

    • OLEMISC_ONLYICONIC

    • OLEMISC_INSERTNOTREPLACE

    • OLEMISC_STATIC

    • OLEMISC_CANTLINKINSIDE

    • OLEMISC_CANLINKBYOLE1

    • OLEMISC_ISLINKOBJECT

    • OLEMISC_INSIDEOUT

    • OLEMISC_ACTIVATEWHENVISIBLE

    • OLEMISC_RENDERINGISDEVICEINDEPENDENT

    • OLEMISC_INVISIBLEATRUNTIME

    • OLEMISC_ALWAYSRUN

    • OLEMISC_ACTSLIKEBUTTON

    • OLEMISC_ACTSLIKELABEL

    • OLEMISC_NOUIACTIVATE

    • OLEMISC_ALIGNABLE

    • OLEMISC_IMEMODE

    • OLEMISC_SIMPLEFRAME

    • OLEMISC_SETCLIENTSITEFIRST

  • tlid
    コントロール クラスの ID。

  • wVerMajor
    コントロール クラスのメジャー バージョン番号。

  • wVerMinor
    コントロール クラスのマイナー バージョン番号。

戻り値

コントロール クラスが正常に登録できた場合は 0 以外の値を返します。それ以外の場合は 0 を返します。

解説

OLE コントロールを認識するコンテナがコントロールを使用できるようになります。AfxOleRegisterControlClass はコントロールの名前とシステム上での位置を使ってレジストリを更新し、コントロールがサポートしているスレッド モデルをレジストリに設定します。詳細については、「テクニカル ノート 64: ActiveX コントロールにおけるアパートメント モデルのスレッド処理」および Windows SDK の「About Processes and Threads」を参照してください。

使用例

// Member function implementation of class COleObjectFactory::UpdateRegistry 
//
BOOL CMyAxCtrl::CMyAxCtrlFactory::UpdateRegistry(BOOL bRegister)
{
    // TODO: Verify that your control follows apartment-model threading rules.
    // Refer to MFC TechNote 64 for more information.
    // If your control does not conform to the apartment-model rules, then
    // you must modify the code below, changing the 6th parameter from
    // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.

    if (bRegister)
        return AfxOleRegisterControlClass(
            AfxGetInstanceHandle(),
            m_clsid,
            m_lpszProgID,
            IDS_NVC_MFCAXCTL,
            IDB_NVC_MFCAXCTL,
            afxRegInsertable | afxRegApartmentThreading,
            _dwMyOleMisc,
            _tlid,
            _wVerMajor,
            _wVerMinor);
    else
        return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}

上記の例では、6 つ目のパラメータを作成するために、挿入可能なフラグとアパートメント モデルのフラグを OR で組み合わせて、AfxOleRegisterControlClass を呼び出す方法を示しています。

         afxRegInsertable | afxRegApartmentThreading,

コントロールは、有効なコンテナの [オブジェクトの挿入] ダイアログ ボックスに表示され、アパートメント モデルを認識します。アパートメント モデルを認識するコントロールは、静的クラスのデータをロックにより保護する必要があります。1 つのアパートメント内のコントロールが静的データにアクセスしている間、終了しないうちにスケジューラによってアクセスが無効になり、同一クラス内の別のインスタンスが同じ静的データを使用し始めることがないようにするためです。静的データへのアクセスは、クリティカル セクション コードで囲みます。

必要条件

ヘッダー : <afxctl.h>

参照

概念

MFC マクロとグローバル

参照

AfxOleRegisterPropertyPageClass

AfxOleRegisterTypeLib

AfxOleUnregisterClass

AfxOleUnregisterTypeLib