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