1. 实例说明
单文档MFC工程。程序初始时,在客户区窗口显示一行文字和一个圆。当执行“设置”→“颜色”时,会弹出颜色对话框,选择颜色关闭后,圆的颜色将改变。当执行“字体”时,会弹出字体对话框,选择字体大小、颜色等,确定后将改变文字。
运行结果:
class CCommonDlgDemoView : public CView
{
……
// Attributes
public:
CCommonDlgDemoDoc* GetDocument();
COLORREF crColor; // 圆的颜色
COLORREF fntColor; // 字体颜色
LOGFONT fnt; // 字体结构
}
CCommonDlgDemoView::CCommonDlgDemoView()
{
crColor = RGB(255, 0, 0); // 圆的初始颜色红色
fntColor = RGB(0, 0, 255); // 字体的初始颜色蓝色
memset( &fnt, 0, sizeof(LOGFONT) );
fnt.lfHeight = 30; // 字体初始高度30
fnt.lfWeight = 400; // 初始字体浓淡
strcpy(fnt.lfFaceName, "Arial"); // 初始字体名称
}
void CCommonDlgDemoView::OnDraw(CDC* pDC)
{
CCommonDlgDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPen mypen;
CPen* oldPen;
mypen.CreatePen(PS_SOLID, 3, crColor); // 创建画笔
oldPen = pDC->SelectObject(&mypen); // 载入画笔
pDC->Ellipse(100, 100, 250, 250); // 画圆
pDC->SelectObject(oldPen);
CFont myfont;
CFont* oldFont;
myfont.CreateFontIndirect(&fnt); // 创建字体
oldFont = pDC->SelectObject(&myfont); // 载入字体
pDC->SetTextColor(fntColor); // 字体的颜色
pDC->TextOut(50, 50, "字体对话框设置字体"); // 输出文字
pDC->SelectObject(oldFont);
}
void CCommonDlgDemoView::OnColor()
{
// TODO: Add your command handler code here
CColorDialog colordialog(crColor, CC_FULLOPEN); // 初始化颜色对话框对象
if(colordialog.DoModal() == IDOK) // 创建颜色对话框
{
crColor = colordialog.m_cc.rgbResult;
Invalidate(TRUE); // 重绘窗口
}
}
void CCommonDlgDemoView::OnFont()
{
// TODO: Add your command handler code here
CFontDialog fontdialog(&fnt); // 初始化字体对象
fontdialog.m_cf.rgbColors = fntColor; // 字体对话框初始化
if(fontdialog.DoModal() == IDOK) // 显示字体对话框
{
fontdialog.GetCurrentFont(&fnt); // 获取字体信息
fntColor = fontdialog.GetColor(); // 获取字体颜色
Invalidate(TRUE); // 重绘窗口
}
}