(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.