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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【MFC】滚动字幕的状态栏

發布時間:2024/4/24 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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】滚动字幕的状态栏的全部內容,希望文章能夠幫你解決所遇到的問題。

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