📄 chap36.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>CLine类别定义及实作 画直线的类别</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>具体而微的绘图程式</font>·CLine类别定义及实作
画直线的类别</p>
<p align="left"><!--webbot bot="ImageMap" rectangle="(40,1) (71, 23) chap37.htm" rectangle="(4,1) (36, 23) chap35.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="chap37.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap35.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch3/chap36.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="23387" --></p>
</font><p><font SIZE="2"></font><font color="#FF0000" SIZE="2">·03-02 CLine类别定义及实作
画直线的类别</font></p><font SIZE="2">
<p>class CLine : public CShape</p>
<p>{</p>
<p> public:</p>
<p> POINT m_ptMove;</p>
<p> POINT m_ptOrigin;</p>
<p> public:</p>
<p> CLine(TCanvas* pCanvas):CShape(pCanvas) {}</p>
<p> virtual ~CLine() {}</p>
<p> virtual void OnMouseMove(int,int);</p>
<p> virtual void OnMouseDown(int,int);</p>
<p> virtual void OnMouseUp(int,int);</p>
<p>};</p>
<p>我们将CLine定义为一个画直线的类别,而我们希望在画直线时可以在拖弋滑鼠时将原先的线条擦去,并画出新的线,因此我们必须宣告两个点来记载滑鼠按下的点及上次的点以便擦去原来的线条。</p>
<p>以下就是CLine对於叁个滑鼠事件的处理函式:</p>
<p>// 滑鼠按下的事件处理函式</p>
<p>// 1. 设定原点及上个启始点为目前所在点。</p>
<p>// 2. 移动至目前所在点。</p>
<p>void CLine::OnMouseDown(int x,int y)</p>
<p>{</p>
<p> m_ptOrigin.x = m_ptMove.x = x;</p>
<p> m_ptOrigin.y = m_ptMove.y = y;</p>
<p> m_pCanvas->MoveTo(x,y);</p>
<p>}</p>
<p>// 滑鼠移动事件处理函式</p>
<p>// 1.将画笔模式设为XOR模式,以便擦去上一条线。</p>
<p>// 2.擦去原来的线(以XOR模式再画一次就会擦去了)</p>
<p>// 3.在目前的位置画出一条新线。</p>
<p>// 4.更新坐标并改变画笔模式。</p>
<p>void CLine::OnMouseMove(int x,int y)</p>
<p>{</p>
<p> m_pCanvas->Pen->Mode = pmXor;</p>
<p> m_pCanvas->MoveTo(m_ptOrigin.x,m_ptOrigin.y);</p>
<p> m_pCanvas->LineTo(m_ptMove.x,m_ptMove.y);</p>
<p> m_pCanvas->MoveTo(m_ptOrigin.x,m_ptOrigin.y);</p>
<p> m_pCanvas->LineTo(x,y);</p>
<p> m_ptMove.x = x;</p>
<p> m_ptMove.y = y;</p>
<p> m_pCanvas->Pen->Mode = pmCopy;</p>
<p>}</p>
<p>// 滑鼠放开事件处理函式</p>
<p>// 1.画出原点至目前点的直线。</p>
<p>void CLine::OnMouseUp(int x,int y)</p>
<p>{</p>
<p> m_pCanvas->MoveTo(m_ptOrigin.x,m_ptOrigin.y);</p>
<p> m_pCanvas->LineTo(x,y);</p>
<p>}</p>
<p>这就是画直线类别的定义及实作内容。</p>
</font>
<p align="right"><font SIZE="2"><!--webbot bot="ImageMap" rectangle="(40,1) (71, 23) chap37.htm" rectangle="(4,1) (36, 23) chap35.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="chap37.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap35.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch3/chap36.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="41975" --></font></p>
<font SIZE="2">
<p><small><a href="../../../index.htm">首页</a> >> <a href="../../program.htm">程序设计</a>
>> <a href="../cbuilder.htm">C++ Builder</a> >> </small><font>具体而微的绘图程式</font>·CLine类别定义及实作
画直线的类别</p>
</font>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -