【C++】【MFC】绘图

MFC当中,调用 CDC或者其子类 中的成员变量 m_hDCm_dAttribDC 来获取绘图设备句柄

  CPaintDC 类, 封装了在 WM_PAINT 消息中绘图的绘图设备

  CClientDC 类,封装了在客户区绘图的绘图设备

CGdiObject(绘图对象类)

  封装了各种绘图对象相关的操作,成员变量 m_hObject (绘图对象句柄)

  Cpen类, 封装了画笔的操作

  CBrush类, 封装了画刷的操作

  CFont类,封装了字体的操作

  CBitmap类,封装了位图的操作

画笔:

 1 void CMFCDrwaView::OnPen()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
 6     //auto* o = dc.SelectObject(&pen);
 7     auto o = ::SelectObject(dc.m_hDC, pen.m_hObject);
 8     //dc.Rectangle(100, 100, 300, 300);
 9     ::Rectangle(dc.m_hDC, 100, 100, 300, 300);
10     //dc.SelectObject(o);
11     ::SelectObject(dc.m_hDC, o);
12     //pen.DeleteObject();
13     ::DeleteObject(pen.m_hObject);
14 }

画刷:

 1 void CMFCDrwaView::OnBrush()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CBrush brush(RGB(0, 255, 0));
 6     auto o = dc.SelectObject(&brush);
 7     dc.Rectangle(100, 100, 300, 300);
 8     dc.SelectObject(&o);
 9     brush.DeleteObject();
10 }

字体:

 1 void CMFCDrwaView::OnFont()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     CClientDC dc(this);
 5     CFont font;
 6     font.CreatePointFont(300, "Black");
 7     auto o = dc.SelectObject(&font);
 8     dc.TextOut(100, 100, "Hello");
 9     dc.SelectObject(o);
10     font.DeleteObject();
11 }

位图:

 1 void CMFCDrwaView::OnBitmap()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     /*
 5     1、添加位图资源
 6     2、创建一个和当前DC相匹配的内存DC
 7     3、将位图数据发送给内存DC
 8     4、成像
 9     5、将数据要回来
10     6、销毁位图
11     7、销毁内存DC
12     */
13     CClientDC dc(this);
14     CDC memdc;
15     memdc.CreateCompatibleDC(&dc);
16 
17     CBitmap bmp;
18     bmp.LoadBitmap(IDB_BITMAP1);
19     auto o = memdc.SelectObject(bmp);
20 
21     dc.BitBlt(100, 100, 48, 48, &memdc, 0, 0, SRCCOPY);
22 
23     memdc.SelectObject(o);
24 
25     bmp.DeleteObject();
26 
27     memdc.DeleteDC();
28 }

 

posted @ 2024-06-24 14:23  VanGoghpeng  阅读(21)  评论(0编辑  收藏  举报