wxClientDC wxPaintDC

说明

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

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

时间: 2024-10-17 17:11:24

wxClientDC wxPaintDC的相关文章

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

说明 使用wxMemoryDC渲染,可以减低闪烁,当渲染完成后,将内容,粘贴到目标DC上,其中需要借助wxBitmap作为画布.其效果相当于使用wxBufferedPaintDC,但是wxBufferedPaintDC仅限于在OnPaint函数中使用 代码 wxRect rect = GetClientRect(); int width = rect.GetWidth(); int height = rect.GetHeight(); wxMemoryDC memDC; wxBitmap bit

DrawEllipse 渲染椭圆

#include "wx/dcclient.h" wxPaintDC dc(this); wxColor color(15, 57, 121); wxBrush brush(color); dc.SetBrush(brush); dc.DrawEllipse(0, 0, width, height); dc.SetBrush(wxNullBrush); DrawEllipse渲染椭圆,该椭圆内切于矩形,当width等于height的时候,渲染圆形, 第一和第二参数是矩形的左上角的X轴和

wxIdleEvent 空闲事件处理

说明 当没有消息需要处理的情况下,可以通过定义OnIdle事件处理消息函数,来达到充分利用CPU的目的.当用户鼠标按下,执行大量的渲染,可能会出现屏幕的卡顿,如果让OnIdle函数处理,就可以避免出现这个问题 例子 #include "wx/event.h" void OnIdle(wxIdleEvent& event); EVT_IDLE(CFlightInstrumentPanel::OnIdle) void CFlightInstrumentPanel::OnIdle(

wxTimer 定时器

说明 OnIdle CPU空闲的情况下处理消息,如果需要定时功能,就需要使用定时器wxTimer 例子 #include "wx/timer.h" private: wxTimer *m_timer; #define TIMER_ID 1000 EVT_TIMER(TIMER_ID, CFlightInstrumentPanel::OnTimer) m_timer = new wxTimer(this, TIMER_ID); m_timer->Start(1000); void

OnPaint 自定义渲染

说明 实现自定义的窗口绘制 例子 #include "wx/event.h" void OnPaint(wxPaintEvent& event); EVT_PAINT(CFlightInstrumentPanel::OnPaint) void CFlightInstrumentPanel::OnPaint( wxPaintEvent& event ) { wxClientDC dc(this); wxPen pen(*wxRED,1); dc.SetPen(pen);

不允许使用不完整的类型

场景 使用wxPaintDC dc(this);的情况下,出现上述错误 解决 #include "wx/dcclient.h" 原理 需要包含类型的定义,添加相关的头文件

wxGraphicsContext,wxGraphicsPath怎么使用

wxGraphicsContext是wxWidgets高级绘图类. wx的手册上有个如下的Demo: void MyCanvas::OnPaint(wxPaintEvent &event) {         // Create paint DC         wxPaintDC dc(this);         // Create graphics context from it         wxGraphicsContext *gc = wxGraphicsContext::Crea

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

wxWidgets第十四课 wxTimer定时器

说明 OnIdle CPU空闲的情况下处理消息,如果需要定时功能,就需要使用定时器wxTimer 问题 比如定时器函数运行耗时10秒,定时的时间是10毫秒,是否是每隔10毫秒执行一次定时器函数,还是等待定时器函数运行结束,才开始重新计时 结果 在定时器函数中执行::Sleep(10000);等待10秒,发现实际上需要等待定时器函数执行结束,才开始重新计时.所以在如下的场景需要特别小心:需要定时读取数据,而读取数据之后,执行一大堆耗时的操作,这个时候,就需要启动线程去处理,而不能在定时器函数中完成