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 つのフラグ afxRegApartmentThreading と afxRegFreeThreading を組み合わせて、ThreadingModel=Both を設定できます。スレッド モデル登録の詳細については、Windows SDK の「InprocServer32」を参照してください。
メモ : 4.2 以前のバージョンの MFC では、intnRegFlags は、BOOL の bInsertable であり、[オブジェクトの挿入] ダイアログ ボックスでコントロールを挿入できるかどうかを示していました。
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>