MFC控件GDI编程

时间:2022-06-21
本文章向大家介绍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即可.