2012-06-09 62 views
0

我正在嘗試設置背景圖像中的MFC對話框,我成功地讓客戶端設備上下文,一邊寫CDC* pDC=GetDC(),或CClientDC dc(this),內部功能,如OnTimerOnPaintOnEraseBkgrd,但不是在一個新的聲明的函數(也CDialog類)。GetDC()或CClientDC dc(this)在非消息函數中不起作用?

我測試了這通過一個簡單的繪圖功能,如在這兩個情況下,繪製一個矩形,其結果是,如果我把它寫在OnTimerOnPaintOnEraseBkgrd,它工作得很好,但在我宣佈新的功能,它不」 t!

任何人都可以教我如何在非消息功能中獲得客戶端直流電?

回答

0

爲什麼用OnTimer繪圖?

您應該使用WM_PAINT(或在某些情況下WM_ERASEBKGND)消息來執行繪圖。 新聲明的功能是什麼?

您引用的所有名稱都是消息處理程序。這些函數被映射到消息映射,並在接收到消息時由框架調用它們。

要設置背景,您應該使用WM_ERASEBKGND。處理程序提供您應該用於繪製的設備上下文。

0

您的繪圖只能在OnPaint(或OnEraseBkgrd)中完成。如果您需要在對話框的其他地方提示繪圖,那麼您需要調用InvalidateRect(),隨後調用OnPaint()。當你調用OnPaint()時,你可以調用pDC-> GetClipBox()來獲取需要更新的矩形。

我認爲最好的方法來做你想做的事情就是在對話框類中存儲一個指向背景圖像的指針,然後當你想改變背景圖像時,設置位圖指針並調用InvalidateRect() 。您的OnPaint()函數將執行BitBlt實際繪製新的位圖。