原因

最近有个需求, 由于程序启动的时候, 初始化比较慢, 所以要加一个进度条,这个进度条又不能使用gui之类的控件, 因为还没有初始化完毕, 只能使用HDC直接在内存上画一个了

代码

废话不多说,直接上代码, 思路全部在代码的注释中
具体的函数意义不在讲解,大家可以自行网上搜索, 这里只介绍做出这个简单的黑白progress_bar的几个关键点

//初始的步骤, 源设备, 目标设备, ps等,直接搜索c++ hdc, 可以看到很详细的讲解, 这里这些公用的初始化步骤不在讲解
HDC hDC, hMemDc;
PAINTSTRUCT Ps;
hDC = BeginPaint(mViewHandle, &Ps);
hMemDc = CreateCompatibleDC(hDC);// 这个函数很关键, STRETCH_DELETESCANS这个意思是后面画的直接覆盖前面画的
// 因为我们要做progress bar,这个是必不可少的, 其他的参数自行搜索
SetStretchBltMode(hDC, STRETCH_DELETESCANS);// 这里可以传入初始化好的bitmap,但是我们画的是一个简单的黑白进度条, 就不需要了, 直接传递NULL
SelectObject(hMemDc, NULL);
// 最后一个参数BLACKNESS, 代表区域内用黑色填充
StretchBlt(hDC, 0, _top, bar_length, bar_width, hMemDc, bx, by, bar_length, bar_width, BLACKNESS);SelectObject(hMemDc, NULL);
// 这个参数WHITENESS, 代表区域内用白色填充,然后bar_length乘上进度的比例即可
StretchBlt(hDC, 0, _top, bar_length * mBarProress, bar_width, hMemDc, bx, by, bar_length, bar_width, WHITENESS);DeleteDC(hMemDc);
EndPaint(mViewHandle, &Ps);

上面的代码虽然可以实现效果, 但是有一点不好, 就职只能画出来黑白的矩形, 我们如果想定义五彩斑斓的颜色就不行了, 改进一下思路, 画一个矩形, 然后用颜色填充矩形, 只需要用如下代码替换掉上面的StretchBlt即可

RECT fore_rect = { left, top, right, bottom };
HBRUSH fore_brush = CreateSolidBrush(RGB(r, g, b));
FillRect(hDC, &fore_rect, fore_brush);
DeleteObject(fore_brush);

c++ HDC 写一个简单的不需要bmp图片的progressbar相关推荐

  1. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  2. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  3. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  4. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  5. 用java写一个简单的区块链(下)

    用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...

  6. 怎样用java写一个简单的文件复制程序

    怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...

  7. 给 asp.net core 写一个简单的健康检查

    给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...

  8. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  9. 如何写一个简单的node.js C 扩展

    node 是由 c 编写的,核心的 node 模块也都是由 c 代码来实现,所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口. 如果大家对于 require 函数的描述还有印象的 ...

  10. 用java写一个日历_使用JAVA写一个简单的日历

    JAVA写一个简单的日历 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDa ...

最新文章

  1. notepad++ 换行技巧 log换行
  2. 70后、80后、90后程序员区别极端版
  3. WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用
  4. Linux环境编程 用户层定时器使用一 timerfd的使用
  5. PTA 09-排序3 Insertion or Heap Sort (25分)
  6. NAB 2019见闻:CAE视频编码与QoE
  7. fork、vfork、wait、waitpid
  8. 45K!拿下 AI 技术岗,这些知识点全考了!
  9. SpringBoot 自动配置原理
  10. 一直都说字节跳动有点难,这次体会了,而且被怼了~
  11. IIS7.5使用web.config设置伪静态的二种方法(转)
  12. 免费smtp服务器地址参数
  13. 蓝牙HC05主从设置连接说明
  14. 关于R中的统计量----t检验
  15. win10 计算机重启,win10电脑自动重启
  16. 【转】艺术设计、数字媒体、环艺、影视动画、摄影、广编专业…等…视频、教程、资讯、图库、作品汇总大全
  17. pytorch手写数字识别【源码实现-小清新版】
  18. python把PDF转换成图片
  19. 主动降噪在服务器中的应用,AirPods Pro主动降噪功能有多大用处?主动降噪耳机适用范围详解!...
  20. 读书笔记第三集--转换输入日期的格式

热门文章

  1. 国家取消职称英语与计算机,全国职称英语考试取消
  2. pytorch之transforms
  3. YYC蜻蜓S系统v1.9版本更新-增加任务功能-增加观看记录-下载记录-消息提醒等
  4. 什么是Rootkit病毒
  5. Python黑客攻防(十六)编写Dos脚本,进行简单攻击演示
  6. Binary XML file line Error inflating class解决办法以及自定义view的基本实现
  7. 网络知识-02 物理层
  8. UWB技术的工作原理
  9. macbook air上安装ubuntu双系统
  10. linux如何将百分比转换为数字,Linux_sql 自定义百分比转换小数函数代码,复制代码 代码如下: --CAST 和 CO - phpStudy...