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事件,都只是在控件區域內進行渲染。對於窗口而言,客戶區不包括標題欄,菜單欄,狀態欄和工具欄,當然也不包括邊框(這一點很重要,對於隨時拖動邊框放縮窗口)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章