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(),它的第一个参数指定了背景颜色,第二个参数指定了文本颜色。www.jz5u.com
下例将应用程序对话框设置为蓝色背景和黄色文本。
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下调试运行通过。
计算机等级考试释疑:VB应试心得
VB因简单易学、功能强大和微软的支持而成为主流,于是越来越多参加全国计算机等级考试的人选择了它。不过请大家注意:二级VB考试笔试与上机时间均为90分钟,千万不要与其他语言的考试时间发生混淆。
VB与QB的区别与联系
VB与QB在数据类型、语法和程序结构等方面有很多相同之处,VB仍采用基本的BASIC语言,但它们的区别却是根本性的:
1.QB只是一门程序设计语言,而VB不但是一门程序设计语言,更重要的还是在Windows操作系统界面下的软件开发工具,它主要用来开发可视化软件。
2.QB中的程序是一个完整的程序系统,是不可以分割的,程序执行时从头执行到尾,编写程序时一定要精确地写出每一个步骤;而VB程序采用的是事件驱动编程机制,用户编写程序时不必写出很长的程序,只要写出简短的程序片断就可以了。
比如这样一个例子,要求编程实现:输入两个数,输出它们的和。如果用QB,程序如下 INPUT a;b
c=a+b
PRINT c
END
而用VB程序则如下:
Private Sub Command1_Click()
A=InputBox("a=")
B=InputBox("b=")
C=val(a)+val(b)
Print C
End Sub
这个例子中QB程序与VB程序在程序代码和语法规则上基本相似,但执行时就不一样了:QB只要运行,就可以得出结果;而VB程序则必须用鼠标单击Command1对象才能执行其代码,得出结果。如果单击窗体则操作对象错误;如果对Command1不单击而进行其他操作,则对象响应事件错误。这两者都不能执行VB下面的程序代码。因而在VB应试学习过程中,既要学会分析BASIC程序的执行流程,又要熟悉和掌握VB的操作界面、面向对象程序设计的特点。
重视VB的基本概念
VB的基本概念中,要特别重视数据类型的定义、表达式、函数及常用控件的属性、功能和使用。这是掌握面向对象程序设计、学会编写事件代码的基础,考试的内容涉及面很广,大家要多加记忆与理解。
在前面的例子中,如果将其中的“C=val(a)+val(b)”改为“C=A+B”,那么从键盘输入A=1,B=2,结果还是3吗?答案是否定的。因为InputBox函数是输入语句,它只能接收文本,所以变量A与B内存放的并非是数字1与2而是字符“1”与“2”,而语句C=A+B中的“+”号的含义对于文本来讲并不是加而是连接的意思,因而答案为12。这个问题的理解充分地说明了掌握基本概念的重要性。
2002年秋季笔试中有一选择题:在窗体上画一个名称为Commandl的命令按钮,然后编写如下程序:
Private Sub Command1_Click()
Static X As Integer
Static Y As Integer
Cls
Y=1
Y=Y+5
X=5+X
Print X,Y
End Sub
程序运行时,三次单击命令按钮Commandl后,窗体上显示的结果为:
A) 15 16 B) 15 6
C) 15 15 D) 5 6
解析:本题主要考查对数据的定义,用Dim和用Static定义的变量在程序中的结果是完全不同的。用Dim定义的变量,在过程运