vs2012偷梁换柱法之改变一个没有m_hWnd的active控件窗口大小

在插入一个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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值