《VC++深入详解–学习笔记》(10)绘图控制
Filed Under (VC++ 学习笔记) by panmaoru on 15-12-2009
在软件的运行过程中,用户可以根据软件提供的设置对话框,颜色对话框和字体对话框等用户接口来对软件进行制定。本章主要介绍对图形绘制的制定,此外,也介绍了如何获取对话框的返回值。
10.1获取一个对话框的返回值
创建一个Setting对话框,在View类中添加Commad消息响应函数。然后再Setting对话框类中添加一个public变量m_nWidth。
在View中添加一个变量m_nWidth1,然后就可以设置和获取对话框的变量值了。
//#include "SettingDlg.h"
void CGraphicView::OnSetting()
{
// TODO: Add your command handler code here
CSettingDlg dlg;
dlg.m_nWidth=m_nWidth1;
if(IDOK==dlg.DoModal())
{
m_nWidth1=dlg.m_nWidth;
}
}
10.2获取颜色对话框的值
MFC为我们提供了一个颜色对话框类CColorDialog,可以在View类中直接创建该类对象。为了设置和获取颜色对话框的RGB默认值,需要在View类中建一个COLORREF类型变量。
void CGraphicView::OnColor()
{
// TODO: Add your command handler code here
CColorDialog dlg;
dlg.m_cc.rgbResult=m_ccr;// m_cc为一个COLORREF变量
dlg.m_cc.Flags|=CC_RGBINIT;
if(IDOK==dlg.DoModal())
{
m_ccr=dlg.m_cc.rgbResult;
}
}
10.3获取字体对话框的值
MFC同样为我们提供了一个字体对话框类CFontDialog,可以在View类中直接创建该类对象。为了获取字体对话框的值,需要在View类中建一个CFont类型变量。
void CGraphicView::OnFont()
{
// TODO: Add your command handler code here
CFontDialog dlg;
if(IDOK==dlg.DoModal())
{
// m_font为一个CFont变量
if(m_font.m_hObject)// 判断m_font是否已经和某个字体资源相关联了
m_font.DeleteObject();//如果已经关联,删除关联资源
m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);
m_strFontName=dlg.m_cf.lpLogFont->lfFaceName;
}
}
10.4绘图
设置绘图的一些参数之后,便可以开始实现绘图。将设置的一些参数选择到画笔,并完成相应的图像绘制。
void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen pen(m_nLineStyle,m_nWidth,m_ccr);
dc.SelectObject(&pen);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//透明画刷
dc.SelectObject(pBrush);
//画点
dc.SetPixel(point,m_ccr);
//画线
dc.MoveTo(m_pOrigin);
dc.LineTo(point);
//画矩形
dc.Rectangle(CRect(m_pOrigin,point));
//画椭圆
dc.Ellipse(CRect(m_pOrigin,point));
}
