MFC把DC(設備描述環境)和一些GDI函數填充裝到一起,形成了一個DCD類.
CDC類中的一些常用的成員函數
函數 說明
Arc() 畫橢圓弧
BitBlt() 把一個DC中的位圖自制到另一個DC中
Ellipse() 畫橢圓
FillRect() 用指定的畫刷填充矩形
LineTo() 畫直線
MoveTo() 移動畫筆
Rectangle() 畫矩形
RoundRect() 畫圓角矩形
SelectObject() 選擇GDI的繪圖對象
SetTextColor() 設置文本顏色
StretchBlt() 把一個DC中的位圖自制到另一個DC中但可以改變位圖的長寬比
TextOut() 繪制字符串
一、幾種派生的CDC類
類名 說明
CClientDC 在相應除WM_PAINT消息之外的消息處理函數中提供窗口客戶區的設備描述環境
void CAaaView::OnLButtonDown(UINT nFlags, CPoint point)


{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);

RECT rc =
{50,50,250,150};
dc.Ellipse(&rc);
CView::OnLButtonDown(nFlags, point);
}

CMetaFileDC 代表Windows圖元文件的設備描述環境,在創建與設備無關的并且可以回放的圖像時使用這個類型的DC
CPaintDC 在OnDraw() 函數中使用的窗口用戶區的設備描述環境,在MFC中用OnDraw()函數來處理WM_PAINT消息。和WM_PAINT消息關聯,當某一窗口需要繪圖時,這個消息就發給這個窗口,它在窗口的OnPaint成員函數中使用,其構造函數自動調用BeginPaint,而析構函數自動調用EndPaint。這些都有Windows自動完成。我們要做的就是在CPaintDC對象上畫圖。
void CAaaView::OnPaint()


{
CPaintDC dc(this); // 創建一個對象

RECT rc =
{50,50,150,150}; // 設定坐標
dc.Rectangle(&rc); // 繪制矩形
}

CWindowDC 提供在整個窗口內(不只是用戶區)繪圖的設備描述環境 .
void CAaaView::OnLButtonUp(UINT nFlags, CPoint point)


{
// TODO: Add your message handler code here and/or call default
CWindowDC dc(this);

RECT rc =
{50,50,250,150};
dc.Ellipse(&rc);
CView::OnLButtonUp(nFlags, point);
}

二、字體描述
1、TEXTMETRIC:
void CCFontInfoView::OnDraw(CDC* pDC)


{
CCFontInfoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
TEXTMETRIC tm;
CString strFontInfo;
pDC->GetTextMetrics(&tm);
strFontInfo.Format("以下是當前字體的基本信息!");
pDC->TextOut(10, 10, strFontInfo);
strFontInfo.Format("tmHeight = %d",tm.tmHeight);
pDC->TextOut(10, 30, strFontInfo);
}

2、
LOGFONT:
void CCFontInfoView::OnMyCreateFont()


{
// TODO: Add your command handler code here
//CCFontInfoDoc* pDoc = GetDocument();
//ASSERT_VALID(pDoc);

CDC* pDC = this->GetDC();
CString strLogFont;

LOGFONT lFont =
{20, //字符單元或字符的邏輯高度
20, // 字符單元或字符的邏輯寬度
10, // 走格矢量與設備的X軸之間的夾角
10, // 每個字符的基線與設備的X軸之間的夾角
555, // 字體的灰度
1, // 為斜體字體
1, // 帶下畫線的字體
1, // 帶刪除線的字體
10, // 字體的符集
10, // 字體的輸出精度
10, // 字體的裁減精度
10, // 字體的輸出質量
10, // 字體的間距和系列
""}; // 字體的字樣名
CFont m_Font;
m_Font.CreateFontIndirect(&lFont);
CFont* pOldFont = pDC->SelectObject(&m_Font);
strLogFont = "第三章 多媒體文本處理";
pDC->TextOut(10,300,strLogFont);
}

三、
創建各種字體:
1)HFONT CreateFontIndirect(CONST LOGFONT *lplf);
lplf:指向定義此邏輯字體特性的LOGFONT結構的指針。
返回值:如果函數調用成功,返回值是邏輯字體的句柄;如果函數調用失敗,返回值是NULL。
例子看LOGFONT例子部分
2)HFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwltalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace);
參數說明:http://baike.baidu.com/view/1080748.htm
void CCFontInfoView::On310()


