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);
}
好了,所有的功能都實現了,在界面上點擊鼠標左鍵,我們可以發現,背景以不同的漸變色填充。