zoukankan      html  css  js  c++  java
  • 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即可.

      

  • 相关阅读:
    关于SimpleDateFormat安全的时间格式化线程安全问题
    JAVA多线程和并发基础面试问答
    探秘Java中的String、StringBuilder以及StringBuffer
    Java开发岗位面试题归类
    Java并发编程:阻塞队列
    Shell基本概述
    Ansible--06 ansible roles
    Ansible --05 ansible jinja2
    Ansible--04 ansible 流程控制
    Ansible--03 ansible 变量
  • 原文地址:https://www.cnblogs.com/iBinary/p/9651416.html
Copyright © 2011-2022 走看看