Invalidate之后無法OnPaint


      最近遇到一個問題,糾結了很久也沒能找到問題所在。當時,開辟了一個線程用作刷新,但是每次執行到Flush最后的一句InvaliDate之后,始終沒有進入OnPaint。后來,終於找到原因,是因為InvaliDate函數雖然提交了銷毀了窗口的,提交重繪的消息,但是由於這個消息等級很低,OnPaint不能夠執行。之所以導致這個問題的出現,是由於線程運行的速度太快,還來不及處理,又進行Flush,結果導致一直在Flush,沒能夠OnPaint。這個時候,就無法進行刷新了,解決方案如下:
          直接獲得當前設備的DC,然后直接強制設備進行繪圖。   
   CDC *pDC = GetDC();
DrawBmp(STR_LOADING_BMP_PATH + strBmpPath, m_rect, FALSE,&m_selMemdc);
Invalidate(FALSE);
pDC->StretchBlt(0,0,m_rect.Width(), m_rect.Height(), &m_selMemdc, 0,0,
m_rect.Width(), m_rect.Height(), SRCCOPY);

這樣的話,就能夠處理始終不能夠OnPaint的問題了,因為我們避開了OnPaint的消息執行,而是直接讓Flush銷毀窗口,進行重繪。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com