【C++】【MFC】绘图
MFC当中,调用 CDC或者其子类 中的成员变量 m_hDC 和 m_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 }