Win32開發入門(23):漸層顏色填充

來源:互聯網
上載者:User

GradientFill函數可以對特定的矩形地區或者三角形地區進行漸層顏色的填充。我們先來看看GradientFill函數到底長得什麼樣子,帥不帥。

BOOL GradientFill(    _In_  HDC hdc,    _In_  PTRIVERTEX pVertex,    _In_  ULONG nVertex,    _In_  PVOID pMesh,    _In_  ULONG nMesh,    _In_  ULONG ulMode  );

參數涉及結構體,於是有些人就開始感到痛苦了,調用函數一遇到結構體就會痛苦,而這個函數更痛苦,還要結構體的數組。

人家達摩祖師說了,痛苦是你的事,和API無關,它又不會因為你痛苦就變得簡單易用,該簡單的就簡單,該複雜的還是那麼複雜。我們來分析一個吧。首先第一個hdc就不用我說了,就是某個上下文,這個上下文你就理解為和誰有關,就是誰的控制代碼,控制代碼是一種資源標識,以前說過了,就好比社會安全號碼碼可以唯一標識你的身份一般(假身份證除外)。所以,這個hdc就是決定你要把漸層顏色畫到哪裡,畫到視窗上就是視窗的HDC,畫到案頭上就是案頭的HDC。

第二個參數,注意,是TRIVERTEX結構體的數組,數組中每一個TRIVERTEX結構體的變數指定一個漸層點的座標和顏色,顏色是ARGB四通道的,也就是說你可以玩透明效果,A,R,G,B每個值的範圍,MSDN上有說明是The color information of each channel is specified as a value from 0x0000 to 0xff00,這個範圍用十進位表示到底是多少,自己開啟“計算機”算一下就知道了,Win7以後的計算機程式嚴重強大,用來算命都可以,更別說進位換算了。

如果你寫C++程式多了,你就會猜到第三個參數是什麼了,凡是涉及到傳數組作為參數的,後面肯定要帶一個參數指明數組中有多少個元素。因為C語言的數組與託管語言不同,其實它是善變的,你定義了int a[3] ....,然後你賦值的時候,賦到a[5]都可以,雖然會報錯,但是你不妨試試,即使報錯,但是仍然可以取到值,因為記憶體分布是連續的。

不用說,nVertex 就是指明前面pVertex的個數;後面一個pMesh又是一個結構體的數組,但它是“雄雌同體”的,可以是GRADIENT_TRIANGLE結構體的數組,也可以是GRADIENT_RECT結構體的數組,具體得看你想怎麼填充,從名字就知道,GRADIENT_TRIANGLE是三角形填充,就是填充出來的地區是三角形的,這個應該好理解,就是你的內褲的形狀;而GRADIENT_RECT更好理解了,矩形,就是小學老師教你的長方形,正方形。

接著這個nMesh 參數你肯定知道了,不解釋了,你懂的。

最後一個參數就是指定怎麼填充,無非就是水平填過去,還是垂直填下來之類的。

那麼,TRIVERTEX數組與GRADIENT_RECT或GRADIENT_TRIANGLE數組是如何對應的呢?

GRADIENT_TRIANGLE是定義三角形的,要確定一個三角形就得要三個點,所以這些點就從TRIVERTEX數組來,每個TRIVERTEX變數定義一個點。

比如,TRIVERTEX數組有六個元素,就有六個點,剛好可以定義兩個三角形,GRADIENT_TRIANGLE中的三個成員就是三角形三個點的索引,這些索引就是TRIVERTEX數組中的元素的索引,六個點,索引是0,1,2,3,4,5,接著,如果第一個GRADIENT_TRIANGLE中的三個成員分別設為0,1,2,則六個點中前三個點就定義了第一個三角形,如果第二個GRADIENT_TRIANGLE的三個成員設定為3,4,5,那麼,六個點中的後三個點組成一個三角形。如果是1,4,5,就說明六個點中的第二個,第五個和第六個點將組成一個三角形。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。