• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    將視頻演示作為應用程序的啟動封面

    發布: 2007-7-14 21:11 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 18次 | 進入軟件測試論壇討論

    領測軟件測試網 作者: 哈爾濱 潘景巖

    --- 在啟動應用程序時演示一段生動的視頻畫面,會使您的軟件增色不少。應該做到演示結束后自動開始主程序;或者在演示過程中,在屏幕上任意位置按下鼠標鍵立即結束演示,并開始主程序。利用Windows提供的 MCIWnd窗口類及宏命令,可方便地創建和開啟視頻窗口,并開始演示。
    ---- 需要解決四個問題:
    ---- 首先,在應用程序視類的構造函數中創建視頻窗口,在初始化函數中開始播放;
    ---- 其次,建立一個計時器。利用Class Vizard為WM_TIMER增加消息處理函數,以自動關閉視頻窗口并顯示應用程序主窗口;
    ---- 另外,為了便于從MCIWnd子類化窗口的鼠標消息處理函數中,對應用程序視類的計時器處理函數進行控制,引入一個布爾型全局變量,用來標示是否可以關閉視頻窗口;
    ---- 最后,也是最關鍵的,應用程序可以截獲發生在主窗口內的鼠標消息,卻無法截獲發生在視頻窗口內的鼠標消息,因為Windows已將視頻窗口的鼠標消息處理函數封裝在MCIWnd窗口類中。所以,為了截獲發生在視頻窗口內的鼠標信息,需要重新定義MCIWnd窗口消息處理函數。
    ---- 具體操作步驟如下(在Visual C++6.0環境下調試通過):
    ---- (1)在應用程序類的頭文件中加入布爾型全局變量:
    class CMyApp : public CWinApp
    {
    public:
    bool m_CanClose;
    ...
    }
      
    (2)在應用程序類的構造函數中對這一標志變量進行初始化:
    CMyApp::CMyApp()
    {
    m_CanClose=false;
    ...
    }
      
    (3)在CMyView類的頭文件中,加入成員変量:
    private:
    HWND m_VideoWnd; //視頻窗口句柄
    long m_VideoLength; //視頻放映總長度
      
    (4)在MyView.CPP文件中加入以下內容:
    WNDPROC OldProc; //保存原映射函數
    LRESULT CALLBACK NewProc(HWND,UINT,
    WPARAM,LPARAM);
    //新映射函數
    ...
    CMyView::CMyView()
    {
    CString filename("D:\\Video\\Cover.avi");
    //建立視頻窗口,并將句柄保存在m_VideoWnd中:
    m_VideoWnd = MCIWndCreate(
    this- >GetSafeHwnd(),
    AfxGetInstanceHandle(),
    WS_POPUP|WS_VISIBLE|
    MCIWNDF_NOPLAYBAR|
    MCIWNDF_NOMENU,
    filename);
    //使視頻窗口在屏幕上居中顯示:
    RECT rect;
    int sx,sy;
    ::GetWindowRect(m_VideoWnd,&rect);
    sx=(::GetSystemMetrics(SM_CXSCREEN)
    -rect.right+rect.left)/2;
    sy=(::GetSystemMetrics(SM_CYSCREEN)
    -rect.bottom+rect.top)/2;
    ::SetWindowPos(m_VideoWnd,HWND_TOPMOST,sx,
    sy,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
    }
      
    void CMyView::OnInitialUpdate()
    {
    CView::OnInitialUpdate();
    /* 調用GetWindowLong函數得到
    m_VideoWnd窗口原消息處理函數的入口地址,
    并保存在OldProc中。*/
    OldProc=(WNDPROC) ::GetWindowLong(m_VideoWnd,
    GWL_WNDPROC);
    /* 調用SetWindowLong函數將
    m_VideoWnd窗口消息處理函數的入口地址改為NewProc */
    ::SetWindowLong(m_VideoWnd,GWL_WNDPROC,
    (LONG)NewProc);
    m_VideoLength = MCIWndGetLength(m_VideoWnd);
    //得到視頻放映總長度
    MCIWndPlay(m_VideoWnd);
    //播放視頻文件
    SetTimer(1,20,NULL);
    //建立計時器,每20毫秒激活一次OnTimer函數
      
    }
      
    void CJapanView::OnTimer(UINT nIDEvent)
    {
    CJapanApp *app=(CJapanApp *)AfxGetApp();
    if(MCIWndGetPosition(m_VideoWnd) >=m_VideoLength
    //自動播放結束
    ||app-> m_CanClose==true)
    //人為按下鼠標左鍵結束
    {
    KillTimer(1); //撤消計時器
    MCIWndDestroy(m_VideoWnd); //撤消視頻窗口
    AfxGetMainWnd()- >ShowWindow(SW_SHOWMAXIMIZED);
    //顯示主窗口
    }
    CRecordView::OnTimer(nIDEvent);
    }
      
    LRESULT CALLBACK NewProc(HWND hWnd,UINT message,
    WPARAM wParam,LPARAM lParam)
    {
    if(message==WM_LBUTTONDOWN) //鼠標左鍵被按下
    {
    CJapanApp *app=(CJapanApp *)AfxGetApp();
    app- >m_CanClose=true; //可以關閉視頻窗口
    }
    //如果不是鼠標左鍵按下消息,則調用原處理函數:
    return CallWindowProc(OldProc,hWnd,
    message,wParam,lParam);
    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>