孙鑫VC++第10章绘图控制

来源:互联网 发布:诸葛亮马前课指算法图 编辑:程序博客网 时间:2024/06/05 21:46

 

                                          十、绘图控制

 

1.        简单绘图

 

       CClientDC dc(this);

 

       CPen pen(PS_SOLID,1,RGB(255,0,0));

       dc.SelectObject(&pen);

 

       //透明画刷

       CBrush *pBrush =CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

       dc.SelectObject(pBrush);

 

       switch(m_nDrawType)

       {

       case 1:

              dc.SetPixel(point,RGB(255,0,0));

              break;

       case 2:

              dc.MoveTo(m_ptOrigin);

              dc.LineTo(point);

              break;

       case 3:

              dc.Rectangle(CRect(m_ptOrigin,point));

              break;

       case 4:

              dc.Ellipse(CRect(m_ptOrigin,point));

              break;

       }

 

 

2.        设置对话框

 

 

 

设置线宽:

 

//创建的新对话框类

       CSettingDlg dlg;

       //用当前视类保存的变量来初始化dlg这个对象的成员变量

       //视类的生存周期是知道程序结束时候的

       dlg.m_nLineWidth = m_nLineWidth;

       //点击OK后保存输入的数字

       if (IDOK == dlg.DoModal())

       {

              m_nLineWidth =dlg.m_nLineWidth;

       }

 

 

3.        颜色对话框

 

MFC为我们提供了一个类CColorDialog,它其中有一个CHOOSECOLOR结构体类型的成员变量:m_cc,这个结构体里面的rgbResult变量就保存了用户选择的颜色;

 

为视类添加一个私有成员变量:m_clr;

 

COLORREF m_clr;

并初始化为 m_clr = RGB(255,0,0);

 

       CColorDialog dlg;

 

       //想要设置颜色对话框初始选择的颜色,则需要设置该对话框的CC_RGBINIT标记

       dlg.m_cc.Flags |= CC_RGBINIT;//像这种位标志的,都不能直接赋值,必须得通过位运算

       dlg.m_cc.rgbResult = m_clr;

      

       if(IDOK == dlg.DoModal())

       {

              m_clr = dlg.m_cc.rgbResult;

       }

 

4.        同时按下CTRL键和TAB键,就可以切换到下一个窗口;

 

 

 

 

5.        字体对话框

 

MFC提供了一个CFontDialog类,这个类里面有一个CHOOSEFONT结构体的数据成员:m_cf, 其成员lpLogFont是指向逻辑字体(LOGFONT类型)的指针,在在它的成员里面lfFaceName存放的就是字体的名称;

 

先为视类增加一个CFont成员变量:m_font

再增加一个CString类型的成员:m_strFontName,用于保存所选字体的名称

 

字体对象的创建:首先利用CFont类构造一个字体对象,然后利用CFont类的CreateFontInDirect成员函数根据指定特征的逻辑字体(LOGFONT类型)来初始化这个字体对象。

 

       CFontDialog dlg;

      

       if (IDOK == dlg.DoModal())

       {

              //先判断是否已经存在,存在就删除

              //m_hObject是CGdiObject对象数据成员

              //类的对象跟资源对象完全是两种东西,不要混淆

 

              if(m_font.m_hObject)

                     m_font.DeleteObject();

 

              m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);

              m_strFontName =dlg.m_cf.lpLogFont->lfFaceName;

       }

       Invalidate();

 

 

6,示例对话框

 

原创粉丝点击