1. 程式人生 > >FillRect、FrameRect與Rectangle矩形繪製函式使用對比分析

FillRect、FrameRect與Rectangle矩形繪製函式使用對比分析


  在Windows中,在GDI函式中傳入的引數指定的矩形大小,起始的座標會繪畫,而結束的座標則不會畫到, 也就是至於結束座標的前面一個畫素。所以,從圖上可以看到,我們繪製一個寬80高50的矩形,實際上,我們 繪製的結束xy座標為(79,49),而不是(80,50),而這樣剛好達到了80x50個畫素的大小。只是我們需要清楚這些 細節,才好讓我們做繪圖是可以很精確,不會再被這些細節問題煩擾。


  Rectangle函式的大小是包含了邊框和內部填充在內的。FrameRect只包含邊框線,所以,指定的座標就是 邊框線所佔據的位置。FillRect則只包含內部的填充部分。所以,FillRect指定的座標就是內部填充部分的起 始座標。


  基本上GDI矩形繪圖模型都是起始座標會在繪製的範圍內,結束的座標不再繪圖範圍內。所以,我們在交錯 使用這三個函式時,一定要注意這些細節,才會讓繪製的圖形能夠很精確,以達到我們的目的。而不是靠不斷 的該引數瞎試。程式設計中是一個實踐的藝術,很多時候,你確實可以不用很清楚每一個細節,就可以通過試驗而 得到想要的結果。但是這不是推薦的做法。如果能夠把握細節而精確,就不要去試驗猜測。


  不過我們的細節掌握,還是得用程式去驗證。下面就是我測試寫的一個程式,即在客戶區隔50個畫素畫一 個格子,然後滑鼠左鍵單擊則將對應的格子填充成紅色,右擊則恢復為白色。單擊的格子的矩形所在的位置, 先除以50得到行數和列數,然後再乘以50還原出一行一列的起始座標,從而計算出矩形的起點,然後每一個矩 形是50x50,所以矩形的右下角座標也就可以通過左上角(起始點)的座標計算得到。


  因為我們是填充矩形,不是將矩形完全覆蓋,所以要將起點xy都加1,結束點xy都減一,這樣就是填充內部 的48x48個畫素,這樣不會覆蓋邊框線。當然,瞭解了上述的矩形模型後,你想怎麼玩就怎麼玩。


  而通過右擊填充白色來恢復格子,當然此時的填充的位置和左鍵單擊時一樣的,只是顏色不一樣。不過我 用了FrameRect,這樣你可以看到填充的是一個邊框而已,這裡主要就是讓你熟悉一下FrameRect函式罷了。推薦 使用FillRect,因為和著色一致,最方便。


  不過你也可以使用Rectangle函式來恢復,不過你得處理一下邊框線的顏色,因為預設的是黑色的,所以因 此顯得麻煩點。對於這個程式的填充應用,最好的就是FillRect函數了。這也是Rectangle=FillRect +FrameRect,即Rectangle函式被分解成兩個函式的原因。分解的兩個函式書上講的少,所以特此分析了一下。