{
// TODO: Add your command handler code here
CDC* pDC = this->GetDC();

CFont m_Font;
m_Font.CreateFont(30,0,10,10,1, FALSE, TRUE, FALSE, ANSI_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY,DEFAULT_PITCH + FF_DONTCARE, "Arial");
CFont* pOldFont = pDC->SelectObject(&m_Font);
pDC->TextOut(10,350,"第三章 多媒體文本處理");
}

3)CFont::CreatePointFont
BOOL CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL);
返回值:如果成功,則返回非零值,否則為0。
參數:
nPointSize
|
所需字體高度(用0.1點表示,例如,傳遞120表示12點字體)。
|
lpszFaceName
|
一個CString或指向一個以空終止符結尾的字符串,定義字體名稱。此字符串長度不應超過30個字符。Windows EnumFontFamilies函數可用于計算當前可用字體的總數。如果為NULL,則GDI使用與設備無關的字體。
|
pDC
|
指向CDC對象,將nPointSize中的高度轉化為邏輯單位。如果為NULL,則屏幕設備上下文用于轉換。
|
說明:
此函數提供了一種創建指定字體和點大小的字體對象的方法,它自動將nPointSize中的高度轉化為邏輯單位,這是使用由pDC指向的CDC對象實現的。
當完成用CreatePointFont函數創建CFont對象后,從設備上下文中選擇字體,然后刪除CFont對象。
void CCFontInfoView::On311()


{
// TODO: Add your command handler code here
CDC* pDC = this->GetDC();

CFont m_Font;
m_Font.CreatePointFont(320, "Arial", pDC);
CFont* pOldFont = pDC->SelectObject(&m_Font);
pDC->TextOut(10,250,"第三章 多媒體文本處理");

}

4)CFont::CreatePointFontIndirect
BOOL CreatePointFontIndirect(const LOGFONT* lpLogFont, CDC* pDC = NULL);
返回值:如果成功,則返回非零值,否則為0。
參數:
lpLogFont
|
指向LOGFONT結構,定義邏輯字體特征。LOGFONT的lfHeight成員用0.1點計算而不用邏輯單位(如果設置lfHeight為120,則要求12點字體)。
|
pDC
|
指向CDC對象,用于將lfHeight中的高度轉化為邏輯單位。如果為NULL,屏幕設備上下文用于轉換。
|
說明:
此函數與CreateFontIndirect相似,但LOGFONT的lfHeight成員由0.1點表示而不是用設備單位表示。在傳遞LOGFONT結構到Windows之前,pDC指向的CDC對象自動使函數的lfHeight中的高度轉化為邏輯單位。
當完成由CreatePointFontIndirect函數創建的CFont對象之后,先選擇設備上下文字體,然后刪去CFont對象。
void CCFontInfoView::On312()


{
// TODO: Add your command handler code here
CDC* pDC = this->GetDC();

LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); // 清空LOGFONT 結構
lf.lfHeight = 200; // 設置 LOGFONT 結構
lf.lfWeight = 700;
strcpy(lf.lfFaceName, "Arial");
CFont font;
font.CreatePointFontIndirect(&lf, pDC);
CFont* pOldFont = pDC->SelectObject(&font);
pDC->TextOut(460,260,"第三章 多媒體文本處理");

}

四、文本控件的使用
1、靜態文本控件
void CStaticTextDlg::OnButton()


{
// TODO: Add your control notification handler code here
m_strStaticText = "再見!"; // 設置要顯示的內容
UpdateData(FALSE); // 在靜態文本框中顯示結果

}
2使用編輯框控件
void CStaticTextDlg::OnButton2()


{
// TODO: Add your control notification handler code here
UpdateData(TRUE); // 接受輸入的信息
m_strDisplay = m_strReceive; // 賦值
UpdateData(FALSE); // 輸出得到的信息

}
posted on 2009-06-21 13:19
The_Moment 閱讀(911)
評論(0) 編輯 收藏 引用 所屬分類:
VC理論