1

バックグラウンド

プログラムで他の ActiveX コントロールを挿入するために使用される複合コントロールを作成しました。(他の ActiveX コントロールの「ラッパー」です)

このガイドの手順に従いました: http://support.microsoft.com/kb/218442 .

複合コントロールには、ActiveX コントロールを含む「ウィンドウ」が含まれます。

仕事

プログラムでラッパーにあるウィンドウのサイズを管理する必要があります。ラッパーのサイズがわかれば、ウィンドウのサイズも管理できるという考えです。(たとえば、ラッパーの高さ - 10)これまでのところ、その方法は次のとおりです。

  1. この関数を使用してください: IOleObject::GetExtent() ラッパー サイズを取得します。
  2. (手順 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);
4

0 に答える 0