【MFC】自绘对话框动画效果的状态栏
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發(fā)環(huán)境
- 03. 關(guān)鍵技術(shù)
- 04. 程序設(shè)計(jì)
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
在許多多媒體軟件中,狀態(tài)欄中會(huì)播放一個(gè)動(dòng)畫,使界面更加美觀。本例就實(shí)現(xiàn)了一個(gè)動(dòng)畫效果的狀態(tài)欄,效果如下圖所示。
02. 開發(fā)環(huán)境
系統(tǒng)環(huán)境:Windows 10
開發(fā)環(huán)境:Visual Studio 2019
03. 關(guān)鍵技術(shù)
使?fàn)顟B(tài)欄播放一個(gè)動(dòng)畫很容易。只要將CAnimateCtrl控件放置在狀態(tài)欄中就可以了。因?yàn)镃AnimateCtrl控件可以播放無聲的avi動(dòng)畫。在使用CAnimateCtrl控件時(shí),需要使用Open方法和Play方法,下面逐一進(jìn)行介紹。
Open方法
CAnimateCtrl::OpenBOOL Open(LPCTSTR lpszFileName); BOOL Open(UNIT nID);返回值:如果成功,則返回非零值,否則為0。參數(shù): lpszFileName CString對象或一個(gè)指向一個(gè)以空終止符結(jié)尾的字符串的指針。此字符串包含了AVI文件的名字或一個(gè)AVI資源的名字。如果此參數(shù)為空,則系統(tǒng)關(guān)閉以前動(dòng)畫控件打開的AVI片段,如果有的話。 nID AVI資源識別器。如果此參數(shù)為空,則系統(tǒng)關(guān)閉以前動(dòng)畫控件打開的AVI片段,如果有的話。Play方法
CAnimateCtrl::PlayBOOL Play(UNIT nFrom, UINT nTo, UINT nRep);返回值:如果成功,則返回非零值,否則為0。參數(shù): nFrom 運(yùn)行開始的那個(gè)幀的基于零的索引。值必須小于65,536。0值意味著從AVI片段的第一幀開始。 nTo 運(yùn)行結(jié)束的那個(gè)幀的基于零的索引。值必須小于65,536。-1值意味著以AVI片段的最后一幀結(jié)束。 nRep 重新播放AVI片段的次數(shù)。值為-1意味著無限地重新運(yùn)行此文件。04. 程序設(shè)計(jì)
(1)新建一個(gè)基于對話框的應(yīng)用程序。
(2)在對話框中放置CAnimateCtrl控件,并通過類向?qū)⑵涿麨椤癿_Animate”。
(3)在對話框類中定義一個(gè)CStatusBar變量m_StatusBar。
(4)在對話框的OnInitDialog方法中創(chuàng)建狀態(tài)欄,并將CAnimateCtrl控件顯示在狀態(tài)欄中。
BOOL CMy1StatusDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。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);}}// 設(shè)置此對話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對話框時(shí),框架將自動(dòng)// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)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);}//設(shè)置面板信息m_StatusBar.SetPaneText(0, TEXT("當(dāng)前用戶"));m_StatusBar.SetPaneText(1, TEXT("滄海一笑"));m_StatusBar.SetPaneText(2, TEXT("動(dòng)畫"));//m_Animage.SetParent(&m_StatusBar);RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//獲取第3個(gè)面板的區(qū)域大小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; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE }05. 秘笈心法
狀態(tài)欄動(dòng)畫的另一種實(shí)現(xiàn)
使用CAnimateCtrl控件播放動(dòng)畫比較方便,也可以在狀態(tài)欄指定區(qū)域內(nèi)用GDI函數(shù)來繪制動(dòng)畫。動(dòng)畫就是一幅一幅連續(xù)的圖像,使用CDC類的Bitblt成員函數(shù)繪制連續(xù)的圖像就可以形成動(dòng)畫效果。
06. 源碼下載
下載:【MFC】自繪對話框動(dòng)畫效果的狀態(tài)欄本.rar
07. 附錄
參考: 《Visual C++從入門到精通(項(xiàng)目案例版)》
總結(jié)
以上是生活随笔為你收集整理的【MFC】自绘对话框动画效果的状态栏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】带进度条的状态栏
- 下一篇: 【MFC】滚动字幕的状态栏