溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

wxWidgets第十一課 自定義控件渲染

發布時間:2020-06-22 19:39:26 來源:網絡 閱讀:672 作者:fengyuzaitu 欄目:系統運維

說明

    實現自定義的窗口繪制


例子


#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:控件靠近窗口邊框閃爍問題

當控件放置在窗口邊框的附近,拖動窗口的邊框進行拉伸,非常明顯的看到控件的上半部接近邊框的地方,會發生閃爍,并且會看到圖像的錯位,偶爾還會出現不和諧的色塊,這些現象僅僅出現在控件靠近邊框的位置上。當邊框拉伸的時候,會重繪邊框,然后重新渲染控件,邊框是有一個寬度范圍,而不是一直線,因此靠近邊框的控件部分會首先被遮擋,重繪,然后控件重新刷新一遍,就看到閃爍的問題。解決的方法就是講控件的位置稍微偏離邊框


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女