利用ATL製作程式多媒體封面元件 (轉)
利用ATL製作程式多媒體封面元件 (轉)[@more@]COM的優越就不多說,使用ATL開發COM方便而快捷,並且具有Size小,Dependency少的特點。VC++的import 編譯支援更是對COM開發的巨大支援。閒話休說,這就開始吧。
一.Flash
1.ATL AppWizard建立新專案"ATLFlash",選擇DLL型別。
2.加入ATL "Flash"
Insert -> New ATL Object
選擇Object中的Simple Object,
Short Name:“FLash”
3.介面新增Method “Play”
引數為:[in]BSTR bstrFile,[in]long hInstance,[in]long hWnd
4.在CFlash類中加入:
private:
HWND m_hWnd;//影片視窗控制程式碼
5. 實現Play方法。
STDMETHODIMP CFlash::Play(BSTR bstrFile, long hInstance, long hWnd)
{
try{
m_hMCIWnd=(HWND)hWnd;
_bstr_t file(bstrFile);
m_hMCIWnd=::MCIWndCreate((HWND)hWnd,(HINSTANCE)hInstance,
WS_POPUP¦WS_VISIBLE¦
MCIWNDF_NOPLAYBAR¦
MCIWNDF_NOMENU,
(char *)file);
RECT rect;
int sx,sy;
::GetWindowRect(m_hMCIWnd,&rect);
sx=(::GetSystemMetrics(SM_CXSCREEN)
-rect.right+rect.left)/2;
sy=(::GetSystemMetrics(SM_CYSCREEN)
-rect.bottom+rect.top)/2;
//視窗居中
::SetWindowPos(m_hMCIWnd,HWND_TOPMOST,sx,
sy,0,0,SWP_SHOWWINDOW¦SWP_NOSIZE);
g_nLength=MCIWndGetLength(m_hMCIWnd);
MCIWndPlay(m_hMCIWnd);
SetTimer(m_hMCIWnd,1,50,TimerProc);
}catch(...)
{
AtlTrace("error:%ul",::GetLastError());
}
return S_OK;
}
6.Flash.cpp中實現TimerProc,用於關閉影片視窗。
long g_nLength;
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT vent, // timer identifier
D dwTime // current system time
)
{
long nLength;
BOOL bEscape=::GetKeyState(VK_ESCAPE)&0x0100;
nLength=MCIWndGetPosition(hwnd);
//影片放完,或點選ESC鍵,關閉影片視窗
if((nLength>=g_nLength)¦¦(bEscape)){
KillTimer(hwnd,idEvent);
MCIWndEnd(hwnd);
MCIWndClose(hwnd);
MCIWndDestroy(hwnd);
}
};
7.stdafx.h中加入
#include
專案設定中加入“vwf32.lib”庫,
開啟專案設定中C++,C++language中的Enable Error Handling
編譯,一切OK。
二,元件的使用。
1.建立一個MDI或SDI專案"FlashClient"
2.stdafx.h中加入
#import “ATLFlash.dll” no_namespace
FlashCient.cpp中加入
struct _InitCom{
_InitCom(){::CoInitialize(NULL);}
~_InitCom(){::CoUninitialize(); }
}__InitCom;
3.CFlashClientView加入
private:
IFlashPtr pFlashServer;
4.CFlashClent::OnInitialUpdate()加入
_bstr_t file("Sample.avi");
pFlashServer->Play( file,(long)::AfxGetInstanceHandle(),(long)this->GetSafeHwnd());
5.編譯,一切OK。
一.Flash
1.ATL AppWizard建立新專案"ATLFlash",選擇DLL型別。
2.加入ATL "Flash"
Insert -> New ATL Object
選擇Object中的Simple Object,
Short Name:“FLash”
3.介面新增Method “Play”
引數為:[in]BSTR bstrFile,[in]long hInstance,[in]long hWnd
4.在CFlash類中加入:
private:
HWND m_hWnd;//影片視窗控制程式碼
5. 實現Play方法。
STDMETHODIMP CFlash::Play(BSTR bstrFile, long hInstance, long hWnd)
{
try{
m_hMCIWnd=(HWND)hWnd;
_bstr_t file(bstrFile);
m_hMCIWnd=::MCIWndCreate((HWND)hWnd,(HINSTANCE)hInstance,
WS_POPUP¦WS_VISIBLE¦
MCIWNDF_NOPLAYBAR¦
MCIWNDF_NOMENU,
(char *)file);
RECT rect;
int sx,sy;
::GetWindowRect(m_hMCIWnd,&rect);
sx=(::GetSystemMetrics(SM_CXSCREEN)
-rect.right+rect.left)/2;
sy=(::GetSystemMetrics(SM_CYSCREEN)
-rect.bottom+rect.top)/2;
//視窗居中
::SetWindowPos(m_hMCIWnd,HWND_TOPMOST,sx,
sy,0,0,SWP_SHOWWINDOW¦SWP_NOSIZE);
g_nLength=MCIWndGetLength(m_hMCIWnd);
MCIWndPlay(m_hMCIWnd);
SetTimer(m_hMCIWnd,1,50,TimerProc);
}catch(...)
{
AtlTrace("error:%ul",::GetLastError());
}
return S_OK;
}
6.Flash.cpp中實現TimerProc,用於關閉影片視窗。
long g_nLength;
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT vent, // timer identifier
D dwTime // current system time
)
{
long nLength;
BOOL bEscape=::GetKeyState(VK_ESCAPE)&0x0100;
nLength=MCIWndGetPosition(hwnd);
//影片放完,或點選ESC鍵,關閉影片視窗
if((nLength>=g_nLength)¦¦(bEscape)){
KillTimer(hwnd,idEvent);
MCIWndEnd(hwnd);
MCIWndClose(hwnd);
MCIWndDestroy(hwnd);
}
};
7.stdafx.h中加入
#include
專案設定中加入“vwf32.lib”庫,
開啟專案設定中C++,C++language中的Enable Error Handling
編譯,一切OK。
二,元件的使用。
1.建立一個MDI或SDI專案"FlashClient"
2.stdafx.h中加入
#import “ATLFlash.dll” no_namespace
FlashCient.cpp中加入
struct _InitCom{
_InitCom(){::CoInitialize(NULL);}
~_InitCom(){::CoUninitialize(); }
}__InitCom;
3.CFlashClientView加入
private:
IFlashPtr pFlashServer;
4.CFlashClent::OnInitialUpdate()加入
_bstr_t file("Sample.avi");
pFlashServer->Play( file,(long)::AfxGetInstanceHandle(),(long)this->GetSafeHwnd());
5.編譯,一切OK。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 數字多媒體展廳製作需要注意哪些問題?
- 一個Vue媒體多段裁剪元件Vue元件
- 谷歌最佳化Chrome全域性媒體控制元件 調整專輯封面尺寸谷歌Chrome控制元件
- OpenHarmony 3.2 Beta多媒體系列——影片錄製
- 新手做自媒體,最好掌握這4款影片製作軟體
- 利用多媒體技術快速打造企業科技展廳
- 鴻蒙ArkWeb 元件多媒體探究:從影片到音訊鴻蒙Web元件音訊
- 製作自媒體短影片,這些內容不能忽略!
- 自媒體多平臺同步,自媒體多平臺分發,自媒體多平臺管理
- 科技展廳利用多媒體技術打造智慧化展廳
- 圖片馬製作及利用方式
- 多媒體的格式
- three.js 製作邏輯轉體遊戲(上)JS遊戲
- three.js 製作邏輯轉體遊戲(下)JS遊戲
- ps技巧:如何用ps簡單製作一張創意封面(技巧分享)
- 直播app製作時應該自建流媒體伺服器嗎?APP伺服器
- Vue + Element 自定義上傳封面元件Vue元件
- 電影製作媒體管理軟體:Silverstack XT for Mac v6.4.9啟用版Mac
- 多媒體格式自由轉換:Permute 3 中文破解版最新
- XviD4PSP for mac多媒體檔案格式轉換器Mac
- 新媒體運營新手如何製作短影片?短影片運營技巧!
- QWinFF(媒體轉換器)
- pyqt5+gdal製作s57轉geojson小程式QTJSON
- python爬蟲利用requests製作代理池sPython爬蟲
- 多個物體模型快速製作爆炸圖?試一試ThingJS!模型JS
- 價目表製作報價單製作軟體
- 使用ResizeObserver製作響應式Vue元件ServerVue元件
- React製作全域性Tooltip文字提示元件React元件
- 短影片好做嗎?學會自媒體短影片製作需要哪些知識?
- 短影片製作:哪些自媒體領域最好做?你要從自身看起
- 014---多媒體標籤
- Emby for Mac多媒體影音庫Mac
- 微信聽書小程式自媒體開發製作案例
- 自媒體多平臺管理軟體,管理30+自媒體平臺,一鍵多發
- 自媒體多平臺釋出,自媒體多平臺一鍵釋出工具
- 感恩陪伴 HelloGitHub 定製的紅包封面Github
- Spotify:音樂流媒體王者轉虧為盈之路還有多遠?
- 利用CSS中input製作開關、輪播圖CSS
- 利用js製作簡單的動態日曆JS