MFC控件GDI编程

        MFC控件GDI编程

一丶学习内容

    1.了解常用的GDI函数绘图.

    2.使用常用的画笔画刷.

二丶常用的GDI函数绘图

  MFC控件GDI编程

上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等.

2.1 画线代码MoveTo LineTo用法

  

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this); POINT po;
po.x = ;
po.y = ;
dc.MoveTo(, ); //移动起点到10 10 位置
dc.LineTo(po); //画线
dc.LineTo(po);
}

截图:

MFC控件GDI编程

2.2使用PolyLine画多个线

PolyLine这个函数.则是给一个数组. 这个数组里面保存着x y坐标. 然后它会遍历数组.以你给定的点来画线.

起始的两个坐标属于在哪里开始画.就是指定的起点.

比如使用它画一个矩形.

代码:

  

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this); POINT po[] = { ,,,,,,,,, }; //给定坐标
dc.Polyline(po, );//给数组.以及数组大小. }

截图:

  MFC控件GDI编程

PolyLineTo 这个跟上面一样.上面的数组起始的两个成员是指明了起始位置.所以需要五个坐标.这一个直接使用MoveTo指定.数组里面直接填写坐标即可.

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this); POINT po[] = {,,,,,,, }; //给定坐标
POINT ps;
ps.x = ;
ps.y = ;
dc.MoveTo(ps);
dc.PolylineTo(po, );//给数组.以及数组大小. }

效果

MFC控件GDI编程

2.3使用DC画圆

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
dc.Ellipse(CRect(, , , )); //给定坐标即可. }

截图:

MFC控件GDI编程

2.4使用Dc画矩形

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
dc.Rectangle(CRect(, , , )); }

MFC控件GDI编程

使用系统默认画刷.填充矩形.

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
CBrush brush;
CRect rect(, , , );
brush.CreateStockObject(LTGRAY_BRUSH);
dc.Rectangle(&rect);
dc.FillRect(&rect, &brush); //填充矩形.使用默认
}

MFC控件GDI编程

2.5使用3D立体画一个矩形

其实3D立体就是使用两个RGB颜色来互相对应 一个代表的是上方的颜色.一个是下方的颜色

具体看代码吧.这里以矩形为例子.

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
CBrush brush;
CRect rect(, , , );
brush.CreateStockObject(LTGRAY_BRUSH);
dc.Rectangle(&rect);
dc.FillRect(&rect, &brush); //填充矩形.使用默认
dc.Draw3dRect(&rect, RGB(, , ), RGB(, , ));
}

MFC控件GDI编程

可以看到.上方颜色是红色.下方跟下方右边是灰色.

2.6 判断坐标是否在矩形里面.

这个可以使用我们的类 CRect 里面有一个函数叫做.PtInRect(POINT)

  POINT po;
po.x = ;
po.y = ;
if (CRect(, , , ).PtInRect(po))
{
AfxMessageBox(TEXT("Yes"));
}
else
{
AfxMessageBox(TEXT("No")); }

MFC控件GDI编程

三丶画刷以及画笔使用

在GDI中.我们有画笔.以及画刷. 比如上面我们使用了画刷来填充矩形.那么画矩形的线也是可以更改的.

CPen类. 根 CBrush类. 当然也有自己 CFront. 简单讲解一个.

我们要使用画笔.就要使用 SelectObject来使用才可以使用.

比如下方代码: PS: Brush一样.只不过设置背景都有专门的函数.可以查询MSDN

void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
CBrush brush;
CPen pen(PS_SOLID, , RGB(, , ));//创建画笔.
CPen *oldPen = dc.SelectObject(&pen); //选择画笔.
CRect rect(, , , ); dc.Rectangle(&rect); dc.SelectObject(oldPen);//还原画笔.
}

截图:

MFC控件GDI编程

关于字体. 背景颜色. 查询MSDN即可.

  

上一篇:[改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题


下一篇:【MFC】mfc控件位置调整和坐标确定 .