青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Transparent Flash Control

Posted on 2009-12-04 17:21 S.l.e!ep.¢% 閱讀(1003) 評論(0)  編輯 收藏 引用 所屬分類: VC

Transparent Flash Control

Posted on 2008-09-11 22:13 沒畫完的畫 閱讀(1146) 評論(2) ?編輯?收藏引用 所屬分類: Windows COM

在網(wǎng)頁中只需要加入以下代碼

<object?classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"?codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"?width="600"?height="60">?
<param?name="movie"?value="test.swf">?
<param?name="quality"?value="high">?
<param?name="wmode"?value="transparent">?
<embed?src="***.swf"?quality="high"?pluginspage="http://www.macromedia.com/go/getflashplayer"?type="application/x-shockwave-flash"?width="600"?height="60"></embed>?
</object>?
就可以實現(xiàn) Flash 背景透明

在VC中要實現(xiàn) Flash 背影透明播放,Google了一下找到一個 Demo
原文URL:http://www.codeproject.com/KB/COM/flashcontrol.aspx

需要自己實現(xiàn)一個OLE容器,以前很少接觸COM,現(xiàn)在要實現(xiàn)的是一個OLE容器,先汗一下!!!!
想到一個問題:自己實現(xiàn)一個OLE容器跟使用直接使用FlashOcx 控件有何不同?
-- 未解決

Part 1
實現(xiàn)一個ActiveX對象的OLE容器需要繼承幾個接口
IOleClientSite
IOleInPlaceSiteWindowless
IOleInPlaceFrame
IStorage
(具體做什么,需要找資料惡補一下~~~~ ActiveX, OLE容器……)

在DEMO里實現(xiàn)了一個OLE容器類叫 COleContainerWnd
template<CLASS?T>
class?COleContainerWnd?:?virtual?public?IOleClientSite,
?????????????????????????virtual?public?IOleInPlaceSiteWindowless,?
?????????????????????????virtual?public?IOleInPlaceFrame,
?????????????????????????virtual?public?IStorage

是個模板類,T是留給 ActiveX?的接口

Part 2
把 flash.ocx 引進來,因為里面包含了Flash播放器的相關接口定義,它就是我們要放到容器里的 ActiveX 對象了
#import?"flash.ocx"?named_guids?

Part 3
CFlashWnd派生類
class?CFlashWnd:?public?COleContainerWnd<ShockwaveFlashObjects::IShockwaveFlash>,
???????????????????????????????? public?ShockwaveFlashObjects::_IShockwaveFlashEvents,
???????????????????????????????? public?ShockwaveFlashObjects::IServiceProvider
再汗一下,CFlashWnd 是個容器,還要實現(xiàn)?public ShockwaveFlashObjects::IServiceProvider 接口作甚?

至于要繼承 ShockwaveFlashObjects::_IShockwaveFlashEvents 接口的目的是為了接收 Flash 動畫發(fā)過來的 fscommand()?事件,在 Flash的AS(動作腳本)中調(diào)用 FsCommand(),就會
觸發(fā)這個事件了
(這是一個精通 Flash 的同學告訴我的!!)

CFlashWnd 對象的創(chuàng)建
g_flashWnd?=?new?CFlashWnd;
g_flashWnd->Create(ShockwaveFlashObjects::CLSID_ShockwaveFlash,
WS_EX_LAYERED,?WS_POPUP?|?WS_VISIBLE?|?WS_CLIPSIBLINGS,
g_hWnd,?g_hInst);?

Create() 函數(shù)的第一個參數(shù):Flash 播放對象的ClassID
Create() 函數(shù)的第二個參數(shù):窗體的擴展風格 WS_EX_LAYERED ,據(jù)說加了這個風格才能實現(xiàn)透明 Flash ,為啥?
……

Part 4
CFlashWnd::Create() 的內(nèi)幕
注冊了窗口類,然后就 CreateWindows? 了

值得注意的是

