(7) 重復(fù)上述步驟,在"格式"菜單下再添加一個菜單項"文本顏色(&C)",ID為ID_FORMAT_TXTCOLOR,結(jié)果如圖3所示。

圖3 添加的菜單
(8) 單擊"格式"菜單不松開,然后將其拖放到"視圖"和"幫助"之間。
2. 菜單的命令映射
此時運(yùn)行程序,則"格式"菜單下的命令都是"灰顯"(即顯示的顏色是灰色的)的,我們無法選擇相應(yīng)的菜單命令,這是因為我們還沒有對菜單的命令消息進(jìn)行映射。下面就來進(jìn)行映射,由于我們添加的這些菜單命令是想更改變文本內(nèi)容顯示的字體,因此我們將菜單命令的映射添加到視圖類CViewerView中,如下面的過程:
(1) 將解決方案資源管理器切換到"類視圖",展開節(jié)點(diǎn),選定"CViewerView",在其屬性窗口中,單擊"事件"按鈕,結(jié)果如圖4所示。

圖4 事件映射
(2) 找到前面添加的菜單項ID_FORMAT_TXTFONT,單擊該ID前面的"+",展開后出現(xiàn)可以映射的消息,由于菜單消息是命令消息,因為我們在COMMAND消息框的右側(cè),單擊后選擇"<添加>OnFormatTxtfont",如圖4所示。這樣相應(yīng)的映射就被添加到CViewerView類中,此時文檔窗口中自動定位到該函數(shù)的實(shí)現(xiàn)代碼處。

圖5 映射COMMAND消息
(3) 重復(fù)上一步為菜單項ID_FORMAT_TXTCOLOR添加COMMAND消息映射。
注意:同一命令消息的響應(yīng)是根據(jù)對象的級別來決定的,對于單文檔應(yīng)用程序來說,各對象的級別從高到低依次為視圖類(文檔窗口)、文檔類、主框架窗口類、應(yīng)用程序類。
3. 完善"格式"菜單代碼
(1) 為CViewerView類添加兩個成員變量(添加成員變量的方法上一講已討論過),一個是LOGFONT類型的m_lfTextFont,另一個是COLORREF類型的m_crTxtColor。LOGFONT是邏輯字體類型,所謂"邏輯字體",它是應(yīng)用程序?qū)τ诶硐胱煮w的一種描述方式。在使用邏輯字體繪制文字時,系統(tǒng)會采用一種特定的算法把邏輯字體映射為最匹配的物理字體(實(shí)際安裝在操作系統(tǒng)中的字體)。而COLORREF是專門用來定義RGB顏色的數(shù)據(jù)類型,RGB顏色是通過紅(R)、綠(G)、藍(lán)(B)三種基色分量的不同值混合而成的。
(2) 在構(gòu)造函數(shù)CViewerView::CViewerView()中添加上述兩個成員變量的初始化代碼,如圖5所示。

圖6 在CViewerView類構(gòu)造函數(shù)中添加的代碼
(3) 在CViewerView::OnFormatTxtfont()函數(shù)中添加如圖6所示的代碼。

圖7 OnFormatTxtfont()函數(shù)代碼
CFontDialog類為我們提供了字體及其文本顏色選擇的通用對話框,在構(gòu)造對象中指定m_lfTextFont指針,其目的是用來設(shè)置對話框顯示的邏輯字體,這樣當(dāng)下一次顯示字體對話框時,就會顯示當(dāng)前的字體特性。
(4) 在CViewerView::OnFormatTxtcolor()函數(shù)中添加如圖7所示的代碼。

圖8 OnFormatTxtcolor()函數(shù)代碼
CColorDialog類封裝了通用顏色對話框的全部操作。在定義對話框?qū)ο髸r,可以指定默認(rèn)選定的顏色值,若不指定,則默認(rèn)顏色值為RGB(0,0,0)(黑色)。
(5) 修改CViewerView::OnDraw()函數(shù)代碼,如圖8所示的加框部分。

圖9 修改后的OnDraw()函數(shù)代碼
(6) 運(yùn)行程序,打開當(dāng)前目錄中的ReadMe.txt文檔,打開"格式"菜單,選中相應(yīng)的菜單命令,改變其字體和顏色。圖9是其中的一個結(jié)果。

圖10 運(yùn)行后的程序結(jié)果
|