利用ATL制作程序多媒体封面组件

原创 2000年10月31日 13:17:00
COM的优越就不多说,使用ATL开发COM方便而快捷,并且具有Size小,Dependency少的特点。VC++的import 编译支持更是对COM开发的巨大支持。闲话休说,这就开始吧。
  一.Flash组件
        1.ATL COM AppWizard创建新项目"ATLFlash",选择DLL类型。
        2.加入ATL Object "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&brvbarWS_VISIBLE&brvbar
            MCIWNDF_NOPLAYBAR&brvbar
            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&brvbarSWP_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 idEvent,  // timer identifier
            DWORD dwTime  // current system time
            )
{
    
    long nLength;
    BOOL bEscape=::GetKeyState(VK_ESCAPE)&0x0100;
    nLength=MCIWndGetPosition(hwnd);
                //视频放完,或点击ESC键,关闭视频窗口
    if((nLength>=g_nLength)&brvbar&brvbar(bEscape)){
        KillTimer(hwnd,idEvent);
        MCIWndEnd(hwnd);
        MCIWndClose(hwnd);
        MCIWndDestroy(hwnd);
    }
};
        7.stdafx.h中加入
            #include <vwf.h>
            项目设置中加入“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。

VS2010创建ATL工程及使用C++测试COM组件

VS2010创建ATL工程及使用C++测试COM组件 2014年09月05日 ⁄ 综合 ⁄ 共 563字 ⁄ 字号 小 中 大 ⁄ 评论关闭 1.创建ATL...
  • Sayesan
  • Sayesan
  • 2015年10月22日 09:37
  • 2459

VS2010 简单ATL COM开发(下)

前面一章介绍了怎么创建ATL COM组件及注册,下面简单介绍如何调用COM组件。 1、在MFC中调用有一种很方便的方法,就是通过ClassWizard利用类型库生成包装类,不过有个前提就是com...
  • wangwenjing90
  • wangwenjing90
  • 2013年04月08日 15:11
  • 12928

VS2012创建ATL工程及使用MFC测试COM组件

这篇文章首先介绍了如何创建一个ATL工程,并为其添加接口类和实现接口方法;然后介绍了如何利用自动化的方式调用由ATL生成的dll,即在程序中获取CLSID和IID然后创建接口实例;最后分析了在程序中C...
  • pigautumn
  • pigautumn
  • 2015年01月22日 16:23
  • 6576

利用ATL编写COM组件

  • 2011年12月17日 12:18
  • 844KB
  • 下载

利用ATL编写COM组件

  • 2017年10月17日 21:47
  • 1.26MB
  • 下载

vs2013 c++ ATL 制作COM组件

com组件适用于多个不同的编程语言方便调用的一个组件接下来就是一个制作的过程创建了一个ATL项目后,点击确定然后点击下一步勾选:支持mfc,支持com+1.0 支持部件注册器,然后点击完成然后就变成了...
  • Accelerated1987
  • Accelerated1987
  • 2015年09月05日 11:02
  • 2208

精彩编程与编程技巧-在VB中制作单独程序封面的两种方法...

  • 2009年10月08日 11:13
  • 5KB
  • 下载

利用ATL库建立的对话框程序

  • 2008年03月03日 08:25
  • 19KB
  • 下载

VS2012创建ATL工程及使用MFC测试COM组件

  • 2015年01月22日 16:50
  • 283KB
  • 下载

ATL_COM组件开发,多线程中应用连接点传递消息实例

  • 2008年09月12日 15:29
  • 78KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用ATL制作程序多媒体封面组件
举报原因:
原因补充:

(最多只允许输入30个字)