?? 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">程序設(shè)計</a>
>> <a href="../cbuilder.htm">C++ Builder</a> >> </small>圖形程式設(shè)計基本觀念·<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字節(jié))" 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字節(jié))" 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>以上四個范例程式是我先為你準(zhǔn)備的開胃小菜,主要用以說明C++Builder
的Canvas繪圖基本觀念,同時也讓你明了:利用幾個簡單的基本函式也可以做出美麗的電腦繪圖。</p>
<p>03 TCanvas的Handle性質(zhì)</p>
<p>在平時,你不太會有機(jī)會用到TCanvas的Handle性質(zhì),它其實就是在Windows
SDK繪圖函式中都必須要用到的DC (Device Context)值。在Windows系統(tǒng)中,所有的繪圖動作都必須透過DC來達(dá)成,</p>
<p>舉例來說標(biāo)準(zhǔn)的SDK畫線函式應(yīng)該是這樣的 </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) 來繪圖和呼叫標(biāo)準(zhǔn)SDK函式的LineTo((HDC)Canvas->Handle,x,y)
是一樣的。</p>
<p>當(dāng)然我不建議你在C++Builder中使用SDK語法來畫圖,但是我還是希望你對它們兩者之間的關(guān)系有一些了解,因為C++Builder的VCL雖然在Canvas中已經(jīng)把大部份的繪圖函式實作出來,以物件的方式提供你使用,不過若是你要使用到Canvas未提供的繪圖函式時,你就可以利用Canvas->Handle來做為傳入SDK函式的參數(shù)。</p>
<p>04 TCanvas的TPen 性質(zhì)</p>
<p>注:SDK加油站。</p>
<p>在SDK中使用Pen的方式是利用SelectObject函式來達(dá)成。它傳入兩個參數(shù),一個是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字節(jié))" 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字節(jié))" 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">程序設(shè)計</a> >> <a href="../cbuilder.htm">C++
Builder</a> >> </small>圖形程式設(shè)計基本觀念·</font><font SIZE="2" color="#000000">范例四</font></p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -