一、新建MFC应用程序
二、在菜单栏新加画图项
三、类向导添加绘图命令,项目---类向导
四、显示aiyou代码
void CMFC绘图View::OnHuahua() { //创建对象,在视图对象里画 CClientDC dc(this); dc.TextOutA(100, 100, "aiyou"); //::TextOut(dc.m_hDC, 100, 100, "hello client", strlen("aiyou")); }
五、运行结果
六、添加绘图消息
七、画一个矩形
void CMFC绘图View::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CView::OnPaint() dc.Rectangle(100, 100, 300, 300); //::Rectangle( dc.m_hDC, 100, 100, 300, 300 ); }
注意:最小化窗口,发现绘图消息还保留,aiyou不见了,需要重新点击生成
八、CGDIObject类讲解
1、新建菜单项,画笔、画刷、字体、位图、复合图
2、类向导添加相关的命令
3、代码如下:
void CMFC绘图View::OnHuabi() { CClientDC dc(this); //创建画笔10像素,红色 CPen pen(PS_SOLID, 10, RGB(255, 0, 0)); /*CPen* oldpen = dc.SelectObject(&pen); dc.Ellipse(100, 100, 200, 200); //销毁画笔 dc.SelectObject(oldpen); pen.DeleteObject();*/ HGDIOBJ nOldPen = ::SelectObject(dc.m_hDC, pen.m_hObject); ::Ellipse(dc.m_hDC, 100, 100, 200, 200); ::SelectObject(dc.m_hDC, nOldPen); ::DeleteObject(pen.m_hObject); } void CMFC绘图View::OnHuashau() { CClientDC dc(this); CBrush brush(RGB(0, 255, 0)); CBrush* oldbrush = dc.SelectObject(&brush); dc.Ellipse(100, 100, 300, 300); dc.SelectObject(oldbrush); brush.DeleteObject(); } void CMFC绘图View::OnZiti() { CClientDC dc(this); CFont font; font.CreatePointFont(100, "宋体"); CFont* oldfont = dc.SelectObject(&font); dc.TextOut(200, 100, "哎呦"); dc.SelectObject(oldfont); font.DeleteObject(); }
4、从资源里添加位图
首先创建一个位图
void CMFC绘图View::OnWeitu() { CClientDC dc(this); //添加资源 CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CDC memdc; memdc.CreateCompatibleDC(&dc); CBitmap* oldbmp = memdc.SelectObject(&bmp); dc.BitBlt(200, 200, 48, 48, &memdc, 0, 0, SRCCOPY); memdc.SelectObject(oldbmp); bmp.DeleteObject(); memdc.DeleteDC(); }
5、复合图实现
void CMFC绘图View::OnFht() { CClientDC dc(this); CRgn rgn1, rgn2; rgn1.CreateEllipticRgn(100, 100, 300, 300); rgn2.CreateEllipticRgn(200, 200, 500, 500); //将基本图形进行或运算 rgn1.CombineRgn(&rgn1, &rgn2, RGN_OR); //给复合图形填充颜色 CBrush brush2(RGB(0, 255, 0)); dc.FillRgn(&rgn1, &brush2); //给复合图形描绘线条 CBrush brush(RGB(255, 0, 0)); dc.FrameRgn(&rgn1, &brush, 10, 1); }