文章編號: 179907 - 上次校閱: 2005年7月11日 - 版次: 1.2

如何顯示 CAnimateCtrl 具有透明背景

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

本文將示範如何顯示具有透明背景的.avi 檔案。 CAnimateCtrl 控制項支援.avi 檔案具有透明背景與 16 色的限制。.avi 檔案的第一個圖文框中第一個的像素決定 CAnimateCtrl 控制項的背景色彩。

其他相關資訊

若要顯示 CDialog 或其衍生的類別上.avi 檔案,您需要將 CAnimateCtrl 樣式設定為 ACM_TRANSPARENT。如果.avi 檔案的第一個圖文框中第一個的像素的色彩不是從 CDialog 物件然後 CDialog 物件的背景色彩的背景色彩將作為.avi 檔案的背景色彩。因此,CAminateCtrl 控制項將會有透明背景。

若要顯示 CView 或其衍生的類別上.avi 檔案,您必須攔截 WM_CTLCOLOR 訊息 CView 類別中的,為 [CAnimateCtrl 傳回 null 的筆刷 (不是要與只傳回 NULL 混淆)。在另外您必須將 CAnimateCtrl 樣式設定為 ACM_TRANSPARENT。否則,預設對話方塊] 方塊中的背景色彩會用於做為背景色彩動畫控制項。

比方說如果一個 CView 衍生類別是 CTestanimctrlView,您需要將 ACM_TRANSPARENT 樣式加入至 [CAnimateCtrl 入郵件] 對應加入 ON_WM_CTLCOLOR 和 OnCtlColor 訊息處理常式加入 CTestanimctrlView 類別,如下列步驟所述:

範例程式碼

將下列程式碼加入至.h 檔案的 CTestanimctrlView:
   CAnimateCtrl* m_pMyAnimateCtrl;
      afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
CTestanimctrlView 的.cpp 檔案中加入下列程式碼:
  1. 加入下列程式碼中 CTestanimctrlView::OnInitialUpdate:
          // Create my animate control.
          m_pMyAnimateCtrl = new CAnimateCtrl;
    
             UINT styles = WS_CHILD |  ACS_TRANSPARENT |  ACS_AUTOPLAY;
             m_pMyAnimateCtrl->Create(styles, CRect(100, 50, 300, 300), this,
                ID_MYANIM);   // here ID_MYANIM is the ID of m_pMyAnimateCtrl
  2. 加入訊息對應 ON_MN_CTLCOLOR():
          BEGIN_MESSAGE_MAP(CTestanimctrlView, CView)
             //{{AFX_MSG_MAP(CTestanimctrlView)
             ON_WM_CTLCOLOR()
          END_MESSAGE_MAP()
  3. 將訊息處理常式加入為 WM_CTLCOLOR:
          HBRUSH CCTestanimctrlView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT
             nCtlColor)
          {
             UINT id = pWnd->GetDlgCtrlID();
             if (id == ID_MYANIM)
                return (HBRUSH)GetStockObject(NULL_BRUSH);
    
             HBRUSH hbr = CView::OnCtlColor(pDC, pWnd, nCtlColor);
             return hbr;
          }
    					
  4. 釋放 animate 控制項所使用的記憶體:
          CTestanimctrlView::~CTestanimctrlView()
          {
             if (m_pMyAnimateCtrl) {
                m_pMyAnimateCtrl->DestroyWindow();
                delete m_pMyAnimateCtrl;
             }
          }

這篇文章中的資訊適用於:
  • Microsoft Platform Software Development Kit-January 2000 Edition
  • Microsoft Foundation Class Library 4.2?應用於:
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
關鍵字:?
kbmt kbanimation kbctrl kbhowto KB179907 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:179907? (http://support.microsoft.com/kb/179907/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。