自分でRegister&Createしたウィンドウ内にActiveXコントロールを入れ込む方法はどうやるのでしょうか?
1. RegisterClass() / g_hWndMain = CreateWindow("MyClass")
2. CoCreateInstance(CLSID_..., IID_IOleObject, &pOleObject)
3. pOleObject->SetClientSite(...) : コントロールに親ウィンドウのハンドルg_hWndMainを取得する手段を提供。
4. pOleObject->QueryInterface(IID_IOleInPlaceObject, &pOleinPlaceObject)
5. pOleinPlaceObject->SetObjectRects(...) : コントロールに親ウインドウの矩形と自分(コントロール)に割り当てられた矩形を教える。
ここまででコントロールに窓を表示する為の情報は教えたと思うのですが、表示できません・・・OrZ
ちなみにWebBrowserコントロールだとここまでで窓(非表示)が生成されるので、この後に無理矢理
pOleObject->QueryInterface(IID_IOleWindow, &pOleWindow);
pOleWindow->GetWindow(&g_hWndWBC)
ShowWindow(g_hWndWBC, SW_SHOW);
すればコントロールらしき白い空白が表示されます。(MyClassの背景は暗くしておく)
でもこれだけではこのコントロールはまともに使えないみたい・・・
それに他のActiveXコントロール(VB5CCEで自作)ではなぜかpOleObject->EnumVerbs()しないと窓が生成されないし(でもサイズは0)、g_hWndMainの子ウィンドウにならない・・・
OLEスレはあるんですが、余りに効率が悪いのでSDKレベルでOLEをやっている人はあまり居ないみたいです。