背景
我创建了一个复合控件,用于以编程方式插入其他 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);