程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 實現窗體的漸變背景

實現窗體的漸變背景

編輯:vc教程

A:關鍵所在

漸變圖形是一種特殊的圖形,它從窗體的一端開始移動,同時顏色緩慢變化,達到窗體的另一端,但圖形已經變為另一種顏色。

這種奇特的視覺效果制作起來相當簡單,只需將屏幕分成許多行,每一行顯示不同的顏色就可以了。漸變圖形可以有許多種形式,有圓形漸變、矩形漸變、對角漸變等多種顯示效果。要顯示漸變,需使用到RGB 宏,每次使顏色值的各顏色分量稍有變化。

B:實現與應用

選擇菜單 File | New Application,創建一個新的項目文件。在窗體 Form1 上放置一個 TColorDialog 控件,然後切換到Unit1.h,在 TForm1 的 private 部分加入兩個變量的定義,分別用於設置起始顏色和終止顏色。

private: // User declarations

TColor StartColor,EndColor;

然後雙擊窗體,創建窗體的 OnCreate 事件處理函數,在其中加入如下代碼,用於讓用戶選擇起始顏色和結束顏色。

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  if(ColorDialog1->Execute())
   StartColor=ColorDialog1->Color;
  if(ColorDialog1->Execute())
   EndColor=ColorDialog1->Color;
}
//---------------------------------------------------------------------------

最後創建窗體 Form1 的 OnPaint 事件處理函數,在其中加入如下代碼,用稍有變化的顏色值畫一系列的垂直線,達到漸變的效果。

//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  float pwidth;
  int redstart,greenstart,bluestart,redend,greenend, blueend;
  float redinc,greeninc,blueinc;
  pwidth=float(Width);
  redstart=GetRValue(StartColor);
  greenstart=GetGValue(StartColor);
  bluestart=GetBValue(StartColor);
  redend=GetRValue(EndColor);
  greenend=GetGValue(EndColor);
  blueend=GetBValue(EndColor);
  redinc=(redend-redstart)/pwidth;
  greeninc=(greenend-greenstart)/pwidth;
  blueinc=(blueend-bluestart)/pwidth;
  for(int i=0;i<Width;i++)
  {
   Canvas->Pen->Color=TColor(RGB(redstart+int(redinc*i),
   greenstart+int(greeninc*i),
   bluestart+int(blueinc*i)));
   Canvas->MoveTo(i,0);
   Canvas->LineTo(i,Height);
  }
}
//---------------------------------------------------------------------------

C:專家點評

程序中設漸變開始的顏色為 StartColor,結束的顏色為 EndColor。利用GetRValue、GetGValue、GetBValue 函數分別獲得開始顏色的紅、綠、藍三原色分量 redstart greenstart bluestart 和結束顏色的三原色紅、綠、藍分量 redend greenend blueend。如果矩形的寬度為 pwidth 象素,則每次變化的各顏色分量值應分別為(redend-redstart)/pwidth、(greenend-greenstart)/pwidth、(blueend-bluestart)/pwidth,最後寫一個循環,畫一系列直線。

這裡介紹的僅僅是顏色漸變的一種形式,讀者完全可以參照其實現方法,改變數學運算,實現如“從上至下逐步加深”、“從左至右逐步加深”等顏色漸變形式,此外,還可以通過畫一系列顏色不斷變化的圓,制作圓形漸變效果。首先畫一個最大的圓,然後依次畫半徑比前一個圓小一個象素的圓,然後依次畫半徑比前一個圓小一個象素的圓,同時圓的顏色也發生變化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved