MFC實現字幕滾動效果
阿新 • • 發佈:2020-06-02
本文例項為大家分享了MFC實現字幕滾動效果的具體程式碼,供大家參考,具體內容如下
1、建立對話方塊工程
這一步很簡單,可以參考我之前的部落格。這裡可以先放出我程式執行的效果圖。如果不是你所需要的可以直接關閉部落格了。
2、新增控制元件
在介面上面主要用到的就是CStatic,Cedit,Cbutton這裡給我我對話方塊的資源圖:
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實現滾動字幕
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。