在 MFC 中,COleControl::OnGetViewExtent 是 COleControl 类的一个公共方法,用于获取控件在其容器中的视图范围(view extent)。视图范围表示控件在容器中所占的空间大小。

以下是该方法的基本用法和一些关键信息:
BOOL COleControl::OnGetViewExtent(DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE* ptd, HDC hdcDraw, LPSIZEL psizel) const;

  •  dwDrawAspect: 表示绘制方面,通常为 DVASPECT_CONTENT。

  •  lindex: 在数据源对象中的项的索引,通常为 -1。

  •  ptd: 目标设备的信息,通常为 nullptr。

  •  hdcDraw: 目标设备的设备上下文,通常为 nullptr。

  •  psizel: 用于存储视图范围大小的 SIZEL 结构。


在实现 OnGetViewExtent 方法时,你需要设置 psizel 的值以反映控件在容器中的期望大小。这个方法通常用于告诉容器控件的理想大小,以便容器可以正确地布局和显示控件。

以下是一个简单的示例:
BOOL MyControl::OnGetViewExtent(DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE* ptd, HDC hdcDraw, LPSIZEL psizel) const
{
    // 设置视图范围大小为 200x200(示例值,根据实际需要调整)
    psizel->cx = 200;
    psizel->cy = 200;

    return TRUE;
}

这只是一个基本的示例,实际上你可能需要根据你的控件的内容和需求来计算视图范围大小。确保在设置 psizel 的值时考虑到不同的单位(通常是 HIMETRIC 单位)。

请注意,视图范围通常用于告诉容器如何布局控件,而不是指定控件的实际大小。控件的实际大小可能由容器根据其布局规则和用户交互调整。


转载请注明出处:http://www.zyzy.cn/article/detail/21116/MFC/COleControl