日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】自绘对话框动画效果的状态栏

發布時間:2024/4/24 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MFC】自绘对话框动画效果的状态栏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 案例概述
    • 02. 開發環境
    • 03. 關鍵技術
    • 04. 程序設計
    • 05. 秘笈心法
    • 06. 源碼下載
    • 07. 附錄

01. 案例概述

在許多多媒體軟件中,狀態欄中會播放一個動畫,使界面更加美觀。本例就實現了一個動畫效果的狀態欄,效果如下圖所示。

02. 開發環境

系統環境:Windows 10

開發環境:Visual Studio 2019

03. 關鍵技術

使狀態欄播放一個動畫很容易。只要將CAnimateCtrl控件放置在狀態欄中就可以了。因為CAnimateCtrl控件可以播放無聲的avi動畫。在使用CAnimateCtrl控件時,需要使用Open方法和Play方法,下面逐一進行介紹。

Open方法

CAnimateCtrl::OpenBOOL Open(LPCTSTR lpszFileName); BOOL Open(UNIT nID);返回值:如果成功,則返回非零值,否則為0。參數: lpszFileName CString對象或一個指向一個以空終止符結尾的字符串的指針。此字符串包含了AVI文件的名字或一個AVI資源的名字。如果此參數為空,則系統關閉以前動畫控件打開的AVI片段,如果有的話。 nID AVI資源識別器。如果此參數為空,則系統關閉以前動畫控件打開的AVI片段,如果有的話。

Play方法

CAnimateCtrl::PlayBOOL Play(UNIT nFrom, UINT nTo, UINT nRep);返回值:如果成功,則返回非零值,否則為0。參數: nFrom 運行開始的那個幀的基于零的索引。值必須小于65,5360值意味著從AVI片段的第一幀開始。 nTo 運行結束的那個幀的基于零的索引。值必須小于65,536-1值意味著以AVI片段的最后一幀結束。 nRep 重新播放AVI片段的次數。值為-1意味著無限地重新運行此文件。

04. 程序設計

(1)新建一個基于對話框的應用程序。

(2)在對話框中放置CAnimateCtrl控件,并通過類向導將其命名為“m_Animate”。

(3)在對話框類中定義一個CStatusBar變量m_StatusBar。

(4)在對話框的OnInitDialog方法中創建狀態欄,并將CAnimateCtrl控件顯示在狀態欄中。

BOOL CMy1StatusDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統菜單中。// IDM_ABOUTBOX 必須在系統命令范圍內。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動// 執行此操作SetIcon(m_hIcon, TRUE); // 設置大圖標SetIcon(m_hIcon, FALSE); // 設置小圖標m_StatusBar.Create(this);UINT panels[4];for (int i = 0; i < 4; i++){panels[i] = 1000 + i;}m_StatusBar.SetIndicators(panels, 4);m_StatusBar.GetStatusBarCtrl().SetMinHeight(50);CRect rect;GetClientRect(rect);int width = rect.Width() / 4;for (int i = 0; i < 4; i++){m_StatusBar.SetPaneInfo(i, panels[i], SBPS_NORMAL, width);}//設置面板信息m_StatusBar.SetPaneText(0, TEXT("當前用戶"));m_StatusBar.SetPaneText(1, TEXT("滄海一笑"));m_StatusBar.SetPaneText(2, TEXT("動畫"));//m_Animage.SetParent(&m_StatusBar);RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//獲取第3個面板的區域大小m_StatusBar.GetStatusBarCtrl().GetRect(3, &rect);CRect progRect(rect.left, 2, rect.right, rect.Height() + 2);//m_Animage.MoveWindow(&progRect);m_Animage.Create(WS_CHILD | WS_VISIBLE, progRect, &m_StatusBar, 100);m_Animage.ShowWindow(SW_SHOW);m_Animage.Open(TEXT("4.avi"));m_Animage.Play(0, -1, -1);return TRUE; // 除非將焦點設置到控件,否則返回 TRUE }

05. 秘笈心法

狀態欄動畫的另一種實現

使用CAnimateCtrl控件播放動畫比較方便,也可以在狀態欄指定區域內用GDI函數來繪制動畫。動畫就是一幅一幅連續的圖像,使用CDC類的Bitblt成員函數繪制連續的圖像就可以形成動畫效果。

06. 源碼下載

下載:【MFC】自繪對話框動畫效果的狀態欄本.rar

07. 附錄

參考: 《Visual C++從入門到精通(項目案例版)》

總結

以上是生活随笔為你收集整理的【MFC】自绘对话框动画效果的状态栏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。