OnDraw

OnDraw

OnDraw(CDC* pDC)

Visual C++ MFC中函數對應用程序窗口的客戶區進行繪圖的所有代碼都必須寫在這個函數中。

函數介紹


OnDraw(CDC* pDC)
函數對應用程序窗口的客戶區進行繪圖的所有代碼都必須寫在這個函數中。

繪圖函數


輸出文字
TextOut(int x,int y,CString& str)
參數x為文本顯示在應用程序窗口用戶區的水平位置,以像素為單位;
參數y為文本顯示在應用程序窗口用戶區的垂直位置,以像素為單位;
str為要顯示的字元串,他是一個CString類的對象。
例如:
pDC->TextOut(50,50,"asdadsda");
設置文本顏色
virtual COLORREF SetTextColor(COLORREF crColor);
參數crColor是要使用的文本顏色的RGB值,函數的返回值為原來的顏色,RGB值寫法是RGB(0,255,0),括弧內的三個值從0到255。
例如:virtual COLORREF SetTextColor(COLORREF RGB(0,255,0));
獲得當前文本顏色
COLORREFGetTextColor() const;
設置文本的背景顏色
virtual COLORREF SetBkColor(COLORREF crColor);
參數crColor是要使用的文本背景顏色的RGB值,函數的返回值為原來的背景顏色
獲得當前背景顏色
COLORREF GetBkColor() const;
設置文本字元的間距
intSetTextCharacterExtra(int nCharExtra);
參數nCharExtra用來設置文本字元的額外間距,以像素為單位,函數的返回值為字元的原間距。
獲得當前字元間距
int GetTextCharExtra() const;
設置文本的對齊方式
UINT SetTextAlign(UINT nFlags);
參數nFlags的值可以為:
TA_LEFT 左對齊
TA_CENTER 中間對齊
TA_RIGHT 右對齊
TA_TOP 頂部對齊
TA_BOTTOM 底部對齊
TA_BASELINE 以基線對齊
前3個用於水平方向
后3個用於垂直方向
字體和CFont類略
LineTo (x, y)
參數x 一個整數,指示相對於父影片剪輯的註冊點的水平位置。
y 一個整數,指示相對於父影片剪輯的註冊點的垂直位置。
例如:pDC->LineTo(123,456);

語法規則


Ellipse(int x1,int y1, int X2, int Y2 )
描述:繪製一個實心的橢圓起始點(x1,y1),結束點(x2,y2)。
x1,y1是橢圓外接矩形左上角點的坐標,(x2,y2)是橢圓外接矩陣右下角點的坐標。
例如:pDC->Ellipse(250, 421, 120, 100 );
畫筆CPen
CPen類的構造函數:
CPen(int style,int width,COLORREF color);
COLORREF RGB(BYTE bRed,BYTE bGreen,BYTE bBlue);.
style樣式
PS_SOLID 畫實線
PS_DASH 畫虛線
PS_DOT 畫點線
PS_DASHDOT 畫點劃線
PS_DASHDOTDOT 畫雙點劃線
PS_NULL 筆畫不可見的畫筆
PS_INSIDEFRAME 在一個圖形內畫邊線的畫筆
在創建了畫筆之後,必須使用CDC的成員函數SelectObject把畫筆載入DC,以替換DC中原來配置的默認畫筆,然後才能使用該畫筆繪製線條。
CPen* SelectObject(CPen* pPen);
參數為欲載入畫筆的指針,返回值為原來畫筆的指針。以便在新畫筆使用完后恢復原畫筆。即在程序中應有如下代碼:
CPen newPen(PS_DASHDOT,width,color); //創建新畫筆
CPen* oldPen=pDC->SelectObject(&newPen); //載入新畫筆並把舊畫筆存入指針變數oldPen
在使用完新畫筆繪製線條后,如果要恢復原畫筆,則需要使用如下代碼:
pDC->SelectObject(oldPen);
注意:除了PS_SOLID外其他的樣式只在參數width=1是有效
畫刷:CBrush
CBrush類的構造函數
CBrush(COLORREF color);
和CBrush(int style,COLORREF color);
參數style填充樣式:
HS_BDIAGONAL以自左下角至右上角的45度斜線填充
HS_CROSS以十字交叉線填充
HS_DIAGCROSS以互相交叉的45度線填充
HS_FDIAGONAL以自左上角至右下角的45度斜線填充
HS_HORIZONTAL以水平線填充
HS_VERTICAL以垂直線填充
與使用畫筆一樣,在創建了畫刷之後,如果要使用該畫刷,則應使用CDC的成員函數:
CBrush * SelectObjet(CBrush* pBrush);
把畫刷選入設備描述環境。並要定義一個畫刷指針,用來保存該函數返回的舊畫刷指針
CBrush newBrush(COLORREF color);//這句可換成
//CBrush newBrush(int style,COLORREF color);
CBrush* oldBrush=pDC->SelectObject(&newBrush);
//加入自己想要的語句
pDC->SelectObject(oldBrush);
Rectangle構造函數Rectangle(x:Number, y:Number, width:Number, height:Number)創建一個新的 Rectangle 對象,其左上角由 x 和 y 參數指定。如果調用此構造函數時不使用任何參數,將創建一個 x、y、width 和 height 屬性均設置為 0 的矩形。
參數 x:Number - 矩形左上角的x坐標。
y:Number - 矩形左上角的y坐標。
width:Number - 矩形的寬度,以像素為單位。
height:Number - 矩形的高度,以像素為單位。
繪製矩形代碼:
CRect rect(30,30,300,300);
pDC->Rectangle(&rect);
繪圖模式:
設置繪圖模式的CDC成員函數為:
SetROP2(int nDrawMode);
其中,參數為繪圖模式,返回只為原來的繪圖模式
常用的繪圖模式如下:
R2_BLACK 無論畫筆顏色如何,只用黑色繪圖
R2_WHITE 無論畫筆顏色如何,只用白色繪圖
R2_NOP 無論畫筆顏色如何,只用無色繪圖
R2_NOT 用與背景顏色相反的顏色繪圖
R2_NOTCOPYPEN 用與畫筆色相反的顏色繪圖
R2_COPYPEN 用畫筆顏色繪圖
R2_XORPEN 用把畫筆色與背景色進行異或運算后的顏色繪圖
CDC的其他派生類
窗口用戶區設備描述環境類CClientDC
CPaintDC類的對象只能在視圖類的OnDraw函數中使用,而CClientDC類的對象可以在除了OnDraw函數之外的任何地方使用。