溫馨提示×

溫馨提示×

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

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

wxWidgets第五課 EVT_SIZE窗口修改事件

發(fā)布時(shí)間:2020-08-19 14:22:58 來源:網(wǎng)絡(luò) 閱讀:1830 作者:fengyuzaitu 欄目:系統(tǒng)運(yùn)維

說明

    當(dāng)父窗口的大小發(fā)生改變的時(shí)候,父窗口的OnSize函數(shù)優(yōu)先調(diào)用,然后遍歷子窗口的OnSize函數(shù)。在自定義控件,并且實(shí)現(xiàn)隨著父窗口的大小,進(jìn)行伸縮變換,可以創(chuàng)建一個(gè)比例尺因子,根據(jù)父窗口當(dāng)前的大小,在父窗口的OnSize函數(shù)中調(diào)用子控件的兩個(gè)方法進(jìn)行子控件大小和位置的調(diào)整:

SetPosition設(shè)置子控件的位置

SetClientSize設(shè)置子控件的大小


問題

為了能夠?qū)崿F(xiàn)界面的拉伸,當(dāng)窗口發(fā)生改變的時(shí)候,發(fā)出重繪事件(OnSize會(huì)調(diào)用OnPaint)進(jìn)行界面的刷新,可以看到在快速伸縮窗口的情況下,非常明顯看到閃爍的情況。


解析

在系統(tǒng)設(shè)置最佳的外觀性能要求,拉伸界面的邊框,會(huì)出現(xiàn)虛擬邊框,等到鼠標(biāo)彈起的時(shí)候,才會(huì)重新渲染界面,避免了閃爍。在其他的外觀選項(xiàng)下,拉伸界面邊框的時(shí)候,實(shí)時(shí)的渲染,會(huì)產(chǎn)生閃爍現(xiàn)象


真正自定義渲染

目前想到的一個(gè)解決方案:當(dāng)鼠標(biāo)按下拖動(dòng)窗口的時(shí)候,并不進(jìn)行窗口的重繪,而是等到鼠標(biāo)彈起的時(shí)候,才進(jìn)行重繪,這里就涉及到一個(gè)難點(diǎn),該在什么地方關(guān)聯(lián)鼠標(biāo)彈起事件EVT_LEFT_UP,并且需要實(shí)時(shí)控制邊框的渲染



注意

    當(dāng)父控件銷毀的時(shí)候,也會(huì)調(diào)用子控件的析構(gòu)函數(shù),對子控件進(jìn)行銷毀


兩次進(jìn)入OnSize函數(shù)的問題

    啟動(dòng)程序,在準(zhǔn)備進(jìn)入到主界面,渲染自定義的控件時(shí)候,檢測到有兩次進(jìn)入到OnSize函數(shù),導(dǎo)致界面在進(jìn)入的時(shí)候,渲染了兩次,目前不清楚是什么地方發(fā)送了兩次WM_ONSIZE消息,導(dǎo)致該問題


懷疑方向

    1 是否是設(shè)置了父窗口指針:證實(shí)必須提供一個(gè)父窗口的指針

    2 是否是設(shè)置了擴(kuò)展屬性WX_EXPAND:沒有理由根據(jù)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI