MFC控件第一讲.DC编程

一丶简介

  什么是DC,DC有什么用.

  DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的.  DC可以简单理解为.没一个窗口程序都有一块内存用于绘制.我们只需要获取这块内存即可.

MFC 中 的CDC类 就是封装了HDC 跟GDI函数. 并且派生出了四个不同场景下的类.

注意HDC 则是windows中真正的DC. 配合GDI函数进行操作绘制的. MFC只不过封装了一下.

派生出来的类常用的有三个.

1.CPaintDc 用户在窗口的客户区画图. 仅限与OnPaint处理程序.   OnPaint 就是一个消息处理函数.

2.CClieentDC 用户在窗口客户区画图.除了 OnPaint外的任何处理程序.   除了消息处理函数都可以进行操作

3.CWindowsDc 用于在窗口内任意地方画图.包括非客户区.                  任何一个地方都可以编写代码操作.

二丶CPaintDc用法

比如我们的MFC框架中已经给我们写好了这个处理函数.

代码如下.

  1. void CCDCDlg::OnPaint()
  2. {
  3. if (IsIconic())
  4. {
  5. CPaintDC dc(this); // 用于绘制的设备上下文
  6.  
  7. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), );
  8.  
  9. // 使图标在工作区矩形中居中
  10. int cxIcon = GetSystemMetrics(SM_CXICON);
  11. int cyIcon = GetSystemMetrics(SM_CYICON);
  12. CRect rect;
  13. GetClientRect(&rect);
  14. int x = (rect.Width() - cxIcon + ) / ;
  15. int y = (rect.Height() - cyIcon + ) / ;
  16.  
  17. // 绘制图标
  18. dc.DrawIcon(x, y, m_hIcon);
  19. }
  20. else
  21. {
  22. CDialogEx::OnPaint();
  23. }
  24. }

我们也可以自己写一个.比如使用Win32的知识画一段字.

  1. HDC hdc = ::GetDC(m_hWnd); //用于绘制的DC
  2. PAINTSTRUCT ps; //保存DC的信息结构体
  3. ::BeginPaint(m_hWnd, &ps);
  4.  
  5. ::DrawText(hdc, TEXT("Hello"), wcslen(TEXT("Hello")), CRect(, , , ), DT_SINGLELINE);//单行显示
  6.  
  7. ::EndPaint(m_hWnd, &ps);

如果是MFC下.则用CpaIntDc 传入this即可.

三丶CClientDc用法

CClientDc则是可以不用再OnPaint中使用.我们可以按钮点击就使用了.

  1. void CCDCDlg::OnBnClickedButton1()
  2. {
  3. CClientDC dc(this);
  4. dc.Ellipse(, , , ); 画个圆
  5. }

上方代码则是我们在客户区画个圆. 在我们点击之后.

我们的CWindowsDc是一样的.只不过比CClientDc用的更广一点.

关于GDI函数.我们可以下一个MFC类库详解. 有中文版的.或者你查询MSDN都可以.输入你想用的DC类.则会出现对应函数.

四丶DC中常见的属性

常见的属性可以用下图表示.并且有对应的方法

我们可以通过这些方法设置跟获取.

MFC控件第一讲.DC编程的更多相关文章

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

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

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

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

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

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

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

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

  5. MFC控件GDI编程

    MFC控件GDI编程 一丶学习内容 1.了解常用的GDI函数绘图. 2.使用常用的画笔画刷. 二丶常用的GDI函数绘图 上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等. 2.1 画线代码 ...

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

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

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

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

  8. 【MFC】mfc控件位置调整和坐标确定 .

    摘自DoubleLi:   http://www.cnblogs.com/lidabo/archive/2012/08/24/2654678.html mfc控件位置调整和坐标确定 http://my ...

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

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

随机推荐

  1. 第九周助教工作总结——NWNU李泓毅

    1.助教博客链接: https://www.cnblogs.com/NWNU-LHY/ 2.作业要求博客链接: https://www.cnblogs.com/nwnu-daizh/p/1072688 ...

  2. HTML之 一 标签

    一 ,标签分类: 1.普通标签: <h1> hello </h1> hello 2.自闭和标签 <hr/> 二,书写html注意事项 1.标签不能交叉嵌套 2. 标 ...

  3. 用pyspider爬取并解析json字符串

    获取堆糖网站所有用户的id 昵称及主页地址 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-06-21 13:57: ...

  4. windows mysql zip 安装

    https://www.cnblogs.com/iathanasy/p/8461429.html

  5. python猜数字GUI版本V0.2

    使用类方式编写猜数字游戏GUI版本. 思路:初始化数字以及初始化wegdits,编写button click event判断代码的函数,每猜一次点击button调用一次该函数,并计算猜的次数.如果猜对 ...

  6. SSH连接Linux操作:

    Centos6.5的操作: 1:需要下载一个Xshell连接工具: 2:在Linux输入ifconfig,查看IP地址, 3:使用Xshell连接 Ubuntu的操作: 1:需要下载一个Xshell连 ...

  7. JVM运行时数据区(二)

    4.本地方法栈 本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务. 与Java虚拟机栈一样本地 ...

  8. 解决jenkins控制台中文乱码问题

    1,进入[系统管理]->[系统设置]->全局属性:KEY: LANG; VALUE:zh.CH.UTF-8 2,修改Jenkins.xml文件 在Jenkins安装目录下找到jenkins ...

  9. Spring+Redis集成+关系型数据库持久化

    本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...

  10. 为什么要学习 Spring Boot?

    我们知道,从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在Java EE(Java Enterprise Edition)开发中真正意义上的标准,但是随着技术的发展,Java E ...