用漸變色填充背景

發表于:2007-07-14來源:作者:點擊數: 標簽:
作者: bull77 Windows 的圖形界面為我們提供了無窮的方便和視覺上的快感,由淺及深的顏色給我們無盡的遐想。漸變色的實現有多種方法,好多資料上介紹了利用調色板的方法實現,其過程及其的復雜,需要我們具有一定的圖形編程的基礎,下面我將向大家介紹一種比
作者: bull77

Windows的圖形界面為我們提供了無窮的方便和視覺上的快感,由淺及深的顏色給我們無盡的遐想。漸變色的實現有多種方法,好多資料上介紹了利用調色板的方法實現,其過程及其的復雜,需要我們具有一定的圖形編程的基礎,下面我將向大家介紹一種比較簡單的方法,即使你一點都不了解圖形編程和調色板的概念。

  第一步:新建單文檔工程,一切參數都取默認值。

  第二步:在shadowview.h中定義變量如下:

private:
int ColorR;
int ColorG;

  第三步:在shadowview.cpp的構造函數中初始化變量如下:

CShadowView::CShadowView()
{
 // TODO: add construction code here
 ColorR = 255;
 ColorG = 255;
}


  第四步:在Ondraw()中添加如下的實現代碼:

void CShadowView::OnDraw(CDC* pDC)
{
 CShadowDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 CRect m_rcClient;
 file://得到客戶區域的填充矩形
 GetClientRect(&m_rcClient);
 int nWidth = m_rcClient.Width();
 int nHeight = m_rcClient.Height();
 CRect rectangle;
 file://分割客戶區域成小矩形,逐個填充
 for(int i = 0;i < nWidth;i++ )
 {
  rectangle.SetRect(i, 0, i+1, nHeight);
  pDC->FillSolidRect(&rectangle, RGB(ColorR, ColorG, 255-MulDiv(i, 255, nWidth)));
  }
}





  現在編譯、運行程序,我們可以發現單文檔界面的背景已經被黃漸變色填充。接下來,我們實現在界面上點擊鼠標左鍵,實現背景顏色的改變。

  第五步:在ClassWizard中添加鼠標左鍵的消息處理映射函數,并添加如下代碼:

void CShadowView::OnLButtonDown(UINT nFlags, CPoint point)
{
 file://生成小于255的隨機數,給ColorR和ColorG賦值
 int nRand = rand();
 float fMap = (float)255/RAND_MAX;
 ColorR = (UINT)(float)nRand*fMap + 0.5f;
 nRand = rand();
 fMap = (float)255/RAND_MAX;
 ColorG = (UINT)(float)nRand*fMap + 0.5f;
 file://更新界面
 Invalidate();
 CView::OnLButtonDown(nFlags, point);
}


  好了,所有的功能都實現了,在界面上點擊鼠標左鍵,我們可以發現,背景以不同的漸變色填充。 

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97