您好,登錄后才能下訂單哦!
說明
當父窗口的大小發生改變的時候,父窗口的OnSize函數優先調用,然后遍歷子窗口的OnSize函數。在自定義控件,并且實現隨著父窗口的大小,進行伸縮變換,可以創建一個比例尺因子,根據父窗口當前的大小,在父窗口的OnSize函數中調用子控件的兩個方法進行子控件大小和位置的調整:
SetPosition設置子控件的位置
SetClientSize設置子控件的大小
問題
為了能夠實現界面的拉伸,當窗口發生改變的時候,發出重繪事件(OnSize會調用OnPaint)進行界面的刷新,可以看到在快速伸縮窗口的情況下,非常明顯看到閃爍的情況。
解析
在系統設置最佳的外觀性能要求,拉伸界面的邊框,會出現虛擬邊框,等到鼠標彈起的時候,才會重新渲染界面,避免了閃爍。在其他的外觀選項下,拉伸界面邊框的時候,實時的渲染,會產生閃爍現象
真正自定義渲染
目前想到的一個解決方案:當鼠標按下拖動窗口的時候,并不進行窗口的重繪,而是等到鼠標彈起的時候,才進行重繪,這里就涉及到一個難點,該在什么地方關聯鼠標彈起事件EVT_LEFT_UP,并且需要實時控制邊框的渲染
注意
當父控件銷毀的時候,也會調用子控件的析構函數,對子控件進行銷毀
兩次進入OnSize函數的問題
啟動程序,在準備進入到主界面,渲染自定義的控件時候,檢測到有兩次進入到OnSize函數,導致界面在進入的時候,渲染了兩次,目前不清楚是什么地方發送了兩次WM_ONSIZE消息,導致該問題
懷疑方向
1 是否是設置了父窗口指針:證實必須提供一個父窗口的指針
2 是否是設置了擴展屬性WX_EXPAND:沒有理由根據
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。