如何调整嵌入在复合控件中的窗口的大小

时间:2013-01-24 10:01:42

标签: c++ window activex

背景

我创建了一个复合控件,用于以编程方式插入其他ActiveX控件。 (它是其他ActiveX控件的“包装器”)

我按照本指南中的步骤操作:http://support.microsoft.com/kb/218442

复合控件将包含一个“窗口”,其中包含ActiveX控件。

任务

我需要以编程方式管理包装器中窗口的大小。 我的想法是,如果我知道包装器的大小,我也可以管理窗口的大小。 (例如,包装纸的高度 - 10) 据我所知,到目前为止如何做到:

  1. 使用此函数:IOleObject :: GetExtent()以获取包装器大小
  2. 计算窗口的大小(使用步骤1中的值)并传递给Create()函数。
  3. 问题是要创建窗口,我必须在“客户端坐标”中指定控件的大小。但似乎步骤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);
    

0 个答案:

没有答案