OleCreate() 函數(shù)用來創(chuàng)建一個 IOleObject 對象的實例,需要 把 Ole 容器 的?IOleClientSite?和 IStorage?作為參數(shù)傳給它
????hr?=?OleCreate(m_CLSID,?IID_IOleObject,?OLERENDER_DRAW,
????????0,?(IOleClientSite?*)this,?(IStorage?*)this,?(void?**)&m_lpO);

不解的是,virtual?public?IOleInPlaceSiteWindowless 跟 virtual?public?IOleInPlaceFrame 不用理了?

????hr?=?OleSetContainedObject(m_lpO,?TRUE);

OleSetContainedObject () 函數(shù)通知 IOleObject 對象跟它說,你已經(jīng)被嵌到 OLE 容器里了

hr?=?m_lpO->QueryInterface(__uuidof(T),?(void?**)&m_lpControl);
然后用 IOleObject 的 QueryInterface 獲取 IShockwaveFlash 接口(那個 T, 就是 ShockwaveFlashObjects::IShockwaveFlash 了)

????hr?=?m_lpO->QueryInterface(IID_IViewObjectEx,?(void?**)&m_lpViewObjectEx);
同樣的方法,也得到了 IViewObjectEx? 的接口
IViewObjectEx 用來干嘛的??

要創(chuàng)建一個無窗口的控件,OLE容器需要? IOleInPlaceObjectWindowless 接口來分派消息給對象, 因為 對象本身沒有自己所屬的窗體
另外,IOleInPlaceObject 接口需要重出那個對象

hr?=?m_lpO->DoVerb(OLEIVERB_SHOW,?NULL,?(IOleClientSite?*)this,?0,?NULL,?NULL);
IOleObject::DoVerb() 用來顯示對象和將對象置為運行的狀態(tài)

這樣,F(xiàn)lash 播放對象就建好了.....

Part 5.
透明窗體的重畫

1、創(chuàng)建窗體時加上 WS_EX_LAYERED 屬性
2、用 CreateDIBSection() 創(chuàng)建一個 32位的DIB塊, 然后把它 Select 到 DC 里面, It will be an offscreen plain to render window contents to. (這句不知如何譯....)
3、描繪窗體的內(nèi)容, preserving the alpha channel. (同上..)
4、調(diào)用 UpdateLayeredWindow() 函數(shù)重畫窗體

描繪 Flash 播放的內(nèi)容,用 OleDraw() 函數(shù), 在 IViewObject::Draw()? 中調(diào)用
hr?=?OleDraw(lpV,?DVASPECT_TRANSPARENT,?hdcDraw,?&rTotal);?

lpV?–?IViewObject?
interface?of?flash?player?control?
hdcDraw?–?offscreen?plain?
rTotal?–?client?rectangle?of?the?container?window?

DVASPECT_TRANSPARENT drawing aspect tells the object to draw it's content using alpha blending.

DVASPECT_TRANSPARENT drawing aspect tells the object to draw it's content using alpha blending.

While implementing this, I have met a serious bug in Flash Player Control 8. This bug is only in this version. Players 7 and 9 are free of it. The bug is in the way Flash Control fills the alpha channel of a 32 bit device context. If at least 1 of 255 alpha values is applied to pixel, the colors are mixed correctly, but the resulting alpha channel is set to 255, even if it was initially zero. This makes it impossible to create semitransparent windows. So I had to develop a solution to fix this bug. The solution is quite simple:

These equations are used by Flash Player Control for alpha blending:

R' = Rdst * (1 – alpha) + Rsrc * alpha
G' = Gdst * (1 – alpha) + Gsrc * alpha
B' = Bdst * (1 – alpha) + Bsrc * alpha

If I draw the contents of Flash onto black surface I get

R'black = Rsrc * alpha
G'black = Gsrc * alpha
B'black = Bsrc * alpha

If I draw the contents of Flash onto white surface I get

R'white = 255 * (1 – alpha) + Rsrc * alpha
G'white = 255 * (1 – alpha) + Rsrc * alpha
B'white = 255 * (1 – alpha) + Rsrc * alpha

