バックグラウンド
プログラムで他の ActiveX コントロールを挿入するために使用される複合コントロールを作成しました。(他の ActiveX コントロールの「ラッパー」です)
このガイドの手順に従いました: http://support.microsoft.com/kb/218442 .
複合コントロールには、ActiveX コントロールを含む「ウィンドウ」が含まれます。
仕事
プログラムでラッパーにあるウィンドウのサイズを管理する必要があります。ラッパーのサイズがわかれば、ウィンドウのサイズも管理できるという考えです。(たとえば、ラッパーの高さ - 10)これまでのところ、その方法は次のとおりです。
- この関数を使用してください: IOleObject::GetExtent() ラッパー サイズを取得します。
- (手順 1 の値を使用して) ウィンドウのサイズを計算し、Create() 関数に渡します。
問題は、ウィンドウを作成するには、「クライアント座標で」コントロールのサイズを指定する必要があることです。しかし、ステップ 1 の出力はステップ 2 には適切ではないようです。
質問
ステップ 1 の出力をステップ 2 の適切な入力に変換するにはどうすればよいですか? または、プログラムで複合コントロールのウィンドウのサイズを指定する他の方法はありますか?
ここに私の簡単なコードがあります:
// Register the AtlAxWin class which implements ATL containment
// This is not needed for an ATL composite control
AtlAxWinInit();
// m_sizeExtent.cx and m_sizeExtent.cy is an output from step 1
RECT l_rect = {0, 0, m_sizeExtent.cx, m_sizeExtent.cy};
// m_hWnd is the composite control handle
// l_rect is the size of ActiveX control in client coordinates
CAxWindow l_hostedWnd;
l_hostedWnd.Create(m_hWnd,
l_rect,
_T("MetaStock.Chart.2"),
WS_CHILD | WS_VISIBLE,
0,
0U);