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

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

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

(3) 在CViewerView::OnFormatTxtfont()函數中添加如圖6所示的代碼。

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

CColorDialog類(lèi)封裝了通用顏色對話(huà)框的全部操作。在定義對話(huà)框對象時(shí),可以指定默認選定的顏色值,若不指定,則默認顏色值為RGB(0,0,0)(黑色)。
(5) 修改CViewerView::OnDraw()函數代碼,如圖8所示的加框部分。

(6) 運行程序,打開(kāi)當前目錄中的ReadMe.txt文檔,打開(kāi)"格式"菜單,選中相應的菜單命令,改變其字體和顏色。圖9是其中的一個(gè)結果。

聯(lián)系客服