MFC绘制棋盘格

(1)新建立一个MFC空白的基于视类的工程

(2)在View类中重写OnPaint消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
void  CMy005View::OnPaint()
{
     CPaintDC dc( this );  // device context for painting
     
     // TODO: Add your message handler code here
     
     // Do not call CView::OnPaint() for painting messages
//客户区绘图
     /*HDC hdc;
     hdc=::GetDC(m_hWnd);
     MoveToEx(hdc,0,0,NULL);
     LineTo(hdc,200,200);
     ::ReleaseDC(m_hWnd,hdc);*/
 
     CDC *pdc;
     pdc=GetDC();
     
//绘制棋盘
      CPen pen(PS_SOLID, 2, RGB(0,0,0));
      CPen *pOldpen = pdc->SelectObject(&pen); //获取指针
      int  Ox=100;
      int  Oy=100;
      int  numx=10; //行数
      int  numy=10; //列数
      for ( int  i=0;i<numx;i++) //画列线
      {
          pdc->MoveTo(Ox+30*i,Oy);
          pdc->LineTo(Ox+30*i,370);
      }
      for ( int  j=0;j<numy;j++) //画行线
      {
          pdc->MoveTo(100,Oy+30*j);
          pdc->LineTo(370,Oy+30*j);
      }
      
 
      /*CDC::FillRect
    CBrush()
    Cbrush brush((RGB(255, 0, 0));
    dc.FilllRect(Crect(m_point, point), &brush);*/
      //颜色填充
    CBrush brush1(m_color);
    for ( int  n=0;n<numy;n=n+2)
    {
    
       for ( int  m=0;m<numx;m=m+2)
       {
       CRect rc(Ox+30*m,Oy+n*30,Ox+30+30*m,Oy+30+n*30);
       pdc->FillRect(rc,&brush1);
       }
    }
    CBrush brush2(RGB(0,0,255));
     for ( int  p=1;p<numy-1;p=p+2)
     {
         for ( int  q=1;q<numx-1;q=q+2)
         {
             CRect rc(Ox+30*q,Oy+p*30,Ox+30+30*q,Oy+30+p*30);
             pdc->FillRect(rc,&brush2);
 
         }
     }
    //绘制多边形
    /*CPoint ps[6]={CPoint(300,200),CPoint(300,300),CPoint(320,350),CPoint(400,400),CPoint(400,250)};
    pdc->Polygon(ps,4);*/
    
    //客户区绘图
    /*pdc->MoveTo(0,0);
     pdc->LineTo(200,100);
     ReleaseDC(pdc);
     //整个窗口绘图
     CWindowDC dw(GetParent());
     dw.MoveTo(0,0);
     dw.LineTo(CPoint(300,300));
     //非客户区绘图
     CClientDC du(GetParent());
     du.MoveTo(0,0);
     du.LineTo(CPoint(30,200));
     UpdateData(true);*/
}

(3)如果想要在菜单中设置改变其中部分格子的颜色,可以在View类中添加一个COLORREF的数据成员

然后在新建的菜单的响应函数中添加下面的代码

1
2
3
4
5
6
7
8
CColorDialog cDlg;
if (cDlg.DoModal()==IDOK)
{
     //LOGFONT logfont;
    m_color=cDlg.GetColor();
    OnPaint();
 
}

 (4)运行后,出来的结果如下

 

原始的着色效果                改变颜色后的着色效果

 

参考代码:

1,pund,Basic-graphics, 2014.

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




  本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5097217.html ,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值