MFC控件GDI编程

一丶学习内容

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

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

二丶常用的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);
}

截图:

2.2使用PolyLine画多个线

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

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

比如使用它画一个矩形.

代码:

  

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

截图:

  

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

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

效果

2.3使用DC画圆

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

截图:

2.4使用Dc画矩形

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

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

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

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

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

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

  POINT po;
po.x = ;
po.y = ;
if (CRect(, , , ).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, , RGB(, , ));//创建画笔.
CPen *oldPen = dc.SelectObject(&pen); //选择画笔.
CRect rect(, , , ); dc.Rectangle(&rect); dc.SelectObject(oldPen);//还原画笔.
}

截图:

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

  

MFC控件GDI编程的更多相关文章

  1. Windows MFC控件消息编程

    1. Progress Bar Control Messages    PBM_DELTAPOS    PBM_GETPOS    PBM_GETRANGE    PBM_SETBARCOLOR    ...

  2. MFC控件第一讲.DC编程

    MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的.  DC可以简单理解为.没一个窗口程序都有一块内存 ...

  3. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  4. MFC 控件编程之水平滚动条跟垂直滚动条

    MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...

  5. MFC控件编程之组合框跟列表框

    MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添 ...

  6. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  7. MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...

  8. MFC控件编程之鼠标跟键盘消息

    MFC控件编程之鼠标跟键盘消息 在MFC中鼠标消息.键盘消息我们很常用.所以说一下. 鼠标消息分为客户区消息.跟非客户区消息. 一丶客户区消息 我们可以处理消息.来进行我们相应的函数即可. MFC添加 ...

  9. [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧

     前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...

随机推荐

  1. php5.6,Ajax报错,Warning: Cannot modify header information - headers already sent in Unknown on line 0

    php5.6ajax报错 Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be remo ...

  2. js基础知识:字面量 关键字和保留字

    js中的字面量概念我的理解就是:字体表面的常量 如:数字 100, 字符串  "ssss"或'ssss'  布尔值:false ,正则 以及null对象. 这些都是常量. 关键字: ...

  3. 获取列表菜单的选项值与选项以后的VALUE

    <html> <body> <select id="izan" name="" onchange='izzzz()'> &l ...

  4. jquery1.6中的.prop()和.attr()异同

    jquery jQueryHTML5JavaScript浏览器ITeye  最近在iteye的新闻中看到jQuery已经更新到了1.6.1.和之前版本的最大变化是增加了.prop方法.但是.prop( ...

  5. vue computed计算属性和watch监听属性解疑答惑

    computed计算属性     计算属性类似于方法,用于输出data中定义的属性数据的结果,data数据变化时,计算属性的结果会同步变化,需要注意的是计算属性不可与data定义的属性同名. 相比于方 ...

  6. 2018 python面试题

    在开始看面试题时,我觉得我们很有必要去了解一下市场需要什么样的python开发人员: 1.python爬虫工程师(scrapy,xpath,正则,mongdb,redis,http 协议,html) ...

  7. Codeforces Round #421 (Div. 2)

    A: 题意:给你一本书共c页,第一天看v0页,第二天看v0+a,第二天看v0+2a以此类推,每天最多看v1页,但是后一天要重复看前一天的后l页. 代码: #include<stdio.h> ...

  8. 【转载】sql monitor

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27067062/viewspace-2129635/ SQL Monitor Report 1. SQL Monit ...

  9. BigDecimal比较2个值是否相等,不能用equals,而要用compareTo

    BigDecimal比较相等,不能用equals,要用compareTo

  10. centos7安装git踩坑记

    之前自己是按照Git 服务器搭建这篇博客来安装git服务器的,一步步顺序下来,但git clone的时候,每次都要求输入密码.说好的SSH免密登录呢.前后搞了一天多才搞定,现在记录下踩过的坑. 坑1: ...