【MFC计算机图形学】基本操作

绘制像素点

  • COLORREF SetPixel(int x ,int y,COLORREF color);

  • BOOL SetPixel1V(int x ,int y,COLORREF color);

  • COLORRE 颜色变量

绘制直线

创建画笔 CPen::CreatePen

  • BOOL CreatePen(int nPenStyle,int nWidth,COLORRE color);
  • CPen 封装了GDI画笔,可以选作设备上下文的画笔
  • 若需要更换画笔,可以在创建新画笔对象后,选入设备上下文,就可以使用新画笔进行绘图,使用结束后将设备上下文恢复原状。

将画笔选入上下文 CDC::SelectObject

  • CPen* SelectObject(CPen* pPen);【CBrush*,CBitmap同理】
  • 将设备上下文的更换为新对象,同时返回指向原对象的指针。

删除GDI对象 CGdiObject::DeleteObject

  • BOOL DeleteObject();
  • 如果程序结束会自动删除GDI对象
  • 不能删除正在被上下文调用的对象
// TODO: 在此处为本机数据添加绘制代码
	//画笔对象NewPen,画笔对象指针pOldPen
	CPen NewPen, * pOldPen;
	//调用create()设置画笔
	NewPen.CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
	//调用SelectObject()将新画笔传入上下文,并保存原画笔指针
	pOldPen=pDC->SelectObject(&NewPen);
	//画直线
	CPoint P0(20, 30);
	pDC->MoveTo(P0);
	pDC->LineTo(200, 300);
	//恢复设备上下文,清楚画笔
	pDC->SelectObject(pOldPen);
	NewPen.DeleteObject();

绘制结果【直线】

绘制矩形 CDC::Rectangle

  • BOOL Rectangle(int x1,int y1,int x2,int y2);
  • BOOL Rectangle(LPCRECT lpRect);
  • lpRect可以是CRect对象或RECT结构体变量的指针
pDC->Rectangle(100, 100, 900, 900);
CRect rect(100, 100, 900, 900);
pDC->Rectangle(rect);
  • 绘制效果相同

画刷

创建画刷 CBrush::CreateSolidBrush

  • BOOL CreateSolidBrush(COLORREF color);
  • 也可以使用构造函数直接定义 CBrush(COLORREF color);
// TODO: 在此处为本机数据添加绘制代码
	//画笔对象NewPen,画笔对象指针pOldPen
	CPen NewPen, * pOldPen;
	//调用create()设置画笔
	NewPen.CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
	//调用SelectObject()将新画笔传入上下文,并保存原画笔指针
	pOldPen=pDC->SelectObject(&NewPen);
	//创建画刷
	CBrush NewBrush, * pOldBrush;
	NewBrush.CreateSolidBrush(RGB(0, 0, 255));
	//调用SelectObject()将新画刷传入上下文,并保存原画刷指针
	pOldBrush = pDC->SelectObject(&NewBrush);
	CRect rect(100, 100, 900, 900);
	pDC->Rectangle(rect);
	//恢复设备上下文,清除画笔、画刷
	pDC->SelectObject(pOldPen);
	NewPen.DeleteObject();
	pDC->SelectObject(pOldBrush);
	NewBrush.DeleteObject();

画刷填充

选入库函数CDC::SelecStockObject

  • virtual CGdiObject* SelectStockObject(int nIndex)
  • index 可以是库画刷代码或库画笔代码

绘制椭圆 CDC::Ellipse

  • BOOL Ellipse(int x1,int y1,int x2,int y2);
  • BOOL Ellipse(LPCRECT lpRect);
  • lpRect是CRect对象
  • x,y是外切矩形的左上、右下坐标
  • 绘制圆则让矩形为正方形

年轮

  • 定义30个外接矩形对象CRect CirumRect[30];
  • 绘制了30个园但是只显示了一个,因为椭圆内部默认填充为白色;
  • 循环中画刷要定义为透明

绘制多边形CDC::Polygon

  • BOOL Polygon(lpRect lpPoints,int ncount);
  • lpPoints指定多边形顶点数组指针,数组中的每个顶点是一个POINT结构或CPoint对象;nCount指定多边形顶点数组中的顶点个数。
  • 该函数使用当前画刷填充多边形内部,并使用当前画刷绘制多边形边界线;多边形自动闭合。
CPoint P[4];
P[0].x=x1,P[0].y=y1;
...
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值