在插入一个Axtivex控件之后,我们有时会需要改变其大小,有的控件可以轻松是使用GetDlgItem(IDC_XXX)来获取其矩形的面积,但有些可能就会出错,当我在插入Windows media player控件时,就遇到了这种问题,经过仔细探究,其原因请参看:
1、一个没有m_hWnd的active控件窗口如何改变大小?
2、Activex调试以及m_hWnd为空 解决办法
3、ActiveX 控件窗口而不创建直到在 Internet Explorer 中可见
其实可以大概明白原因,给我灵感的是在 一个没有m_hWnd的active控件窗口如何改变大小?中起到的一个范例,最终获得一种不太乎完美但至少可以work的解决方案,下面介绍其:
1、在一个对话框上插入media player 控件,同时插入一个组框(Group Box)IDC_STATIC1,和media player控件一样大小,media player控件完全覆盖组框控件IDC_STATIC1,并将组框控件的visible属性设为FALSE, transparent属性设为TRUE,在Onsize中添加(依照我的工程Test来说,结尾给出其源码链接)如下代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
void CTestDlg::OnSize(UINT nType,
int cx,
int cy)
{ CDialogEx::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 if (m_Player.GetControlUnknown() == NULL) return; IOleObjectPtr pOleObj(m_Player.GetControlUnknown ()); if (pOleObj != NULL) { if (m_changed) { int i = 0; for ( int index=IDC_OPENBTN; index <= IDC_STATIC1; index++ ) { if (index != IDC_STATIC1) ReSize( NULL, m_rectControls[i++], index); else ReSize(&m_Player, m_rectControls[i++], NULL); } Invalidate(); } } } |
源码链接:http://download.csdn.net/detail/johnnyhu90/6312769