📄 00000001.htm
字号:
HDC hdc, // device context handle <BR>int nXEnd, // x-coordinate of line's ending point <BR>int nYEnd // y-coordinate of line's ending point <BR>); <BR>因此在C++Builder中,使用Casvas->LineTo(x,y) <BR>来绘图和呼叫标准SDK函式的LineTo((HDC)Canvas->Handle,x,y) 是一样的。 <BR> <BR>当然我不建议你在C++Builder中使用SDK语法来画图,但是我还是希望你对它 <BR>们两者之间的关系有一些了解,因为C++Builder的VCL虽然在Canvas中已经把 <BR>大部份的绘图函式实作出来,以物件的方式提供你使用,不过若是你要使用到 <BR>Canvas未提供的绘图函式时,你就可以利用Canvas->Handle来做为传入SDK函 <BR>式的叁数。 <BR> <BR>XX-04 TCanvas的TPen 性质 <BR> <BR>注:SDK加油站。 <BR>在SDK中使用Pen的方式是利用SelectObject函式来达成。它传入两个叁数, <BR>一个是HDC值,它就是Canvas->Handle值,另一个则是HGDIOBJ值,它是一些 <BR>绘图工具的通称,以Pen而言,它就是HPEN值,同时也是Pen->Handle值。 <BR> <BR>HGDIOBJ SelectObject( <BR>HDC hdc, // handle of device context <BR>HGDIOBJ hgdiobj // handle of object <BR>); <BR> <BR> <BR>现在开始,我要为你一一介绍在TCanvas所使用的绘图工具。首先为你介绍的是 <BR>TPen性质。在往下进行之前,我先简单说明C++ <BR>Builder的命名惯例,在C++Builder中,对於资料型别或是物件类别一般是以 <BR>大写T <BR>为启始字元,而对於物件本身则以不包含大写T的名称为名,如TCanvas及TPen <BR>为类别名,而Canvas及Pen则是实际的物件,在本书中我会依情况交互使用之。 <BR> <BR>TPen是你在Canvas画线所使用的”笔”,因此所有和线条有关的绘图函式都会 <BR>受TPen影响,如LineTo,Ellipse,Polygon,PolyLine,Rectangle等函式都 <BR>使用”笔”来画线,基本上我们可以将这些绘图工具归类为向量式的绘图工具, <BR>所有的向量式绘图工具都使用Pen来进行画线的动作。 <BR> <BR>你可以利用Canvas.Pen来存取Pen ,藉此修改Pen的性质,这些性质包含Color, <BR>Width,Style,以及 <BR>Mode。你可以修改上述性质来达到改变线条颜色及样式的目的。 <BR> <BR>XX-04-01 Color性质 <BR> <BR>Color性质可以定出笔的颜色。在C++ <BR>Builder中提供了许多颜色的预定常数,这些预设颜色都以cl(cl代表color) <BR>为启始字元命名。例如clRed代表红色,,clBlue代表蓝色,clGreen代表绿色 <BR>等等。另外C++ <BR>Builder也将Windows的基本颜色以常数定义,如clWindow及clMenu分别代表 <BR>Window及Menu的颜色。以下我列出部份C++ <BR>Builder定义的颜色常数,你不必完全记住它,只要有些印象即可,若是无法记 <BR>住,可以直接使用线上辅助说明,不过记住一些常用的常数会加快你程式写作的 <BR>效率。 <BR> <BR>颜色常数说明 <BR>值 意义 <BR> clBlack 黑色 <BR> clMaroon 茶色 <BR> clGreen 绿色 <BR> clOlive 橄榄绿 <BR> clNavy 海蓝色 <BR> clPurple 紫色 <BR> clTeal 青紫色 <BR> clGray 灰色 <BR> clSilver 银色 <BR> clRed 红色 <BR> clLime 灰绿色 <BR> clBlue 蓝色 <BR> clFuchsia <BR> clAqua 淡绿青色 <BR> clWhite 白色 <BR> clBackground Window背景色 <BR> clActiveCaption 活动视窗的标题色 <BR> clInactiveCaption 非活动视窗的标题色 <BR> clMenu Menu的颜色 <BR> clWindow Windows的背景色 <BR> clWindowFrame Window Frame的颜色 <BR> clMenuText Menu文字的颜色 <BR> clWindowText Window内文字的颜色 <BR> clCaptionText 标题文字的颜色 <BR> clActiveBorder 活动视窗的边界颜色 <BR> clInactiveBorder 非活动视窗的边界颜色 <BR> clAppWorkSpace 视窗工作区域的颜色 <BR> clHighlight 高亮度Windows颜色 <BR> clHightlightText 被选取文字的颜 <BR> clBtnFace Button颜色 <BR> clBtnShadow Button影子颜色 <BR> clGrayText 灰色文字色 <BR> clBtnText Button内文字颜 <BR> clBtnHighlight Button高亮度颜色 <BR> <BR> <BR>以下的程式会将画笔的颜色设为蓝色 <BR>Canvas->Pen->Color=clBlue; <BR> <BR>另外我们也可以利用以下的叙述来改变颜色 <BR> <BR>Canvas->Pen->Color = TColor(RGB(192,192,192)); <BR> <BR>注:RGB是Windows系统用以表示颜色的方式,它们分别代表红色(Red)、绿色 <BR>(Green)及蓝色(Blue)。使用RGB时我们可以传入分别代表红、绿、蓝三种颜 <BR>色的强度值,此时它会传回Windows系统的对应值。例如RGB(255,0,0) <BR>的传回值是代表红色,所以Tcolor(RGB(255,0,0)) 所代表的意义和clRed是相 <BR>同的。你也可以利用ColorToRGB来将clRed等C++ <BR>Builder定义的常数值传换成Windows系统所代表的RGB颜色。 <BR> <BR>XX-04-02 Style性质 <BR> <BR>Style性质是用来改变画笔的型式,在C++ Builder中定义了以下几种画笔型式。 <BR>它们都以ps为启始字串 (ps代表Pen Style)。 <BR> <BR>psClear 清除线 <BR>psDash Dash线 <BR>psDashDot Dash和Dot交替线 <BR>psDashDotDot Dash和一堆Dot线 <BR>psSolid 实心线 <BR> <BR> <BR>图XX-05 <BR> <BR>XX-04-03 Width性质 <BR> <BR>笔的Width顾名思义,就是指笔的粗细,我在前面几个程式都已使用过了,所以 <BR>在此不再细述。 <BR> <BR>XX-04-04 Mode性质 <BR> <BR>Pen的Mode性质是用以决定Pen如何画在Canvas上,下表列出我们可以使用的 <BR>Mode,它们都以pm为启始字元,代表Pen Mode。 <BR> <BR>Mode 点的颜色 <BR>pmBlack 恒为黑色 <BR>pmWhite 恒为白色. <BR>pmNop 不变色。 <BR>pmNot 萤幕的反相色。 <BR>pmCopy 使用Color性质的颜色(内定值). <BR>pmNotCopy 使用Color性质的反相色。 <BR>pmMergePenNot Color和萤幕反相的 Merge。 <BR>pmMaskPenNot Color和萤幕反相的 Mask。 <BR>pmMergeNotPen Color反相和萤幕的 Merge。 <BR>pmMaskNotPen Color反相和萤幕的 Mask。 <BR>pmMerge Color和萤幕的 Merge。 <BR>pmNotMerge pmMerget的相反。 <BR>pmMask Color和萤幕的 Mask。 <BR>pmNotMask pmMask的反相。 <BR>pmXor Color和萤幕的Xor运算。 <BR>pmNotXor pmXor的相反。 <BR> <BR>Pen->Mode的预设值是pmCopy,也就是说,它会用Color性质的颜色来画图。在 <BR>大部份情况下,你会使用这个预设值。不过若你要再针对笔做细部控制时,你就 <BR>必须对其他Mode有一些初步的了解。 <BR> <BR>另一个常用的Mode是 <BR>pmXor,它是用来让Pen->Color和萤幕颜色做XOR运算,XOR运算最重要的特徵 <BR>是:和同一个值做两次XOR运算时,会恢复原来的值。 <BR>因此我们可以用XOR模式在同一位置画两次线,将原来的线擦掉。在本书的绘图 <BR>范例中就使用pmXor来处理滑鼠的画线,用以将上次的线条清除掉。同时XOR运 <BR>算也是一种最简单的编码演算法,不过这不在本书讨论范围内,因此我就不再多 <BR>说了。 <BR> <BR>XX-05 TCanvas的TBrush性质 <BR> <BR>TBrush可用来在Canvas的特定区域下着色。和TPen不同的是,TBrush可以用 <BR>不同的颜色、样式、及图案来填满Canvas的特定区域,而TPen则是用来在Canvas <BR>上绘线。 <BR> <BR>XX-04-01 Style性质 <BR> <BR>TBrush共有bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, <BR>bsBDiagonal, <BR>bsCross, bsDiagCross等几种 Style,你可以由图XX-06看出这几种不同的笔 <BR>刷型式有何不同。 <BR> <BR> <BR>图XX-06 <BR> <BR>XX-05 TCanvas的Pixels性质 <BR> <BR>Pixel性质,是一个二维的颜色阵列,它让你可以直接存取Canvas内的任何一 <BR>点。你可以利用和一般阵列相同的存取方法来取得Pixel内的值。此阵列的最大 <BR>索引值是X,Y的值。 <BR> <BR>除非必要,否则不要以Pixel来绘图,它是最慢的绘图方法。 <BR> <BR>XX-06 TCanvas的Font性质 <BR> <BR>Font性质是用来控制画在Canvas上的文字所使用的字形。你可以利用改变 <BR>Color,Name,Size,Style的方式来分别改变字形的颜色、使用的字形名称、 <BR>字形大小及字形的样式。 <BR> <BR>XX-06-1 TFont的Color、Name、Size性质。 <BR> <BR>TFont的Color性质和其他元件的Color性质相同。 <BR>Name性质表示使用字形的名称。你可以用以下的方式来设定字形名称。 <BR>Canvas->Font->Name=”标楷体“; <BR>Size性质表示字形的大小。 <BR> <BR>XX-06-02 TFont的Style性质。 <BR> <BR>Style性质用以表示字型的样式。它包含以下几种样式: <BR> <BR>fsBold 粗体 <BR>fsItalic 斜体 <BR>fsUnderline 底线 <BR>fsStrikeOut 穿越文字的水平直线。 <BR> <BR><<< 以下待续 >>> <BR> <BR> <BR> <BR> <BR> <BR>-- <BR> <BR> 面对未知的世界因恐惧而发抖 <BR> <BR> <BR> <BR> <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.49.104] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -