1. 程式人生 > 程式設計 >MFC實現字幕滾動效果

MFC實現字幕滾動效果

本文例項為大家分享了MFC實現字幕滾動效果的具體程式碼,供大家參考,具體內容如下

1、建立對話方塊工程

這一步很簡單,可以參考我之前的部落格。這裡可以先放出我程式執行的效果圖。如果不是你所需要的可以直接關閉部落格了。

MFC實現字幕滾動效果

2、新增控制元件

在介面上面主要用到的就是CStatic,Cedit,Cbutton這裡給我我對話方塊的資源圖:

MFC實現字幕滾動效果

3、新增訊息

需要新增定時訊息,背景顏色訊息,新增訊息:

ON_WM_CTLCOLOR()
ON_WM_TIMER()
HBRUSH CDemoLEDDlg::OnCtlColor(CDC*pDC,CWnd* pWnd,UINT nCtlColor)
{
     HBRUSH hbr = CDialogEx::OnCtlColor(pDC,pWnd,nCtlColor);
     if(nCtlColor== CTLCOLOR_STATIC) 
     { 
          pDC->SetBkMode(TRANSPARENT); 
          pDC->SetTextColor(RGB(255,0));  
          return(HBRUSH)::GetStockObject(NULL_BRUSH);  
     }
     returnhbr;
}

4、字型初始化

在OnInitDialog()函式中設定我們字幕要使用的字型,這裡採用最簡單的字型設定方式。

m_font->CreatePointFont(160,_T("宋體"));

5、字幕建立

我們點選開始的時候,建立字幕的顯示。首先獲視窗的大小,設定字幕的static大小,並且在視窗最右邊顯示。設定字幕的字型。啟動字幕移動的定時器。

void CDemoLEDDlg::OnBnClickedButton1()
{
     if(m_flag) {
          SetTimer(1,500,NULL);
          m_flag = false;
          return;
     }
 
     CString info;
     m_info.GetWindowTextW(info);
 
     CRect cRect;
     GetClientRect(cRect);   
<span style="white-space:pre"> </span> m_cx = cRect.Width();
     m_cy = cRect.Height();
 
     m_static->Create(info,WS_CHILD |WS_VISIBLE | SS_CENTER,CRect(m_cx - 30,100,m_cx - 300 + 30,140),this,IDC_STATIC_INFO);
     m_static->SetFont(m_font,FALSE);
 
     SetTimer(1,NULL); 
}

6、字幕滾動

我們設定的定時器是500毫秒,也就是每500毫秒執行一次這個函式。在這個函式中,我們控制每次向左移動30,當移動完了之後,關閉定時器。重新從右邊開始顯示,並且重啟開始定時器。

void CDemoLEDDlg::OnTimer(UINT_PTR nIDEvent)
{
     if (1== nIDEvent)
     {
          m_static->SetWindowPos(NULL,m_cx - 30,300,40,SWP_NOZORDER);
          m_cx = m_cx - 30;
          if(m_cx < -250) {
              KillTimer(1);
              m_cx = GetSystemMetrics(SM_CXSCREEN);
              m_static->SetWindowPos(NULL,SWP_NOZORDER);
              SetTimer(1,NULL);
          }
     }
 
     CDialogEx::OnTimer(nIDEvent);
}

7、字幕背景

字幕的背景在OnPaint中設定,設定背景色為黑色。

void CDemoLEDDlg::OnPaint()
{
     if(IsIconic())
     {
          SendMessage(WM_ICONERASEBKGND,reinterpret_cast<WPARAM>(dc.GetSafeHdc()),0);
          intcxIcon = GetSystemMetrics(SM_CXICON);
          intcyIcon = GetSystemMetrics(SM_CYICON);
          CRect rect;
          GetClientRect(&rect);
          intx = (rect.Width() - cxIcon + 1) / 2;
          inty = (rect.Height() - cyIcon + 1) / 2;
          dc.DrawIcon(x,y,m_hIcon);
     }
     else
     {
          CPaintDC dc(this);
          CRect cRect;
          GetClientRect(cRect);
          CRect fRect(0,90,cRect.Width(),130);
          dc.FillSolidRect(fRect,RGB(0,0));
          CDialogEx::OnPaint();
     }
}

為了方便大家瞭解整個過程,專案的原始碼:MFC實現滾動字幕

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。