有些事说出来显得我不大度,但我确实不开心,如果你不懂我,那错的都是我。。。
---- 网易云热评
一、新建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);
}
欢迎关注公众号:顺便编点程