MFC把DC(設(shè)備描述環(huán)境)和一些GDI函數(shù)填充裝到一起,形成了一個DCD類.
CDC類中的一些常用的成員函數(shù)
函數(shù) 說明
Arc() 畫橢圓弧
BitBlt() 把一個DC中的位圖自制到另一個DC中
Ellipse() 畫橢圓
FillRect() 用指定的畫刷填充矩形
LineTo() 畫直線
MoveTo() 移動畫筆
Rectangle() 畫矩形
RoundRect() 畫圓角矩形
SelectObject() 選擇GDI的繪圖對象
SetTextColor() 設(shè)置文本顏色
StretchBlt() 把一個DC中的位圖自制到另一個DC中但可以改變位圖的長寬比
TextOut() 繪制字符串
一、幾種派生的CDC類
類名 說明
CClientDC 在相應(yīng)除WM_PAINT消息之外的消息處理函數(shù)中提供窗口客戶區(qū)的設(shè)備描述環(huán)境
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圖元文件的設(shè)備描述環(huán)境,在創(chuàng)建與設(shè)備無關(guān)的并且可以回放的圖像時使用這個類型的DC
CPaintDC 在OnDraw() 函數(shù)中使用的窗口用戶區(qū)的設(shè)備描述環(huán)境,在MFC中用OnDraw()函數(shù)來處理WM_PAINT消息。和WM_PAINT消息關(guān)聯(lián),當(dāng)某一窗口需要繪圖時,這個消息就發(fā)給這個窗口,它在窗口的OnPaint成員函數(shù)中使用,其構(gòu)造函數(shù)自動調(diào)用BeginPaint,而析構(gòu)函數(shù)自動調(diào)用EndPaint。這些都有Windows自動完成。我們要做的就是在CPaintDC對象上畫圖。
void CAaaView::OnPaint()


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

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

CWindowDC 提供在整個窗口內(nèi)(不只是用戶區(qū))繪圖的設(shè)備描述環(huán)境 .
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("以下是當(dāng)前字體的基本信息!");
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, // 走格矢量與設(shè)備的X軸之間的夾角
10, // 每個字符的基線與設(shè)備的X軸之間的夾角
555, // 字體的灰度
1, // 為斜體字體
1, // 帶下畫線的字體
1, // 帶刪除線的字體
10, // 字體的符集
10, // 字體的輸出精度
10, // 字體的裁減精度
10, // 字體的輸出質(zhì)量
10, // 字體的間距和系列
""}; // 字體的字樣名
CFont m_Font;
m_Font.CreateFontIndirect(&lFont);
CFont* pOldFont = pDC->SelectObject(&m_Font);
strLogFont = "第三章 多媒體文本處理";
pDC->TextOut(10,300,strLogFont);
}

三、
創(chuàng)建各種字體:
1)HFONT CreateFontIndirect(CONST LOGFONT *lplf);
lplf:指向定義此邏輯字體特性的LOGFONT結(jié)構(gòu)的指針。
返回值:如果函數(shù)調(diào)用成功,返回值是邏輯字體的句柄;如果函數(shù)調(diào)用失敗,返回值是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);
參數(shù)說明: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。
參數(shù):
nPointSize
|
所需字體高度(用0.1點(diǎn)表示,例如,傳遞120表示12點(diǎn)字體)。
|
lpszFaceName
|
一個CString或指向一個以空終止符結(jié)尾的字符串,定義字體名稱。此字符串長度不應(yīng)超過30個字符。Windows EnumFontFamilies函數(shù)可用于計算當(dāng)前可用字體的總數(shù)。如果為NULL,則GDI使用與設(shè)備無關(guān)的字體。
|
pDC
|
指向CDC對象,將nPointSize中的高度轉(zhuǎn)化為邏輯單位。如果為NULL,則屏幕設(shè)備上下文用于轉(zhuǎn)換。
|
說明:
此函數(shù)提供了一種創(chuàng)建指定字體和點(diǎn)大小的字體對象的方法,它自動將nPointSize中的高度轉(zhuǎn)化為邏輯單位,這是使用由pDC指向的CDC對象實(shí)現(xiàn)的。
當(dāng)完成用CreatePointFont函數(shù)創(chuàng)建CFont對象后,從設(shè)備上下文中選擇字體,然后刪除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。
參數(shù):
lpLogFont
|
指向LOGFONT結(jié)構(gòu),定義邏輯字體特征。LOGFONT的lfHeight成員用0.1點(diǎn)計算而不用邏輯單位(如果設(shè)置lfHeight為120,則要求12點(diǎn)字體)。
|
pDC
|
指向CDC對象,用于將lfHeight中的高度轉(zhuǎn)化為邏輯單位。如果為NULL,屏幕設(shè)備上下文用于轉(zhuǎn)換。
|
說明:
此函數(shù)與CreateFontIndirect相似,但LOGFONT的lfHeight成員由0.1點(diǎn)表示而不是用設(shè)備單位表示。在傳遞LOGFONT結(jié)構(gòu)到Windows之前,pDC指向的CDC對象自動使函數(shù)的lfHeight中的高度轉(zhuǎn)化為邏輯單位。
當(dāng)完成由CreatePointFontIndirect函數(shù)創(chuàng)建的CFont對象之后,先選擇設(shè)備上下文字體,然后刪去CFont對象。
void CCFontInfoView::On312()


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

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

}

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


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

}
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 閱讀(929)
評論(0) 編輯 收藏 引用 所屬分類:
VC理論