您好,登錄后才能下訂單哦!
說(shuō)明
實(shí)現(xiàn)自定義的窗口繪制
例子
#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說(shuō)明
NC就是non client意思,非客戶區(qū)主要包括標(biāo)題欄,狀態(tài)欄,工具欄和邊框等區(qū)域,目前wxwidgets只是提供了EVT_NC_PAINT 唯一的一個(gè)非客戶區(qū)的事件,在MFC中,還有提供WM_NCLBUTTONDOWN WM_NCLBUTTONUP WM_NCMOUSEMOVE等事件操作,如果需要關(guān)聯(lián)這些事件,就必須要過(guò)濾該事件,或者在源碼中實(shí)現(xiàn)該類事件,目前可以通過(guò)覆蓋父類的MSWWindowProc函數(shù)實(shí)現(xiàn)。
目前需要拖動(dòng)邊框的時(shí)候,客戶區(qū)域不變,只是邊框變大,等到邊框拖動(dòng)到合適的地方,鼠標(biāo)彈起,客戶區(qū)域重繪,這個(gè)時(shí)候在WM_NCLBUTTONUP消息中重繪界面是否會(huì)避免閃爍??!
注意1:對(duì)于無(wú)法精確渲染圖形,使用圖像代替
說(shuō)明
例如渲染文本(翻轉(zhuǎn)。),實(shí)際上最后的符號(hào)應(yīng)該置頂,而不是最下面,但是制表符并沒(méi)有位于頂端的圓點(diǎn),這才是關(guān)鍵的問(wèn)題。使用DrawLabel或者DrawText都很難解決該問(wèn)題,如果引入圖片的話,就可以輕松的解決,該方法尤其是應(yīng)用在不規(guī)則的圖形渲染,減輕了不少的工作量
注意2:控件靠近窗口邊框閃爍問(wèn)題
當(dāng)控件放置在窗口邊框的附近,拖動(dòng)窗口的邊框進(jìn)行拉伸,非常明顯的看到控件的上半部接近邊框的地方,會(huì)發(fā)生閃爍,并且會(huì)看到圖像的錯(cuò)位,偶爾還會(huì)出現(xiàn)不和諧的色塊,這些現(xiàn)象僅僅出現(xiàn)在控件靠近邊框的位置上。當(dāng)邊框拉伸的時(shí)候,會(huì)重繪邊框,然后重新渲染控件,邊框是有一個(gè)寬度范圍,而不是一直線,因此靠近邊框的控件部分會(huì)首先被遮擋,重繪,然后控件重新刷新一遍,就看到閃爍的問(wèn)題。解決的方法就是講控件的位置稍微偏離邊框
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。