A. 用VS2010MFC製作簡易畫圖程序,為何畫出來的矩形是重影,如何解決拖動工具欄以後,圖片就自動
是這樣的,MFC創建的窗口,在接收到「重繪」消息的時候會擦除窗口的內容並繪制控制項的圖案(這意味著如果你不是在重繪消息的處理函數中繪制圖形,那麼圖形被擦除後也不會再恢復),而在其它情況下窗口是不會擦除內容並重繪的。所以如果你只是在滑鼠拖拽的事件中繪制矩形的話,繪制新矩形之前舊的矩形是不會被擦掉的。然而,也不能簡單地使窗口重繪來到達目的,因為那樣會導致之前已經繪制好的所有圖形被擦掉,最後窗口只剩下最新繪制的矩形。要達到畫圖的目的,你得將已繪制好的圖案儲存在內存中(以點陣圖的形式),而正在繪制的矩形則只在窗口上繪制,不在內存中的點陣圖中繪制,而當當前的圖形完全確定(即松開滑鼠)時,再將它繪制入內存中的點陣圖。這樣處理後,就可以在滑鼠拖動過程中(需要實時刪除之前的圖形)放心地使窗口重繪(這會使之前的圖像被擦除,不會留下痕跡),然後在重繪消息處理函數中(擦除過程由MFC框架自動完成,你的處理函數會在擦除後被調用,負責繪制圖案)將內存中的圖案復制到窗口上,這使得之前已經確定的圖案重新被顯示。最後再向窗口中繪制當前還未確定的圖形。至於具體實現,主要途徑就是創建內存畫布,網頁搜索「MFC雙緩沖繪圖」,你會得到通過暫時在內存中繪圖,最後再向屏幕復制圖案以防止重繪時窗口閃爍的方法,在它的基礎上稍加改動(例如將點陣圖對象從臨時改為全局以保留圖像,請結合自己的思考修改其它部分)即可實現畫圖的功能。過程中請務必記住,窗口上的圖像很容易就會因遮擋或重繪而消失,而且不方便針對性地刪除某一個與其它圖案重疊的圖形,所以需要在內存中保存你希望保存的圖像。