Here is the system of equations:

R'black = Rsrc * alpha
R'white = 255 * (1 – alpha) + Rsrc * alpha

where alpha and Rsrc are unknown. After solving it you will get:

(255-Alpha) = R'white – R'black

Alpha = 255 – (R'white – R'black)

So, the solution is found. Now, we can draw contents of flash player twice and then correct the corrupted alpha channel.

Part 6. Events
Flash Player 對象的事件是用IDispatch來處理的,在創(chuàng)建后得到一個 IConnectionPointContainer 去獲取 DIID__IShockwaveFlashEvents 的 連接點(connection point)
hr?=?m_lpControl->QueryInterface(IID_IConnectionPointContainer,
(
void**)&m_lpConCont);
if?(FAILED(hr))
return?FALSE;
hr?
=?m_lpConCont->FindConnectionPoint(
ShockwaveFlashObjects::DIID__IShockwaveFlashEvents,?
&m_lpConPoint);
if?(FAILED(hr))
return?FALSE;
hr?
=?m_lpConPoint->Advise(
(ShockwaveFlashObjects::_IShockwaveFlashEvents
*)this,
&m_dwConPointID);
if?(FAILED(hr))
return?FALSE;

Part 7. DirectDraw
為了提交重畫的性能,所以使用 DirectDraw 接口
Flash對象通過 ShockwaveFlashObjects::IServiceProvider::raw_RemoteQueryService 這個接口來訪問它
(需要找一下 FlashObject 接口的文檔了解一下)


(眼睛睜不開,需要先睡一會………………)






