可不可以把一个控件作为一个容器

时间:2022-06-14 22:40:01
公司里自己开发的有一个控件,显示三维场景的。现在想用flash作交互界面。希望能让flash控件以背景透明的方式嵌入到这个三维显示区域。有没有可能把原来的三维控件改造成一个透明的容器,用来装载这个flash控件。
如果可以,谁能大概讲讲如何开发一个既是容器又是控件的东西?提供参考资料和书籍也行.
重赏,可单独再要分,谢谢!

15 个解决方案

#1


控件可以作为容器,在提高功能的时候,嵌入其他控件,如window media player, flash.ocx.
具体做法和在应用程序里嵌入flash.ocx 是一样的,没有区别,在应该程序里如何嵌入flash.在你的控件里也同样的嵌入.
MFC 最简单就是 才对话框上放flash,可普通button, static控件一样使用
动态创建: 添加 mfc activexs 类 from flash.ocx
m_acxctrl 是类变量
if (!m_acxctrl.Create(NULL, WS_CHILD | WS_VISIBLE, rc, this, IDC_ACXCTRL1))
    {
        AfxMessageBox(L"Failed to create AcxCtrl wnd");
        return -1;
    }

wtl 也差不多
动态创建
#import "你的路径\\flash.ocx"
CAxWindow flashwnd;
flashwnd.Create(m_hWnd, rc, 0, WS_CHILD|WS_VISIBLE);
flashwnd.CreateControlEx("{d27cdb6e-ae6d-11cf-96b8-444553540000}", NULL, NULL, &punkCtrl);
主要的代码都在这里了,不明白在问吧

#2


码这么多字真累呀

#3


可以啊,实现activex容器的几个接口就行了,
//
// activeX container
//

IOleClientSite
IOleInPlaceFrame
IOleInPlaceSite
http://www.codeproject.com/KB/COM/cwebpage.aspx

#4


一般来说,控件是可以作为容器的
如普通的BUTTON,EDIT都是继承自CWindow类的
要看你公司那个控件是继承自什么类的
继承自Window类有个好处,就是很多方法不用写了,加入子控件比较简单

如果不是继承自相应的window类,也没关系
就是要自己去写一些加载子控件,或是你说的flash

#5


唉,小弟刚刚接触com, activex这些玩意儿。不太懂。
再问下,那个flash控件,也就是shockwaveflash,可以插入到窗体中用来播放flash的,我用自己的容器来装载这个控件,能不能实现背景半透明的效果?
有个现成的实现背景透明的代码,基于WTL的,看着头疼。
http://www.ernzo.com/windowlesscont.aspx

#6


可以的

#7


http://www.ernzo.com/windowlesscont.aspx
这篇很不错啊,如果你看不懂这篇,别人再给你讲,估计你也看不懂

#8


背景透明是什么?
是 windowless 吗?

#9


引用 5 楼 coy_wang 的回复:
唉,小弟刚刚接触com, activex这些玩意儿。不太懂。
再问下,那个flash控件,也就是shockwaveflash,可以插入到窗体中用来播放flash的,我用自己的容器来装载这个控件,能不能实现背景半透明的效果?
有个现成的实现背景透明的代码,基于WTL的,看着头疼。
http://www.ernzo.com/windowlesscont.aspx

flash.ocx 有一个属性实现 windowless
put_WMode("Transparent"),

#10


好像还要看它的容器,设成transparent,反正这个flash直接插到MFC的对话框后会有点问题,插到C#里这个属性没用,插到VB的窗体里就可以,插到IE里面也可以。。。。。
上面我给的网址,是基于WTL让它背景透明的。
不过我现在需要支持半透明。

#11


半透明是什么?

#12


比如我不让背景透明,我给它设给颜色,然后给它50%的透明度,这样就能透过这个背景看到后面的东西。
我觉得如果容器能取到控件的背景颜色,然后根据自己该处显示的颜色,是不是就可以就可以通过利用一些算法让它显示出透明的效果。
谢谢你这么热心回答我的问题。

#13


关注一下,

#14


mark~

#15


先结帖了,有问题再请教大家,谢谢

#1


控件可以作为容器,在提高功能的时候,嵌入其他控件,如window media player, flash.ocx.
具体做法和在应用程序里嵌入flash.ocx 是一样的,没有区别,在应该程序里如何嵌入flash.在你的控件里也同样的嵌入.
MFC 最简单就是 才对话框上放flash,可普通button, static控件一样使用
动态创建: 添加 mfc activexs 类 from flash.ocx
m_acxctrl 是类变量
if (!m_acxctrl.Create(NULL, WS_CHILD | WS_VISIBLE, rc, this, IDC_ACXCTRL1))
    {
        AfxMessageBox(L"Failed to create AcxCtrl wnd");
        return -1;
    }

wtl 也差不多
动态创建
#import "你的路径\\flash.ocx"
CAxWindow flashwnd;
flashwnd.Create(m_hWnd, rc, 0, WS_CHILD|WS_VISIBLE);
flashwnd.CreateControlEx("{d27cdb6e-ae6d-11cf-96b8-444553540000}", NULL, NULL, &punkCtrl);
主要的代码都在这里了,不明白在问吧

#2


码这么多字真累呀

#3


可以啊,实现activex容器的几个接口就行了,
//
// activeX container
//

IOleClientSite
IOleInPlaceFrame
IOleInPlaceSite
http://www.codeproject.com/KB/COM/cwebpage.aspx

#4


一般来说,控件是可以作为容器的
如普通的BUTTON,EDIT都是继承自CWindow类的
要看你公司那个控件是继承自什么类的
继承自Window类有个好处,就是很多方法不用写了,加入子控件比较简单

如果不是继承自相应的window类,也没关系
就是要自己去写一些加载子控件,或是你说的flash

#5


唉,小弟刚刚接触com, activex这些玩意儿。不太懂。
再问下,那个flash控件,也就是shockwaveflash,可以插入到窗体中用来播放flash的,我用自己的容器来装载这个控件,能不能实现背景半透明的效果?
有个现成的实现背景透明的代码,基于WTL的,看着头疼。
http://www.ernzo.com/windowlesscont.aspx

#6


可以的

#7


http://www.ernzo.com/windowlesscont.aspx
这篇很不错啊,如果你看不懂这篇,别人再给你讲,估计你也看不懂

#8


背景透明是什么?
是 windowless 吗?

#9


引用 5 楼 coy_wang 的回复:
唉,小弟刚刚接触com, activex这些玩意儿。不太懂。
再问下,那个flash控件,也就是shockwaveflash,可以插入到窗体中用来播放flash的,我用自己的容器来装载这个控件,能不能实现背景半透明的效果?
有个现成的实现背景透明的代码,基于WTL的,看着头疼。
http://www.ernzo.com/windowlesscont.aspx

flash.ocx 有一个属性实现 windowless
put_WMode("Transparent"),

#10


好像还要看它的容器,设成transparent,反正这个flash直接插到MFC的对话框后会有点问题,插到C#里这个属性没用,插到VB的窗体里就可以,插到IE里面也可以。。。。。
上面我给的网址,是基于WTL让它背景透明的。
不过我现在需要支持半透明。

#11


半透明是什么?

#12


比如我不让背景透明,我给它设给颜色,然后给它50%的透明度,这样就能透过这个背景看到后面的东西。
我觉得如果容器能取到控件的背景颜色,然后根据自己该处显示的颜色,是不是就可以就可以通过利用一些算法让它显示出透明的效果。
谢谢你这么热心回答我的问题。

#13


关注一下,

#14


mark~

#15


先结帖了,有问题再请教大家,谢谢