2013-04-16 171 views
1

我在學習MFC doc-view應用程序。我已經開始創建一個簡單的圖像查看器應用程序。爲此,我從CScrollView類派生了我的視圖類,並重寫了draw()函數。在MFC中使用OnPaint()函數

我想知道何時使用OnPaint()函數以及它如何與draw()函數相關。

回答

2

您不應該在同一視圖中同時需要OnPaintOnDraw函數。根據Microsoft's documentation

當視圖變得無效時,Windows向它發送一條WM_PAINT消息。視圖的OnPaint處理函數通過創建CPaintDC類的設備上下文對象並調用視圖的OnDraw成員函數來響應消息。您通常不必編寫重寫的OnPaint處理函數。

通過將繪圖代碼拆分爲自己的功能,該框架允許您重複使用它來繪製屏幕和打印。

+0

覆蓋'OnPaint'幾乎總是錯誤的意見 - 當它是正確的,它通常涉及先進的東西。例如,當您試圖執行雙重或三重緩衝時,您可能想要覆蓋這兩者,並且需要對設備上下文進行調整。如文檔所述,將繪圖保存在「OnDraw」中。 –

+0

感謝您的回覆! – dearvivekkumar

+0

在我的測試應用程序中,我重寫了Draw()函數,它正在加載圖像並繪製它。現在我想爲應用程序添加放大/縮小功能。爲此,我添加了工具欄按鈕。我沒有得到如何繼續這個。我必須在工具欄處理程序中做什麼。是否需要更改視圖類的CImage對象並稱爲更新窗口?這是否正確或有相同的更好的方法。 – dearvivekkumar