wxWidgets第十三课 wxMemoryDC 使用缓存DC渲染

简介:

说明

    使用wxMemoryDC渲染,可以减低闪烁,当渲染完成后,将内容,粘贴到目标DC上,其中需要借助wxBitmap作为画布。其效果相当于使用wxBufferedPaintDC,但是wxBufferedPaintDC仅限于在OnPaint函数中使用


代码

wxRect rect = GetClientRect();

int width = rect.GetWidth();

int height = rect.GetHeight();

wxMemoryDC memDC;

wxBitmap bitmap(width, height);

memDC.SelectObject(bitmap);

memDC.SetBackground(*wxWHITE_BRUSH);

memDC.Clear();

memDC.SetPen(*wxRED_PEN);

memDC.SetBrush(*wxRED_BRUSH);

memDC.DrawRectangle((wxRect(0, 10, width, 100)));

wxClientDC destDC(this);

destDC.Blit(0, 0,

bitmap.GetWidth(), bitmap.GetHeight(),

&memDC,

0, 0,

wxCOPY,

true);

memDC.SelectObject(wxNullBitmap);


提醒

    默认情况下,memDC背景是黑色的



wxScreenDC 屏幕设备环境

说明

    wxScreenDC 支持在程序窗口之外绘制图形,在其他的DC中渲染,针对的是程序的客户区,而不是屏幕,为了能够将点映射到屏幕上需要使用ClientToScreen函数,进行坐标的转换


代码

wxPoint pt = ClientToScreen(GetPosition());

pt.x = pt.x + GetSize().GetWidth();

pt.y = pt.y + GetSize().GetHeight();

wxSize size(100, 100);

wxRect rect(pt, size);

wxScreenDC dc;

dc.SetPen(wxPen(*wxLIGHT_GREY, 2, wxSOLID));

//dc.SetBrush(*wxTRANSPARENT_BRUSH);

dc.SetBrush(wxBrush(*wxBLACK));

dc.DrawRectangle(rect);



wxClientDC wxPaintDC


说明

    wxClientDC 允许在OnPaint事件之外访问客户区的设备环境句柄,从擦除背景事件中可以了解到,wxPaintDC在OnPaint事件


内部访问客户区的设备环境句柄

    在这里需要进行客户区的说明:对于一个控件而言,客户区的大小就是控件自身的大小,如果自定义了OnPaint事件,都只是在控件区域内进行渲染。对于窗口而言,客户区不包括标题栏,菜单栏,状态栏和工具栏,当然也不包括边框(这一点很重要,对于随时拖动边框放缩窗口)



     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1955400,如需转载请自行联系原作者






相关文章
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
95 1
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
51 2
数据的存储--Redis缓存存储(二)
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
2月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
199 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
|
27天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
28天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
1月前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
195 22
|
21天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
36 5
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
162 7