程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 『VC++技術內幕』學習筆記(8)

『VC++技術內幕』學習筆記(8)

編輯:vc教程

    第八篇:顏色和字體

   由於種種原因,雷神有4、5天沒有看一眼VC++了,所以在開始之前我又把前幾篇筆記仔細的看了一遍,使自己能夠進入最佳的學習狀態。因為學習狀態的好壞直接影響學習的效率,有時候我看一天的書,可實際掌握的內容卻很少,不知大家是否和我一樣?今天要學的是顏色和字體。終於要進入多彩的世界了,這是一件令人興奮的事情,本人向來對用程序做出漂亮的界面、畫面和用程序發出悅耳的聲音很感興趣,因為我的目標是做游戲程序。

   標准的VGA顯示卡使用的是8位顏色寄存器,所以它可以表示出262144種顏色,然而由於視頻內存的限制、標准的VGA只能采用4位顏色代碼,一次只能同時顯示16種標准純色。太少了不是嗎?如何獲得更加豐富的色彩呢,面向顏色的GDI函數可以使我們獲得更多的顏色。每一種WINDOWS的顏色都是通過8位RGB值的組合來表示,面向顏色的GDI函數可以接收32位的COLORREF參數,這種類型的參數包含了8位的紅、綠、藍顏色值。WINDOWS的RGB宏可以將8位的紅綠藍值轉化成COLORREF參數,經過模糊處理可以得到更多的顏色。我們可以這樣創建刷子:

CBrush brush(RGB(128,128,192));

看個例子:

例子8-1
//*****************************
//
void CMy81View::OnDraw(CDC* pDC)
{
pDC->SetBkColor (RGB(255,0,0));
pDC->SetTextColor (RGB(198,198,198));
pDC->TextOut (10,10,"雷神祝大家在新的一年萬事如意!");
}
   在OnDraw(CDC* pDC)函數中設定文本的背景色和前景色,我們試著改變RGB宏的數值,會發現SetBkColor和SetTextColor函數並不總是顯示模糊色,如果模糊色過於復雜,它們會選擇與之相近的純色來顯示。書上是這樣說的。以目前的硬件設備來說我們可以在1024X768的方式下獲得24位真彩色,這意味著我們可以通過RGB宏獲得任何我們想要的顏色,其實我們的肉眼已經不能分辨它們的區別了。其實256色已經足夠作出很精美的畫面了,光榮的三國志系列栩栩如生的人物就是256色繪制的,在這點不得不佩服日本的漫畫水平。

   下面我們來看看字體。字體是GDI對象,和其他GDI對象一樣它可以按比例縮放,被裁剪,可以被選進設備環境,並可以被釋放和刪除。書上對於字體部分描述實在令我不願意讀,我想大家可能也是這樣的心情。那好我們便不去讀它,直接用一個例子來理解字體。

例子8-2:

1、建立一個新MFC AppWizard(exe)項目“82”,除選擇單文檔外其余全用默認項。
2、重載My82View類的OnPrepareDC函數
void CMy82View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
pDC->SetMapMode (MM_ANISOTROPIC);//應該還記得此種映射模式是X,Y的比例因子可以獨立變化
pDC->SetWindowExt (1440,1440);//將映射模式設置成邏輯twips即一個邏輯單位等於1/1440邏輯英寸。
pDC->SetViewportExt (pDC->GetDeviceCaps (LOGPIXELSX),-pDC->GetDeviceCaps (LOGPIXELSY));
//用SetWindowExt和SetViewportExt定義比例GetDeviceCaps函數可以獲得各種顯示參數,典型的參數如下:
/*
在640X480分辨率下:
HORZSIZE 物理寬度(毫米) 320
VERTSIZE 物理高度(毫米) 240
HORZRES 象素寬度 640
VERTRES 象素高度 480
LOGPIXEXSX 每邏輯英寸的水平點數 96
LOGPIXEXSY 每邏輯英寸的垂直點數 96
*/
}
3、加入一個Private類型的輔助函數ShowFont用來顯示文本。可以用Add Member Function的方法加入,也可以直接修改代碼
在82View.h中加入
class CMy82View : public CView
{
private:
void ShowFont(CDC* pDC, int& nPos, int nPoints);
//以下為原生成代碼,不需改變
......
}
在82View.cpp中加入
void CMy82View::ShowFont(CDC* pDC, int& nPos, int nPoints)
{
TEXTMETRIC tm;

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved