說明
實現自定義的窗口繪制
例子
#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:控件靠近窗口邊框閃爍問題
當控件放置在窗口邊框的附近,拖動窗口的邊框進行拉伸,非常明顯的看到控件的上半部接近邊框的地方,會發生閃爍,并且會看到圖像的錯位,偶爾還會出現不和諧的色塊,這些現象僅僅出現在控件靠近邊框的位置上。當邊框拉伸的時候,會重繪邊框,然后重新渲染控件,邊框是有一個寬度范圍,而不是一直線,因此靠近邊框的控件部分會首先被遮擋,重繪,然后控件重新刷新一遍,就看到閃爍的問題。解決的方法就是講控件的位置稍微偏離邊框
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。