VC++中色彩的运用
如华丽得体的衣装可以让一个外貌平平的女孩变得自信而愉快那样,在VC++程序界面中适当地配上颜色也会使你的程序变得生动悦目。一、寻找VC++中调色板的配色参数
最直接的方法是设置应用程序主窗体的背景色。对此,简单的办法是通过ClassWizard在视图中创建一个成员函数来响应消息WM_ERASEBKGND,关键源代码如下:
BOOL CMyView::OnErase Bkgnd(CDC* pDC)
{
CBrush backBrush(RGB(255,255,0));
CBrush* pOldBrush=pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);
pDC->SelectObject(pOld Brush);
return TRUE;
}
本段代码的作用是将主窗体背景绘制成米**,其中所用的RGB宏是用于指定三原色(红,绿,蓝)的“配比数”,每个值都是0~255之间的一个整数。在上面代码中RGB表示混合同样一份红色与绿色,并关闭蓝色得到**;0,0,0为黑色,255,255,255为白色。
RGB宏是VC++程序使用颜色的基础,但在使用时遇到的棘手问题是,当你选择一种“中间色”时,你如何才能知道确切的“配方”──那三个0~255之间的颜色参数分别是多少?这也是笔者在研制一个项目中遇到的一个实际问题,尽管它在整个项目中显得微不足道。为此,笔者编制了一个实验程序,运行后可以调用MFC的颜色对话框,当我们选中具体颜色后,就得到其RGB值,并存放到文本文件RGBNum中。当我们得到这个值后,在上面代码中就可以用这个数值去替代RGB宏了。实验程序具体代码如下:
void CMyView::OnSelRGB()
{
CColorDialog colorDialog;
COLORREF Mycolor;
FILE *fin;
fin=fopen("RGBNum.txt","a");
if(colorDialog.DoModal()==IDOK)
{
Mycolor =colorDialog.GetColor();
fprintf(fin," Mycolor =%ld\n",Mycolor);
fclose(fin);
}
}
上述代码是通过COLORREF获取RGB颜色值的。COLORREF是一个32bit整数,它常用RGB宏作初始化。
二、设置对话框的背景颜色
要改变应用程序所有对话框的背景颜色,可以调用CwinApp::SetDialogBkColor(),它的第一个参数指定了背景颜色,第二个参数指定了文本颜色。
下例将应用程序对话框设置为蓝色背景和**文本。
BOOL CMyApp::InitInstance()
{
......
//蓝色背景**文本
SetDialogBkColor(RGB(0,0,255),RGB(255,255,0));
......
}
三、如何控制文字的显示颜色
在VC++编程中,常会用LOGFONT结构中的14个字段定义去控制显示字符的大小、粗细、角度、字体等。而且可以用函数SetTextColor(COLORREF crColor)设置字符颜色。有关代码如下所示:
void CMyView::OnDraw(CDC* pDC)
{
CMenuCom03Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// 设置文本颜色
COLORREF color=RGB(0,250,0);
pDC->SetTextColor(color);
pDC->TextOut(120,200,"彩色字体样例");
}
下一步,我们还可以设置具有翻转背景颜色的文本。即调用CDC::SetBkMode()函数并传送TRANSPARENT使背景颜色保持不变。以下代码用红色带阴影显示文本:
void CMyView::OnDraw(CDC* pDC)
{
CDelemeDoc* pDoc = Get Document();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rc;
GetClientRect(rc);
CString str(_T("Hello,World!"));
pDC->SetBkMode(TRANS PARENT);
rc.OffsetRect(1,1);
pDC->SetTextColor(RGB(0,0,0));
pDC->DrawText(str,str.GetLength(),rc,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
rc.OffsetRect(-1,-1);
pDC->SetTextColor(RGB(255,0,0));
pDC->DrawText(str,str.GetLength(),rcView,DT_SINGLELINE|DT_CEN TER|DT_VCENTER);
}
本文列举的源代码均在VC++6.0下调试运行通过。 现在还用这种方式?ui痛! 回复 2# whypro
没办法我业余
页:
[1]