vs2012偷梁换柱法之改变一个没有m

xiaoxiao2021-02-28  114

在插入一个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() ==  NULLreturn;     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();         }     } } 就可以了,为何要如此添加,这里我们就是用IDC_STATIC大小来去改变media player控件的大小,而不是直接获取media player控件的大小面积,具体情况大家依照其原因及源码自己探究,相信会有更深刻印象,这里不再多说。效果图如下:

源码链接:http://download.csdn.net/detail/johnnyhu90/6312769

转载请注明原文地址: https://www.6miu.com/read-63874.html

最新回复(0)