青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清视频一区二区| 欧美一级理论性理论a| 亚洲国产欧美不卡在线观看| 国产精品一区二区三区乱码| 国产乱码精品| 久久精品一区二区国产| 麻豆精品一区二区综合av| 亚洲高清在线观看一区| 亚洲视频一区二区在线观看| 99精品视频免费全部在线| 亚洲欧美激情四射在线日| 久久综合中文| 国产日韩欧美在线播放| 一本色道久久综合亚洲精品高清 | 欧美母乳在线| 国产欧美精品日韩精品| av成人免费| 亚洲一线二线三线久久久| 蜜臀av性久久久久蜜臀aⅴ| 国产精品另类一区| 亚洲激情网址| 久久婷婷人人澡人人喊人人爽| 夜夜爽av福利精品导航| 国产日韩欧美成人| 亚洲国产欧美在线| 国产精品久久影院| 欧美大片在线看| 久久国产天堂福利天堂| 国产精品网站在线播放| 亚洲伊人第一页| 亚洲美女av在线播放| 免费不卡在线观看| 欧美一级一区| 一区二区三区三区在线| 欧美久久影院| 久久中文欧美| 国产精品视频| 亚洲国产精品成人久久综合一区| 国产精品一区二区久久国产| 欧美黄污视频| 欧美激情二区三区| 亚洲美女福利视频网站| 欧美激情影音先锋| 国产亚洲综合性久久久影院| 久久久久se| 国产精品九九| 欧美一区2区视频在线观看| 亚洲一区www| 亚洲精品五月天| 一区二区三区欧美| 日韩一级二级三级| 亚洲精品小视频在线观看| 激情久久五月天| 欧美刺激午夜性久久久久久久| 国产精品女主播| 亚洲免费观看视频| 国产精品视频99| 一本色道婷婷久久欧美| 99爱精品视频| 欧美福利网址| 亚洲欧洲一区| 国产精品欧美在线| 99在线精品免费视频九九视| 亚洲精品免费一二三区| 欧美a级片网站| 一区二区三区偷拍| 午夜精品久久久久影视| 国产一区二区观看| 午夜在线观看欧美| 亚洲国产精品传媒在线观看| 久久久精品国产免大香伊| **网站欧美大片在线观看| 亚洲免费观看在线观看| 99精品久久久| 欧美日韩一区二区三区在线观看免| 亚洲欧美精品中文字幕在线| 欧美在线视频免费观看| 9久re热视频在线精品| 欧美精品免费在线观看| 久久蜜桃香蕉精品一区二区三区| 欧美激情精品久久久| 亚洲国产欧美一区| 中文国产一区| 久久综合国产精品| 亚洲国产精品第一区二区| 一本色道久久99精品综合| 欧美午夜久久| 亚洲黄一区二区| 亚洲视频专区在线| 国产精品香蕉在线观看| 久久国产色av| 亚洲人成网站影音先锋播放| 国产一区二区三区日韩欧美| 久久影院午夜片一区| 亚洲精品欧美日韩专区| 香蕉亚洲视频| 在线观看欧美一区| 午夜精品福利一区二区三区av| 久久九九有精品国产23| 亚洲人成亚洲人成在线观看图片| 久久九九精品99国产精品| 亚洲国产成人av| 亚洲一区二区欧美日韩| 欧美老女人xx| 性欧美大战久久久久久久久| 欧美激情精品久久久久久| 亚洲在线观看视频网站| 含羞草久久爱69一区| 亚洲宅男天堂在线观看无病毒| 久久亚洲不卡| 亚洲一线二线三线久久久| 国内视频精品| 麻豆freexxxx性91精品| 在线视频你懂得一区| 久久综合狠狠综合久久激情| 亚洲视频在线视频| 尤物精品在线| 国产精品无码永久免费888| 麻豆成人91精品二区三区| 午夜精品福利一区二区蜜股av| 欧美激情影院| 久久精品亚洲一区二区三区浴池| 99国产成+人+综合+亚洲欧美| 国产日韩精品在线| 欧美性视频网站| 欧美极品欧美精品欧美视频| 久久精品国产91精品亚洲| 亚洲图中文字幕| 亚洲日本理论电影| 欧美激情亚洲| 欧美成人中文字幕| 久久久精品五月天| 亚洲欧美国产制服动漫| 一区二区日韩伦理片| 91久久精品国产91久久性色| 精东粉嫩av免费一区二区三区| 国产女人精品视频| 国产精品久久久久久久久久ktv| 欧美激情综合在线| 欧美高清视频一区二区三区在线观看 | 国产日韩一区| 国产精品视频一| 国产精品日日摸夜夜添夜夜av| 欧美视频一区二区三区| 欧美影院精品一区| 欧美亚洲在线播放| 亚洲欧美中文日韩在线| 亚洲一区视频| 亚洲欧美清纯在线制服| 欧美一级视频一区二区| 香蕉久久夜色| 久久久久国内| 一区二区三区久久精品| 9i看片成人免费高清| 亚洲视频图片小说| 亚洲男人第一av网站| 西西裸体人体做爰大胆久久久| 午夜精品久久久久| 欧美一级久久久| 久久久久一区二区三区| 老司机精品导航| 欧美激情2020午夜免费观看| 欧美精品一区二区视频| 欧美视频中文字幕在线| 国产精品一卡二卡| 极品少妇一区二区三区| 亚洲欧洲另类| 亚洲一卡二卡三卡四卡五卡| 先锋影音一区二区三区| 六月婷婷久久| 亚洲免费成人av| 午夜精品久久久久久久久久久久久| 久久国产手机看片| 欧美连裤袜在线视频| 国产精品久久久久久久午夜| 国语自产精品视频在线看一大j8| 亚洲人成艺术| 欧美一区二区三区久久精品茉莉花| 久久久久高清| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区在线播放| 久久手机免费观看| 欧美影院成人| 欧美久久久久久久久| 国产免费观看久久| 亚洲精品激情| 久久久激情视频| 亚洲精品久久久久| 欧美在线首页| 欧美午夜影院| 91久久精品国产91久久性色| 性欧美1819sex性高清| 欧美黄污视频| 欧美自拍偷拍午夜视频| 欧美日韩国产一中文字不卡| 欧美日本免费| 18成人免费观看视频| 亚洲永久免费| 亚洲娇小video精品| 久久精品夜色噜噜亚洲a∨ |