要求

1、 在客户区输出一条顺时针45度的直线、一个正方形、一个大圆;

2、 在客户区输出一个图标;

3、 当按下鼠标左键时,将以鼠标坐标为圆心画直径为20个单位的小圆;


  1. 首先设置两个变量,用来保存颜色和线宽,这样就可是通过程序设置圆或者线条的颜色和宽度了。(添加在view类的构造函数中)
COLORREF color;
int penwidth;</span>



    2. 画45度直线的实现代码如下:

CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.MoveTo(0,0);
dc.LineTo(400,400);



    3. 画矩形的代码实现如下:

CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.Rectangle(200,200,400,400);


    4. 画圆的实现代码如下:(注释掉的部分为CPen填充矩形,未注释的是用CBrush填充矩形)


CClientDC dc(this);
//CPen pen(PS_SOLID,penwidth,color);

CBrush brush=RGB(255,255,0);
CBrush* pbr=dc.SelectObject(&brush);

dc.SelectObject(&brush);
dc.Ellipse(300,300,400,400);
// TODO: Add your command handler code here
//CDC* pdc=GetDC();
//pdc->Ellipse(300,300,400,400);


     5. 在客户区输出一个图标的实现代码如下:(提前通过编译器将程序导入)

CDC* pdc=GetDC();
BITMAP bitmap;
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
bm.GetBitmap(&bitmap);
CClientDC dc(this);
dc.CreateCompatibleDC(pdc);
dc.SelectObject(&bm);
pdc->BitBlt(320,30,180,120,&dc,80,50,SRCCOPY);


      6. 当按下鼠标左键时,将以鼠标坐标为圆心画直径为20个单位的小圆,实现代码如下:(首先添加鼠标左键按下的响应事件,然后加入如下代码)


CClientDC dc(this);
CPen pen(PS_SOLID,penwidth,color);
dc.SelectObject(&pen);
dc.Ellipse(point.x-10,point.y-10,point.x+10,point.y+10);


运行截图如下:

MFC文档(SDI)应用:绘图程序(画圆、画线、鼠标事件)_绘图程序


参考博客:​​用MFC “菜单响应事件” 实现绘图​​