MFC控件第一讲.DC编程
时间:2022-06-21
本文章向大家介绍MFC控件第一讲.DC编程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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框架中已经给我们写好了这个处理函数.
代码如下.
void CCDCDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
我们也可以自己写一个.比如使用Win32的知识画一段字.
HDC hdc = ::GetDC(m_hWnd); //用于绘制的DC
PAINTSTRUCT ps; //保存DC的信息结构体
::BeginPaint(m_hWnd, &ps);
::DrawText(hdc, TEXT("Hello"), wcslen(TEXT("Hello")), CRect(200, 200, 200, 200), DT_SINGLELINE);//单行显示
::EndPaint(m_hWnd, &ps);
如果是MFC下.则用CpaIntDc 传入this即可.
三丶CClientDc用法
CClientDc则是可以不用再OnPaint中使用.我们可以按钮点击就使用了.
void CCDCDlg::OnBnClickedButton1()
{
CClientDC dc(this);
dc.Ellipse(0, 0, 100, 100); 画个圆
}
上方代码则是我们在客户区画个圆. 在我们点击之后.
我们的CWindowsDc是一样的.只不过比CClientDc用的更广一点.
关于GDI函数.我们可以下一个MFC类库详解. 有中文版的.或者你查询MSDN都可以.输入你想用的DC类.则会出现对应函数.
四丶DC中常见的属性
常见的属性可以用下图表示.并且有对应的方法
我们可以通过这些方法设置跟获取.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [-Flutter 自组篇-] 蛛网图+绘制+动画实践
- Kotlin类型系统竟如此简单
- 以人为本 | Android 11 的消息通知
- RxJava取消订阅的各种方式的实现
- [- Flutter 基础篇 -] ListView的使用
- Emoji表情在Android JNI中的兼容性问题详解
- 一个吸顶Item的简单实现方法分享
- [- Flutter福利篇 -] Hero转场组件共享 — 附赠-路由动画工具类
- Hue执行多条语句问题
- Android仿抖音列表效果
- com.android.support版本冲突解决方法
- [-Flutter趣玩篇-] 出神入化的Align+动画
- Hive Impala和Hue集成LDAP
- Android仿QQ分组实现二级菜单展示
- Android RecyclerView实现拼团倒计时列表实例代码