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

S.l.e!ep.¢%

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

Transparent Flash Control

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

Transparent Flash Control

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

在網頁中只需要加入以下代碼

<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>?
就可以實現 Flash 背景透明

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

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

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

在DEMO里實現了一個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 是個容器,還要實現?public ShockwaveFlashObjects::IServiceProvider 接口作甚?

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

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

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

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

值得注意的是

OleCreate() 函數用來創建一個 IOleObject 對象的實例,需要 把 Ole 容器 的?IOleClientSite?和 IStorage?作為參數傳給它
????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 () 函數通知 IOleObject 對象跟它說,你已經被嵌到 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 用來干嘛的??

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

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

這樣,Flash 播放對象就建好了.....

Part 5.
透明窗體的重畫

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

描繪 Flash 播放的內容,用 OleDraw() 函數, 在 IViewObject::Draw()? 中調用
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來處理的,在創建后得到一個 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>
            国产精品国产三级国产专区53| 美女主播一区| 国产精品一区二区你懂得| 亚洲一区尤物| 午夜激情亚洲| 黄色精品网站| 亚洲国产成人91精品| 欧美激情1区| 午夜精品久久久久久99热| 西西裸体人体做爰大胆久久久| 国产一区在线免费观看| 欧美成人乱码一区二区三区| 欧美黄色成人网| 午夜精品久久| 久久伊人一区二区| 亚洲天堂成人在线观看| 久久gogo国模啪啪人体图| 91久久久久久国产精品| 亚洲午夜国产一区99re久久| 国产一区二区三区在线观看精品 | 欧美1区2区3区| 亚洲欧美99| 蜜臀99久久精品久久久久久软件| 亚洲一区二区av电影| 久久久噜噜噜| 亚洲欧美日韩精品久久久久 | 亚洲高清自拍| 国产日韩欧美制服另类| 亚洲国产一区二区三区青草影视| 国产精品嫩草影院一区二区 | 亚洲欧美一区二区原创| 鲁鲁狠狠狠7777一区二区| 亚洲视频国产视频| 免费不卡视频| 久久伊人免费视频| 国产精品视频不卡| 亚洲毛片在线免费观看| 亚洲成人中文| 欧美一级专区| 亚洲欧美综合国产精品一区| 欧美激情一区二区久久久| 久久久亚洲综合| 国产欧美日韩视频在线观看| 亚洲破处大片| 91久久久在线| 免费一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 国产亚洲精品久久久久动| 日韩亚洲视频| 亚洲视频在线二区| 欧美精品在线视频| 亚洲激情自拍| 亚洲欧洲日本mm| 男女av一区三区二区色多| 免费观看久久久4p| 在线精品福利| 久久天天躁狠狠躁夜夜av| 久久久欧美精品| 国产一区视频网站| 久久精品99无色码中文字幕| 久久精品亚洲一区| 国产欧美精品在线播放| 亚洲女同在线| 久久国产精品一区二区| 国产精品一区二区在线| 亚洲视频在线观看视频| 午夜性色一区二区三区免费视频| 国产精品久久久99| 亚洲欧美韩国| 久久美女性网| 亚洲国产中文字幕在线观看| 欧美www视频在线观看| 最近看过的日韩成人| 在线视频精品| 国产伦精品一区二区三区高清版| 亚洲女优在线| 蜜桃久久精品乱码一区二区| 亚洲欧洲在线看| 欧美日韩欧美一区二区| 亚洲图片欧美午夜| 久久久国产精品一区二区三区| 黄色工厂这里只有精品| 欧美成人一区在线| 亚洲视频 欧洲视频| 久久久久久亚洲综合影院红桃| 在线观看三级视频欧美| 欧美人妖在线观看| 午夜精品久久久久久久99黑人| 久久久午夜电影| 亚洲国产另类精品专区| 欧美丝袜一区二区| 欧美在线影院在线视频| 亚洲国产高清视频| 性欧美超级视频| 亚洲第一久久影院| 国产精品国产一区二区 | 宅男精品导航| 蜜臀av国产精品久久久久| 亚洲午夜电影在线观看| 国产在线日韩| 欧美日韩在线不卡| 久久日韩精品| 亚洲免费一级电影| 亚洲日本免费| 久久亚洲电影| 午夜精品视频网站| 亚洲精品少妇网址| 国内久久视频| 国产精品视频免费| 欧美精品一区二区三区在线播放| 亚洲欧美在线磁力| 日韩午夜电影av| 亚洲成色www久久网站| 欧美在线短视频| 亚洲一卡二卡三卡四卡五卡| 1000部精品久久久久久久久| 国产精品伊人日日| 欧美精品久久一区二区| 老司机免费视频一区二区| 亚洲欧美日韩在线一区| 亚洲久久成人| 亚洲国产欧美一区二区三区丁香婷| 久久精品免费电影| 午夜久久一区| 亚洲午夜国产一区99re久久 | 国产精品欧美一区二区三区奶水| 欧美高清你懂得| 老巨人导航500精品| 欧美在线亚洲| 午夜天堂精品久久久久| 亚洲综合电影一区二区三区| 日韩视频第一页| 亚洲精品欧美一区二区三区| 亚洲高清不卡av| 欧美黄色成人网| 欧美国产一区在线| 欧美激情精品久久久久久变态| 老鸭窝毛片一区二区三区| 久久精品欧美| 久久免费观看视频| 久久一区激情| 欧美顶级少妇做爰| 欧美激情麻豆| 亚洲区一区二| 99国内精品| 亚洲私人黄色宅男| 亚洲女同性videos| 久久精品国产2020观看福利| 久久久精品tv| 免费亚洲一区二区| 欧美日韩精品不卡| 国产精品乱码一区二区三区| 国产欧美日本一区视频| 激情一区二区三区| 亚洲欧洲免费视频| 99精品欧美一区二区三区| 亚洲视频在线一区观看| 欧美一区二区黄色| 久热精品视频在线免费观看| 欧美高清免费| 一本色道88久久加勒比精品| 亚洲综合色激情五月| 久久久久免费观看| 欧美刺激午夜性久久久久久久| 欧美日韩三级| 国产日产亚洲精品| 亚洲激情电影中文字幕| 亚洲图片在线| 久久精品国产一区二区三区| 欧美成人亚洲成人日韩成人| 亚洲免费激情| 久久精品国内一区二区三区| 美腿丝袜亚洲色图| 国产精品久久久免费| 亚洲成色777777在线观看影院| 99热免费精品在线观看| 欧美一区观看| 裸体女人亚洲精品一区| 亚洲精品免费一二三区| 欧美在线首页| 欧美日韩综合网| 在线观看日韩www视频免费| 亚洲午夜女主播在线直播| 久热成人在线视频| 一区二区三区蜜桃网| 欧美在现视频| 欧美另类在线观看| 国产亚洲精品bt天堂精选| 亚洲美女在线国产| 久热爱精品视频线路一| 日韩亚洲在线| 欧美精品国产一区| 在线观看日韩av| 欧美在线综合视频| 99国产精品自拍| 欧美激情国产日韩精品一区18| 国产一区二区三区的电影| 亚洲欧洲99久久| aa成人免费视频| 欧美久久久久|