MFC控件GDI编程
MFC控件GDI编程
一丶学习内容
1.了解常用的GDI函数绘图.
2.使用常用的画笔画刷.
二丶常用的GDI函数绘图
上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等.
2.1 画线代码MoveTo LineTo用法
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); POINT po; po.x = 30; po.y = 30; dc.MoveTo(10, 10); //移动起点到10 10 位置 dc.LineTo(po); //画线 dc.LineTo(po); }
截图:
2.2使用PolyLine画多个线
PolyLine这个函数.则是给一个数组. 这个数组里面保存着x y坐标. 然后它会遍历数组.以你给定的点来画线.
起始的两个坐标属于在哪里开始画.就是指定的起点.
比如使用它画一个矩形.
代码:
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); POINT po[5] = { 40,40,100,40,100,100,40,100,40,40 }; //给定坐标 dc.Polyline(po, 5);//给数组.以及数组大小. }
截图:
PolyLineTo 这个跟上面一样.上面的数组起始的两个成员是指明了起始位置.所以需要五个坐标.这一个直接使用MoveTo指定.数组里面直接填写坐标即可.
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); POINT po[4] = {100,40,100,100,40,100,40,40 }; //给定坐标 POINT ps; ps.x = 40; ps.y = 40; dc.MoveTo(ps); dc.PolylineTo(po, 4);//给数组.以及数组大小. }
效果
2.3使用DC画圆
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); dc.Ellipse(CRect(10, 130, 110, 160)); //给定坐标即可. }
截图:
2.4使用Dc画矩形
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); dc.Rectangle(CRect(10, 130, 110, 160)); }
使用系统默认画刷.填充矩形.
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); CBrush brush; CRect rect(10, 130, 110, 160); brush.CreateStockObject(LTGRAY_BRUSH); dc.Rectangle(&rect); dc.FillRect(&rect, &brush); //填充矩形.使用默认 }
2.5使用3D立体画一个矩形
其实3D立体就是使用两个RGB颜色来互相对应 一个代表的是上方的颜色.一个是下方的颜色
具体看代码吧.这里以矩形为例子.
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); CBrush brush; CRect rect(10, 130, 110, 160); brush.CreateStockObject(LTGRAY_BRUSH); dc.Rectangle(&rect); dc.FillRect(&rect, &brush); //填充矩形.使用默认 dc.Draw3dRect(&rect, RGB(255, 0, 0), RGB(128, 128, 128)); }
可以看到.上方颜色是红色.下方跟下方右边是灰色.
2.6 判断坐标是否在矩形里面.
这个可以使用我们的类 CRect 里面有一个函数叫做.PtInRect(POINT)
POINT po; po.x = 10; po.y = 130; if (CRect(10, 130, 110, 160).PtInRect(po)) { AfxMessageBox(TEXT("Yes")); } else { AfxMessageBox(TEXT("No")); }
三丶画刷以及画笔使用
在GDI中.我们有画笔.以及画刷. 比如上面我们使用了画刷来填充矩形.那么画矩形的线也是可以更改的.
CPen类. 根 CBrush类. 当然也有自己 CFront. 简单讲解一个.
我们要使用画笔.就要使用 SelectObject来使用才可以使用.
比如下方代码: PS: Brush一样.只不过设置背景都有专门的函数.可以查询MSDN
void CCDCDlg::OnBnClickedButton1() { CClientDC dc(this); CBrush brush; CPen pen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔. CPen *oldPen = dc.SelectObject(&pen); //选择画笔. CRect rect(10, 130, 110, 160); dc.Rectangle(&rect); dc.SelectObject(oldPen);//还原画笔. }
截图:
关于字体. 背景颜色. 查询MSDN即可.
作者:IBinary
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/9651416.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: