利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用ATL實現QuickTime多媒體檔案播放 (轉)UI
- 微信小程式-媒體元件微信小程式元件
- 利用DOTNETBAR製作圓角窗體和圓角控制元件控制元件
- 要用VB做多媒體程式的同志必看... (轉)
- 一個Vue媒體多段裁剪元件Vue元件
- ATL元件中文路徑註冊問題 (轉)元件
- 谷歌最佳化Chrome全域性媒體控制元件 調整專輯封面尺寸谷歌Chrome控制元件
- 形象化的多媒體軟體主呼叫程式設計 (轉)程式設計
- Linux下的多媒體軟體(轉)Linux
- 使用ATL建立支援IClassFactory2的COM元件 (轉)元件
- 怎麼做java多媒體程式Java
- 鴻蒙ArkWeb 元件多媒體探究:從影片到音訊鴻蒙Web元件音訊
- 新手做自媒體,最好掌握這4款影片製作軟體
- 採用多執行緒製作動畫(轉)執行緒動畫
- 在VB中用API實現多媒體 (轉)API
- 自媒體多平臺同步,自媒體多平臺分發,自媒體多平臺管理
- 利用多媒體技術快速打造企業科技展廳
- 不使用ATL嚮導,建立一個簡單的ATL對話方塊程式. (轉)
- 利用 CHtmlView 和 HTML 製作新風格的介面 (轉)HTMLView
- Oracle資料庫處理多媒體資訊(轉)Oracle資料庫
- 科技展廳利用多媒體技術打造智慧化展廳
- 自己編寫安裝製作程式 (轉)
- 使用BCB製作控制面版程式 (轉)
- 直播app製作時應該自建流媒體伺服器嗎?APP伺服器
- 【html5多媒體】自定義播放器(彈幕,水印,甚至在視訊開頭新增封面)HTML播放器
- 利用JavaScript製作星星金字塔JavaScript
- 圖片馬製作及利用方式
- 試論多媒體技術與專案管理(轉)專案管理
- 用VB製作螢幕保護程式 (轉)
- Linux下的廣播程式製作(轉)Linux
- ps技巧:如何用ps簡單製作一張創意封面(技巧分享)
- 《深入解析ATL》學習手札 -- 第一天 (ATL #1) (轉)
- Data-Browse型Data-Aware控制元件的製作 (轉)控制元件
- three.js 製作邏輯轉體遊戲(下)JS遊戲
- three.js 製作邏輯轉體遊戲(上)JS遊戲
- 製作一個自己的軟體包CD(轉)
- 開源多媒體轉換器Curlew 0.1.22.3釋出了
- CES展:FIC展示Linux多媒體播放器(轉)Linux播放器