【MFC】滚动字幕的状态栏
生活随笔
收集整理的這篇文章主要介紹了
【MFC】滚动字幕的状态栏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發環境
- 03. 關鍵技術
- 04. 程序設計
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
在火車站、客運站等許多公共場所,隨處可以看見一個大屏幕,上面經常會以滾動字幕的形式顯示一些信息。它是如何實現的呢?本案例實現了一個滾動字幕的狀態欄,效果如下圖所示。
02. 開發環境
系統環境:Windows 10
開發環境:Visual Studio 2019
03. 關鍵技術
在狀態欄中實現滾動字幕,可以利用靜態文本控件實現。在狀態欄中顯示一個靜態文本控件,然后每隔一段時間調整靜態文本控件的位置,即可實現滾動字幕的效果了。設置定時器時,需要使用SetTimer方法來實現。
SetTimer方法來設置一個定時器。語法如下:
返回值: 如果函數成功,則返回新定時器的標識符。應用程序可以將這個值傳遞給KillTimer成員函數以銷毀定時器。如果成功,則返回非零值;否則返回0。參數: nIDEvent 指定了不為零的定時器標識符。 nElapse 指定了定時值;以毫秒為單位。 lpfnTimer 指定了應用程序提供的TimerProc回調函數的地址,該函數被用于處理WM_TIMER消息。如果這個參數為NULL,則WM_TIMER消息被放入應用程序的消息隊列并由CWnd對象來處理。04. 程序設計
(1)新建一個基于對話框的應用程序。
(2)創建CstatusBar類型的變量m_StatusBar;
(3)在對話框類的OnInitDialog方法中創建狀態欄,將靜態文本控件顯示在狀態欄中。
BEGIN_MESSAGE_MAP(CMy1StatusToolDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER() END_MESSAGE_MAP()// CMy1StatusToolDlg 消息處理程序BOOL CMy1StatusToolDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統菜單中。// IDM_ABOUTBOX 必須在系統命令范圍內。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){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); // 設置小圖標// TODO: 在此添加額外的初始化代碼UINT array[3];for (int i = 0; i < 3; i++){array[i] = 1000 + i;}//創建狀態欄窗口m_StatusBar.Create(this);//添加面板m_StatusBar.SetIndicators(array, sizeof(array) / sizeof(UINT));//設置面板寬度for (int i = 0; i < 3; i++){m_StatusBar.SetPaneInfo(i, array[i], 0, 120);}//設置面板文本m_StatusBar.SetPaneText(0, TEXT("當前用戶"));m_StatusBar.SetPaneText(1, TEXT("滄海一笑"));m_StatusBar.SetPaneText(2, TEXT(" www.qq.com"));//在客戶區中重定位控制條并改變其大小RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//設置定時器SetTimer(1, 300, NULL);return TRUE; // 除非將焦點設置到控件,否則返回 TRUE }//擦除背景 BOOL CMy1StatusToolDlg::OnEraseBkgnd(CDC* pDC) {// TODO: 在此添加消息處理程序代碼和/或調用默認值//IDB_BKBMP//TODO: 在此添加消息處理程序代碼和/或調用默認值CRect rect;GetWindowRect(&rect);CDC memDC;CBitmap bitmap;CBitmap* bmp = NULL;bitmap.LoadBitmap(IDB_BKBMP);//裝載背景位圖memDC.CreateCompatibleDC(pDC);bmp = memDC.SelectObject(&bitmap);pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);if (bmp) memDC.SelectObject(bmp);//返回為真 設置背景圖片return TRUE;//return CDialogEx::OnEraseBkgnd(pDC); }(4)啟動定時器,并且動態改變字符串的位置信息。
void CMy1StatusToolDlg::OnTimer(UINT_PTR nIDEvent) {// TODO: 在此添加消息處理程序代碼和/或調用默認值CString sText, sLeft, sRight;int len;//獲取第三個面板的字符sText = m_StatusBar.GetPaneText(2);len = sText.GetLength();sRight = sText.Left(1);sLeft = sText.Right(len - 1);sText = sLeft + sRight;m_StatusBar.SetPaneText(2, sText);CDialogEx::OnTimer(nIDEvent); }05. 秘笈心法
滾動字幕的狀態欄
結合定時器,定期調整字符串的位置,然后設置字符串即可。
06. 源碼下載
下載:【MFC】滾動字幕的狀態欄.rar
07. 附錄
總結
以上是生活随笔為你收集整理的【MFC】滚动字幕的状态栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】自绘对话框动画效果的状态栏
- 下一篇: 【MFC】带下拉菜单的工具栏