新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → 利用ATL制作程序多媒体封面组件 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4498 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 利用ATL制作程序多媒体封面组件 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 利用ATL制作程序多媒体封面组件

    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¦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 idEvent,  // timer identifier
                DWORD 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 <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。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/10/24 8:54:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/30 6:47:25

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    1,378.906ms