📄 chap25.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>范例四</title>
<link rel="stylesheet" href="../../../include/style.css">
</head>
<body>
<font SIZE="2">
<p><small><a href="../../../index.htm">首页</a> >> <a href="../../program.htm">程序设计</a>
>> <a href="../cbuilder.htm">C++ Builder</a> >> </small>图形程式设计基本观念·<font color="#000000">范例四</font></p>
<p align="left"><!--webbot bot="ImageMap" rectangle=" (40,1) (71, 23) chap26.htm" rectangle=" (4,1) (36, 23) chap24.htm" src="../ch1/NextBack.gif" width="72" height="24" alt="NextBack.gif (743字节)" border="0" startspan --><MAP NAME="FrontPageMap"><AREA SHAPE="RECT" COORDS="40, 1, 71, 23" HREF="chap26.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap24.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch2/chap25.htm/map"><img ismap usemap="#FrontPageMap" border="0" height="24" alt="NextBack.gif (743字节)" src="../ch1/NextBack.gif" width="72"></a><!--webbot bot="ImageMap" endspan i-checksum="23157" --></p>
</font>
<p align="left"><font SIZE="2" color="#FF0000">·范例四的输出</font></p>
<p><font SIZE="2"><img SRC="Image4.gif" WIDTH="458" HEIGHT="344">图04</font></p>
<font SIZE="2">
<p>void __fastcall TForm1::FormPaint(TObject *Sender)</p>
<p>{</p>
<p> double A,x1,y1,x2,y2;</p>
<p> int D=80;</p>
<p> double E,F;</p>
<p> for (int i=0; i<960; i++)</p>
<p> {</p>
<p> A = i*M_PI/480;</p>
<p> E = D*(1+cos(20*A)/4);</p>
<p> F = E*(1+sin(4*A));</p>
<p> x1 = 320+F*cos(A);</p>
<p> x2 = 320+F*cos(A+M_PI/5);</p>
<p> y1 = 240-F*sin(A);</p>
<p> y2 = 240-F*sin(A+M_PI/5);</p>
<p> Canvas->MoveTo(x1,y1);</p>
<p> Canvas->LineTo(x2,y2);</p>
<p> }</p>
<p>}</p>
<p>以上四个范例程式是我先为你准备的开胃小菜,主要用以说明C++Builder
的Canvas绘图基本观念,同时也让你明了:利用几个简单的基本函式也可以做出美丽的电脑绘图。</p>
<p>03 TCanvas的Handle性质</p>
<p>在平时,你不太会有机会用到TCanvas的Handle性质,它其实就是在Windows
SDK绘图函式中都必须要用到的DC (Device Context)值。在Windows系统中,所有的绘图动作都必须透过DC来达成,</p>
<p>举例来说标准的SDK画线函式应该是这样的 </p>
<p>BOOL LineTo(</p>
<p> HDC hdc, // device context handle </p>
<p> int nXEnd, // x-coordinate of line's ending point </p>
<p> int nYEnd // y-coordinate of line's ending point </p>
<p>);</p>
<p>因此在C++Builder中,使用Casvas->LineTo(x,y) 来绘图和呼叫标准SDK函式的LineTo((HDC)Canvas->Handle,x,y)
是一样的。</p>
<p>当然我不建议你在C++Builder中使用SDK语法来画图,但是我还是希望你对它们两者之间的关系有一些了解,因为C++Builder的VCL虽然在Canvas中已经把大部份的绘图函式实作出来,以物件的方式提供你使用,不过若是你要使用到Canvas未提供的绘图函式时,你就可以利用Canvas->Handle来做为传入SDK函式的参数。</p>
<p>04 TCanvas的TPen 性质</p>
<p>注:SDK加油站。</p>
<p>在SDK中使用Pen的方式是利用SelectObject函式来达成。它传入两个参数,一个是HDC值,它就是Canvas->Handle值,另一个则是HGDIOBJ值,它是一些绘图工具的通称,以Pen而言,它就是HPEN值,同时也是Pen->Handle值。</p>
<p>HGDIOBJ SelectObject(</p>
<p>HDC hdc, // handle of device context </p>
<p>HGDIOBJ hgdiobj // handle of object </p>
<p>);</p>
<p align="right"><!--webbot bot="ImageMap" rectangle=" (40,1) (71, 23) chap26.htm" rectangle=" (4,1) (36, 23) chap24.htm" src="../ch1/NextBack.gif" width="72" height="24" alt="NextBack.gif (743字节)" border="0" startspan --><MAP NAME="FrontPageMap1"><AREA SHAPE="RECT" COORDS="40, 1, 71, 23" HREF="chap26.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap24.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch2/chap25.htm/map1"><img ismap usemap="#FrontPageMap1" border="0" height="24" alt="NextBack.gif (743字节)" src="../ch1/NextBack.gif" width="72"></a><!--webbot bot="ImageMap" endspan i-checksum="41770" --></p>
</font>
<p><font SIZE="2">·<small><a href="../../../index.htm">首页</a> >>
<a href="../../program.htm">程序设计</a> >> <a href="../cbuilder.htm">C++
Builder</a> >> </small>图形程式设计基本观念·</font><font SIZE="2" color="#000000">范例四</font></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -