MFC绘制棋盘格

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

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

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的数据成员

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

	CColorDialog cDlg;
	if(cDlg.DoModal()==IDOK)
	{
		//LOGFONT logfont;
       m_color=cDlg.GetColor();
	   OnPaint();

	}

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

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

 

参考代码:

1,pund,Basic-graphics, 2014.

 

posted @ 2016-01-03 21:21  wenglabs  阅读(2039)  评论(0编辑  收藏  举报