模拟Vista侧边栏的CPU仪表盘(VC6)

简介: 在Vista系统的侧边栏有很多好用的桌面小工具,不过长期以来最吸引我的还是那个用显示的CPU和存储占用的指针仪表盘,一直觉得这是一个很不错的创意控件。所以现在我用VC6来写一个很小的对话框程序模拟这个控件。

            在Vista系统的侧边栏有很多好用的桌面小工具,不过长期以来最吸引我的还是那个用显示的CPU和存储占用的指针仪表盘,一直觉得这是一个很不错的创意控件。所以现在我用VC6来写一个很小的对话框程序模拟这个控件。作为Demo,我只是做了显示CPU的,效果如下所示:

           

            如何查询CPU占用率,这是一个比较少用到的需求(我在这里不打算详细讲解它),但对我们的Demo却是必须的,这个代码是我引用了别人的范例代码,同时为了使他能够为我所用,我适当修改了它,把它改写为两个函数。使用时只需要调用就可以得到CPU占用百分比,具体代码参见IdleInfo.h。

            使用方法时,首先调用 InitCommonData 函数,主要用于查询 NtQuerySystemInformation 函数的地址,以及获取CPU个数。

            然后我们就可以随时调用 GetCPUPercent 函数,得到的返回值就是CPU占用百分比。

 

            下面我们重点在于如何做这样一个仪表盘的效果。为此,观察控件可知,动态部分主要是指针,和下面的信息文本,其他是不变化的。所以我们首先把静态的背景制作成位图资源。并在 WM_ERASEBKGND 消息中把这个位图复制到相应的DC。

            下一步是在 WM_PAINT 消息中,绘制动态部分:指针和信息。

            对于指针的绘制,我这里采用了一种很粗糙的手法(当然和VISTA中的那个效果相差不少),即把指针用一个五边多边形近似模拟。然后绘制时,动态计算出指针的轮廓。同时,对于指针的绘制,可以有两种视觉效果。一种是比较简单的仅仅在适当位置绘制指针,但视觉上会感觉指针在“突变”。另一种是更友好也更接近现实效果的做法,即令指针平滑移动。这里当然我采用第二种方法。

            为此,我需要两个定时器(一个用于查询CPU,一个用于移动指针),两个属性(一个是当前指针指示值,一个是指针最终需要到达的指示值)来协助完成。相关代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif CODE_窗口过程中的WM_TIMER代码片段
    case WM_TIMER:
        
switch(wParam)
        {
            
//查询CPU
        case TIMER_GETINFO:
            
//查询新的CPU占用
            m_destVal = GetCPUPercent();
            
//int temp = m_val >= 100? 100 : m_val+2;
            if(m_val != m_destVal)
            {
                
//更新显示值
                InvalidateRect(hDlg, &m_InfoRect, TRUE);
                
//平滑指针
                SetTimer(hDlg, TIMER_MOVING, 20, NULL);
            }
            
break;

            
//平滑指针定时器的处理
        case TIMER_MOVING:
            
//是否已经移动完成
            if(m_val == m_destVal)
            {
                KillTimer(hDlg, TIMER_MOVING);
                
break;
            }
            
else if(m_val < m_destVal) m_val++;
            
else m_val--;
            UpdatePointer(m_val, 
&rc);
            InvalidateRect(hDlg, 
&rc, TRUE);
            
break;
        }
        
return TRUE;

 

            最后,是源代码下载链接:

            http://files.cnblogs.com/hoodlum1980/CpuMeter.rar

            总结:在效果上我们的窗口边缘还很生硬,指针也很简陋,和vista侧边栏窗口的那种显示效果当然还有很大差距,但控件的效果是基本一致的。虽然很简陋,但该例子还是能够完整说明一些控件的基本绘制原则,例如如何防止闪烁等。

            

目录
相关文章
|
6月前
|
人工智能 运维 监控
框架筑基・产品落地:制造业工业 AI 交付全新模式
JBoltAI是专为制造业打造的企业级AI底层框架,破解工业AI交付周期长、落地难、效果不可控等痛点。依托其稳定底座,孵化出VisuCAD图纸智能处理与SOP数智化作业两大标准化产品,支持私有部署、CAD解析、多模态处理与流程编排,实现“快速原型—极速落地—按需迭代”的新型交付模式。(239字)
280 3
|
5月前
|
缓存 并行计算 数据可视化
C++在量化交易回测系统中的运用(性能与正确性并重)
量化交易策略在实盘前,必须用历史数据验证其表现(收益、最大回撤、夏普比率)。回测系统接收数年的tick级数据(每秒数千笔),逐笔模拟订单成交,统计指标。
351 0
|
人工智能 监控 搜索推荐
给RAG打分:小白也能懂的AI系统评测全攻略
RAG系统评估听起来高深,其实跟我们生活中的'尝鲜评测'没啥两样!本文用轻松幽默的方式,带你从检索质量、生成质量到用户体验,全方位掌握如何科学评测RAG系统,避免踩坑,让你的AI应用又快又准。#RAG技术 #AI评估 #信息检索 #大模型 #数据科学
716 9
|
9月前
|
SQL 数据可视化 关系型数据库
Quick BI使用案例10:用组合图实现帕累托分析,精准定位高利润区域
本文详解帕累托分析实战:通过自定义SQL(含窗口函数)计算区域利润累计占比,并配置组合图直观识别贡献80%利润的关键区域,助力精准决策与资源优化。
|
10月前
|
缓存 前端开发 JavaScript
Spring Boot 中使用 Thymeleaf:从页面渲染到数据绑定
Thymeleaf是Spring Boot推荐的模板引擎,HTML即原型又可动态渲染,提升前后端协作效率。支持页面跳转、数据绑定、列表遍历、条件显示等常用功能,开发时关闭缓存可实时预览。静态页可直接浏览,后端注入数据无缝衔接,助力高效开发。
|
数据采集 JSON 算法
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫——基于JWT的模拟登录爬取实战
701 1
Python爬虫——基于JWT的模拟登录爬取实战
|
人工智能 自然语言处理 API
全球化3.0时代:如何用技术破解跨境电商的“多语言+多货币”魔咒?
本文详解从0到1构建高并发跨境电商代购系统的技术方案,涵盖微服务架构设计、数据库优化、高并发处理、商品采集、订单处理、全球物流追踪等核心技术,结合实战案例与未来趋势,助力企业打造支持10万级订单/秒的弹性系统,适应全球化与数字化贸易需求。
|
人工智能 供应链 数据可视化
数字化时代企业怎么做,Quick BI 告诉你
随着企业数字化转型的加速,数据对于企业的用途愈发重要。在过去,数据对于企业来说,可能只是代表过去的战绩,对未来的影响力,企业并没有发掘。而在数字化进程中,数据已成为企业发展的核心战略资产,通过多维赋能推动企业转型升级。数据不仅为精准决策提供科学依据,优化运营效率与资源配置,还能深度挖掘客户需求以驱动个性化服务创新;同时,数据驱动的业务模式重构了产品研发、供应链管理和市场预测体系,助力企业形成差异化竞争优势。
|
域名解析 存储 缓存
计算机网络选择题填空题判断题整理
计算机网络选择题填空题判断题整理
计算机网络选择题填空题判断题整理
|
存储 数据采集 自然语言处理
使用大模型时,该如何避免虚假信息的生成和使用?
使用大模型时,该如何避免虚假信息的生成和使用?
1454 1

热门文章

最新文章