《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));
}

Post a comment