MFC帶邊框滾動字幕

2021-08-06 04:45:20 字數 2212 閱讀 4459

最終效果:

方法概述:

1:先新建乙個普通對話方塊工程,使用crgn,cbrush物件等在對話方塊中畫出需要的字串顯示的邊框,如上圖中的紫色邊框就是由乙個矩形crgn和乙個圓角矩形crgn組合而成,然後擷取下來,儲存為位圖,如需該,可在附件res目錄下找到

2:新建marquee工程,將上個工程裡製作的點陣圖匯入到資源中當做背景圖,接下來就是如下**

3:在**中會使用記憶體畫布,將位圖和文字全部先寫到記憶體dc中,再輸出到螢幕

過程:

一:新建乙個基於對話方塊的mfc程式,在對話方塊標頭檔案中加入以下變數,並且新增乙個析構函式

class cmarqueedlg : public cdialog

; // note: the

classwizard

will

adddata

members

here

//}}

afx_data

// classwizard generated virtual function overrides

//}afx_virtual

// implementation

protected:

hicon m_hicon;

// generated message map functions

//}afx_msg

declare_message_map()

};

二:修改對話方塊的onpaint(..)函式

void cmarqueedlg::onpaint() 

三:為對話方塊新增定時器訊息函式ontimer(..)

void cmarqueedlg::ontimer(uint nidevent) 

; brtrans.createbrushindirect(&lb);

m_mdc.fillrgn(&m_strtcombinergn,&brtrans);*/

cbrush brtmp1(rgb(255,255,255));

mdc.fillrgn(&m_strtcombinergn,&brtmp1);

/*建立m_strdrtcbcombinergn,即文字區域與自繪的邊框的區域的組合,當文字區域滑動到這一部分的時候,

使用邊框的顏色覆蓋點與邊框重合的這一部分文字區域,使文字無法顯示出來

本意:邊框是以位圖的形式載入的,本意是無論是文字區域滑動到邊框區域還是邊框外部區域,都統一使用用載入的背景點陣圖來覆蓋掉與邊框重合

和超出邊框的兩部分文字區域,在邊框內部的區域仍然顯示文字,但不知道如何統一使用背景位圖覆蓋這兩部分,只能自己根據載入的點陣圖

的顏色來選擇這兩部分的顏色,然後分別用這兩個顏色填充兩個區域

如果有網友知道如何使用背景點陣圖來覆蓋掉不要的那部分文字區域,如果能指導我一下,感激不盡!*/

if(m_strdrtcbcombinergn.getsafehandle())

m_strdrtcbcombinergn.deleteobject();

m_strdrtcbcombinergn.createrectrgn(0,0,0,0);

m_strdrtcbcombinergn.combinergn(&m_rdrtcombinergn,&staticrgn,rgn_and);

cbrush brtmp2(rgb(0,0,255));//原本這是邊框區域的顏色,現在也用來填充與邊框區域重合部分的文字區域

mdc.fillrgn(&m_strdrtcbcombinergn,&brtmp2);

//刪除gdi物件

brtmp1.deleteobject();

brtmp2.deleteobject();

//最重要的部分,將記憶體畫布裡的東西全部滑到螢幕上

dc.bitblt(0,0,m_rtclient.width(),m_rtclient.height(),&mdc,0,0,srccopy);

//控制文字區域的移動

if(m_rtstatic.right

<=m_rtroundrect.left)

else

cdialog::ontimer(nidevent);

}

=源程式**

滾動字幕 C

using system using system.collections using system.componentmodel using system.drawing using system.data using system.windows.forms namespace caster 清...

winform滾動字幕

private void timer1 tick object sender,eventargs e 用timer來控制滾動速度 label1.left 2 設定label1左邊緣與其容器的工作區左邊緣之間的距離 if label1.right 0 當label1右邊緣與其容器的工作區左邊緣之間的距...

Qt QLabel 文字滾動 滾動字幕

1.實現效果 做了兩種實現方式,畫素滾動比較順滑。支援qlabel樣式表設定字型顏色邊框等。支援實時縮放。2.簡述 實現思路1 準備足夠顯示滿寬的字元,每次刪除最左邊的乙個字元,不夠顯示的時候,在後邊追加字元。實現思路2 畫乙個寬度是label寬度 文字寬度的文字框,從x 0開始,每次將文字框的起始...