十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
說明
為涇源等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及涇源網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、涇源網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
實現(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說明
NC就是non client意思,非客戶區(qū)主要包括標題欄,狀態(tài)欄,工具欄和邊框等區(qū)域,目前wxwidgets只是提供了EVT_NC_PAINT 唯一的一個非客戶區(qū)的事件,在MFC中,還有提供WM_NCLBUTTONDOWN WM_NCLBUTTONUP WM_NCMOUSEMOVE等事件操作,如果需要關(guān)聯(lián)這些事件,就必須要過濾該事件,或者在源碼中實現(xiàn)該類事件,目前可以通過覆蓋父類的MSWWindowProc函數(shù)實現(xiàn)。
目前需要拖動邊框的時候,客戶區(qū)域不變,只是邊框變大,等到邊框拖動到合適的地方,鼠標彈起,客戶區(qū)域重繪,這個時候在WM_NCLBUTTONUP消息中重繪界面是否會避免閃爍??!
注意1:對于無法精確渲染圖形,使用圖像代替
說明
例如渲染文本(翻轉(zhuǎn)。),實際上最后的符號應(yīng)該置頂,而不是最下面,但是制表符并沒有位于頂端的圓點,這才是關(guān)鍵的問題。使用DrawLabel或者DrawText都很難解決該問題,如果引入圖片的話,就可以輕松的解決,該方法尤其是應(yīng)用在不規(guī)則的圖形渲染,減輕了不少的工作量
注意2:控件靠近窗口邊框閃爍問題
當(dāng)控件放置在窗口邊框的附近,拖動窗口的邊框進行拉伸,非常明顯的看到控件的上半部接近邊框的地方,會發(fā)生閃爍,并且會看到圖像的錯位,偶爾還會出現(xiàn)不和諧的色塊,這些現(xiàn)象僅僅出現(xiàn)在控件靠近邊框的位置上。當(dāng)邊框拉伸的時候,會重繪邊框,然后重新渲染控件,邊框是有一個寬度范圍,而不是一直線,因此靠近邊框的控件部分會首先被遮擋,重繪,然后控件重新刷新一遍,就看到閃爍的問題。解決的方法就是講控件的位置稍微偏離邊框