小A大B聊MFC:神奇的靜態文本控件--初識DC

大B:小A,你在編碼時用過靜態文本控件嗎?

小A:靜態文本控件,你是說這個Static Text吧,當然用過了,設計界面那能少了它。

大B:那你都用它做什麼呢?

小A:這個還能幹什麼呀,就是顯示文本唄。

大B:其實它能擴展出很強大的功能,不知你有沒有發現。

小A:很強大的功能,我怎麼覺得所有控件中就屬這個控件簡單了,能有什麼強大的功能呀!

大B:就是因爲他簡單,所以纔有很大的擴展空間呀,比如你想改變一下文字的大小、字體、顏色怎麼改呀?

小A:這個好像沒法,雖然有一個SetFont函數,但不知爲什麼不起作用。

大B:那我們就從這裏着手先做讓它可以改變文字大小、字體和顏色吧。因爲靜態文本控件是從CStatic類生成的對象,那麼我們可以派生一個新類,在新類中增加對這些功能的處理就行了。

小A:等我一下,我先打開編譯器,咱們一邊說一邊做。

……

小A打開編譯器……

……

小A:好了,我打開了,並且新建了一個基於MFC的對話框項目,下一步應該怎麼做呢?

大B:動作挺快呀,那接下來我們先在類嚮導裏添加一個類,名字就叫CStaticTest吧,父類就是CStatic,然後重寫一下WM_PAINT消息的處理函數。

小A:就是在這裏實現這些功能吧!(邊說邊添加新類)

           菜單-項目-類嚮導,打開MFC類嚮導對話框……

           點添加類,輸入類名CStaticTest,選擇基類爲CStatic……完成。

           在類嚮導中選擇剛新加的類CStaticTest,選擇[消息]找到WM_PAINT,點[添加處理程序]……確定。

大B:聰明!你看OnPaint函數提供了CPaintDC類型的dc,我們就用這個dc去改變字體、顏色等。

小A:哦,這個是幹什麼的?

大B:CPaintDC是MFC提供了一個專門用於界面繪製圖形的類,它從CDC類繼承而來,還有許多其它相似的類,我們以後慢慢詳細的說。

小A:那這個dc怎麼用呢?

大B:我們可以看一下MSDN,它的父類CDC提供了很多函數,比如要想改變字體的顏色只需要調用SetTextColor函數就可以了。

小A:那我想把字體變成紅色是不是這麼寫就行了:

dc.SetTextColor(RGB(255,0,0));

大B:這只是改變了字體顏色,因爲我們把OnPaint函數重寫了,顯示文字的工作我們也要完成。

小A:這應該用那個函數呢?

大B:我們先用這個簡單的函數TextOut吧,它有三個輸入,文字開始位置的座標和文字內容。

小A:那我試着寫一下:

dc.TextOut(0,0,_T("123456"));

小A:我想顯示個「123456」是不是這麼寫就行了。

大B:對,就這麼簡單,然後用這個例生成一個對象就行了。

小A:好,我試一下:

           先在對話框上放一個靜態文本控件……

           再給這個控件添加一個變量,類別是Control,類型就是剛添加的類CStaticTest,變量名就叫m_static1吧……

           F7編譯……通過,哈哈

           F5運行,果然顯示了個紅色的「123456」。

大B:好,不錯,明天再教你如何改變字體和大小。