2011-12-20 201 views
1

雖然問題標題似乎愚蠢,這不完全是我需要的。要用顏色填充整個區域,需要選擇合適的筆刷 - 這很簡單。但我想用不同的顏色填充上半部分,而下半部分用不同的顏色填充。如果是正常(不是圓形)的矩形,我可以繪製兩個矩形(使用不同的畫筆)。但是對於RoundRect,我不知道如何去做。GDI:如何用顏色填充RoundRect?

以下是我需要的:我用RoundRect在圖形可視化中繪製每個節點,並且這些節點應該有幾個應該填充不同顏色的隔間(單元格)。

我希望你明白我的意思:)

+1

使用截斷。 IntersectClipRect()會起作用。或者使用Paths,FillPath將起作用。 – 2011-12-20 01:42:57

+0

我會說裁剪將是最容易的事情。將該區域分成兩半,並在你的'WM_PAINT'處理程序中設置一個剪切矩形。不知道漢斯爲什麼不把它作爲答案。 – 2011-12-20 05:06:51

回答

3

如果必須使用傳統的GDI而不是GDI +的想法,在這裏我給你寫了一個函數來得出這樣的(小區),你需要我希望它是你所期望的!

的基本思想是創建上部和下部區域(它們都是充分重疊圓角矩形,則每個具有其一半之一切斷)

Diff operation to show how to created the upper have of the intended "cell"

我已經準備由上述中,以展示細胞如何生產。它僅適用於上層,但你應該有創建下層的想法。

這裏是一個包裝函數來創建你所需要的細胞:

void DrawCell(HDC& hdc, const RECT& rcTarget,const HBRUSH& hbrUpper, const HBRUSH& hbrLower) 
    { 

     HRGN hRgnUpper = CreateRoundRectRgn(rcTarget.left, rcTarget.top, rcTarget.right, rcTarget.bottom, 42, 38);  
     HRGN hRgnLower = CreateRoundRectRgn(rcTarget.left, rcTarget.top, rcTarget.right, rcTarget.bottom, 42, 38); 

     HRGN hRgnCutFromUpper = CreateRectRgn(rcTarget.left, rcTarget.top + ((rcTarget.bottom - rcTarget.top)/2), rcTarget.right, rcTarget.bottom);  
     HRGN hRgnCutFromLower = CreateRectRgn(rcTarget.left, rcTarget.top , rcTarget.right, rcTarget.bottom - ((rcTarget.bottom - rcTarget.top)/2));  

     CombineRgn(hRgnUpper, hRgnUpper,hRgnCutFromUpper, RGN_DIFF); 
     CombineRgn(hRgnLower, hRgnLower,hRgnCutFromLower, RGN_DIFF); 


     FillRgn(hdc, hRgnUpper, hbrUpper);  
     FillRgn(hdc, hRgnLower, hbrLower); 

     DeleteObject(hRgnCutFromLower); 
     DeleteObject(hRgnCutFromUpper); 
     DeleteObject(hRgnLower); 
     DeleteObject(hRgnUpper); 



    } 

呼叫從自己的WM_PAINT處理程序中此功能:

 RECT rcTarget; 
    rcTarget.left = 20; 
    rcTarget.top = 20; 
    rcTarget.right = 275; 
    rcTarget.bottom = 188; 

    HBRUSH hRed = CreateSolidBrush(RGB(255, 0, 0)); 
    HBRUSH hGreen = CreateSolidBrush(RGB(0, 255, 0)); 

    DrawCell(hdc, rcTarget, hRed, hGreen);