wxWidgets第十一课 自定义控件渲染

简介:

说明

    实现自定义的窗口绘制


例子


#include "wx/event.h"

#include "wx/dcclient.h"


void OnPaint(wxPaintEvent& event);


EVT_PAINT(CFlightInstrumentPanel::OnPaint)


void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event )

{

    wxClientDC dc(this);

    dc.SetBackground(*wxWHITE_BRUSH);//清除背景颜色

    dc.Clear();

    wxPen pen(*wxRED,1);

    dc.SetPen(pen);

    dc.DrawRectangle(0, 0, 200, 300);

    dc.SetPen(wxNullPen);

}


EVT_NC_PAINT说明

    NC就是non client意思,非客户区主要包括标题栏,状态栏,工具栏和边框等区域,目前wxwidgets只是提供了EVT_NC_PAINT 唯一的一个非客户区的事件,在MFC中,还有提供WM_NCLBUTTONDOWN WM_NCLBUTTONUP WM_NCMOUSEMOVE等事件操作,如果需要关联这些事件,就必须要过滤该事件,或者在源码中实现该类事件,目前可以通过覆盖父类的MSWWindowProc函数实现。

    目前需要拖动边框的时候,客户区域不变,只是边框变大,等到边框拖动到合适的地方,鼠标弹起,客户区域重绘,这个时候在WM_NCLBUTTONUP消息中重绘界面是否会避免闪烁!!


注意1:对于无法精确渲染图形,使用图像代替

说明

    例如渲染文本(翻转。),实际上最后的符号应该置顶,而不是最下面,但是制表符并没有位于顶端的圆点,这才是关键的问题。使用DrawLabel或者DrawText都很难解决该问题,如果引入图片的话,就可以轻松的解决,该方法尤其是应用在不规则的图形渲染,减轻了不少的工作量


注意2:控件靠近窗口边框闪烁问题

当控件放置在窗口边框的附近,拖动窗口的边框进行拉伸,非常明显的看到控件的上半部接近边框的地方,会发生闪烁,并且会看到图像的错位,偶尔还会出现不和谐的色块,这些现象仅仅出现在控件靠近边框的位置上。当边框拉伸的时候,会重绘边框,然后重新渲染控件,边框是有一个宽度范围,而不是一直线,因此靠近边框的控件部分会首先被遮挡,重绘,然后控件重新刷新一遍,就看到闪烁的问题。解决的方法就是讲控件的位置稍微偏离边框



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





相关文章
|
6月前
|
存储 开发工具 索引
游戏编程之十七 生成简单的动画
游戏编程之十七 生成简单的动画
31 0
|
5月前
《QT从基础到进阶·二十七》进度条QProgressBar
《QT从基础到进阶·二十七》进度条QProgressBar
47 0
|
6月前
|
缓存 自然语言处理 BI
CocosCreator3.8研究笔记(二十)CocosCreator UI组件(四)
CocosCreator3.8研究笔记(二十)CocosCreator UI组件(四)
105 0
|
6月前
|
Android开发 iOS开发 容器
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)(2)
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)
158 0
|
6月前
|
JavaScript 数据安全/隐私保护 Android开发
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)(1)
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)
103 0
|
6月前
|
前端开发 Android开发
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)(3)
CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)
|
6月前
|
uml
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解(1)
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解
192 0
|
6月前
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解(3)
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解
|
6月前
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解(2)
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解
|
6月前
|
缓存 前端开发 算法
CocosCreator3.8研究笔记(十六)CocosCreator 2D对象
CocosCreator3.8研究笔记(十六)CocosCreator 2D对象
114 0