前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC控件GDI编程

MFC控件GDI编程

作者头像
IBinary
发布2019-05-25 16:21:40
1.2K0
发布2019-05-25 16:21:40
举报
文章被收录于专栏:逆向技术逆向技术

        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即可.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •         MFC控件GDI编程
    • 一丶学习内容
      • 二丶常用的GDI函数绘图
        • 2.1 画线代码MoveTo LineTo用法
        • 2.2使用PolyLine画多个线
        • 2.3使用DC画圆
        • 2.4使用Dc画矩形
        • 2.5使用3D立体画一个矩形
        • 2.6 判断坐标是否在矩形里面.
      • 三丶画刷以及画笔使用
      相关产品与服务
      图像处理
      图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档