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

说明

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


代码

wxRect矩形=GetClientRect ();

int宽度=rect.GetWidth ();

int高度=rect.GetHeight ();

wxMemoryDC memDC;

wxBitmap位图(宽度、高度);

memDC.SelectObject(位图),

memDC.SetBackground (* wxWHITE_BRUSH);

memDC.Clear ();

memDC.SetPen (* wxRED_PEN);

memDC.SetBrush (* wxRED_BRUSH);

memDC。DrawRectangle (wxRect(0, 10、宽度,100))),

wxClientDC  destDC(这);

destDC。位块传输(0,0,

bitmap.GetWidth (), bitmap.GetHeight ()

, memDC,

0, 0,

wxCOPY,

真的);

memDC.SelectObject (wxNullBitmap);


提醒

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



wxScreenDC屏幕设备环境

说明

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


代码

wxPoint pt=ClientToScreen (GetPosition ());

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

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

wxSize大小(100、100);

wxRect矩形(pt、大小);

wxScreenDC直流;

直流。SetPen (wxPen (* wxLIGHT_GREY 2 wxSOLID));

//dc.SetBrush (* wxTRANSPARENT_BRUSH);

dc.SetBrush (wxBrush (* wxBLACK);

dc.DrawRectangle(矩形);



wxClientDC wxPaintDC


说明

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


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

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


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