C++ Builder 2010 绘制坐标

 一、 步骤:1.先确定Image的位置,大小(可以不写)
                    2.设置初始面板,绘制初始的x,y坐标轴
                    3.画x,y向的刻度线,标刻x,y轴刻度
                    4.获取数据 (可以不写)
                    5.将数据标刻在Image上 (可以不写)

二、所使用的函数解析

1. FillRect:填充矩形(FillRect 方法的作用是在画布上填充已绘制的矩形)
2. 使用语法:"FillRect (x,y,width,height);", 其中x、y分别表示矩形左上角的x坐标、y坐标
3. rect:矩形
4. Moveto:移动到某个坐标。   moveto(x,y)
5. Lineto:从当前坐标, 移动的某个坐标连接到当前坐标。 lineto(x,y)
    这两个函数加起来就是画一条直线: Moveto(x,y)和Lineto(x,y)
6. TextOut:函数使用当前选定的字体、背景色和文本颜色在指定位置写入一个字符串。
                    TextOutA(x,y,text);

三、具体操作流程

1.打开C++ Builder 2010软件,File -> New -> VCL Forms Application - C++Builder 。创建界面。

2.修改name中的 Form1 成 fm1 方便后续操作。

3. 添加 Image 组件。在组件栏(Tool Palette)搜 Image 并拖到主界面中。

4. 切换到代码界面。按 F12 或 双击主界面 或 点击主页面下方的 Unit1.cpp(这里我采用双击主界面)

 5.编写代码。

(1)确定Image的位置,大小(可以不写)

fm1->Image1 ->Top =30;fm1->Image1 ->Left =30;        //Image定位
fm1->Image1 ->Width =1000;fm1->Image1 ->Height =400; //Image大小限定

(2) 设置初始面板,绘制初始的x,y坐标轴

fm1->Image1->Canvas->Pen->Color = clWhite;     //Canvas:画布   Pen:刷子  设置颜色
fm1->Image1->Canvas->Brush->Color = clBlack;   //Brush:刷子  设置颜色

fm1->Image1->Canvas->FillRect(Rect(0,0, fm1->Image1->Width,fm1->Image1->Height)); //初始面板
fm1->Image1->Canvas->MoveTo(50,350); fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350);      //初始x轴绘制
fm1->Image1->Canvas->MoveTo(80,380); fm1->Image1->Canvas->LineTo(80,20);   //初始y轴绘制

fm1->Image1->Canvas->MoveTo(fm1->Image1->Width*0.98,345); fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350);      //x轴箭头绘制
fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350); fm1->Image1->Canvas->LineTo(fm1->Image1->Width*0.98,355);

fm1->Image1->Canvas->MoveTo(75,40); fm1->Image1->Canvas->LineTo(80,20);                                             //y轴箭头绘制
fm1->Image1->Canvas->MoveTo(80,20); fm1->Image1->Canvas->LineTo(85,40);

(3)画x,y向的刻度线,标刻x,y轴刻度

// 画刻度线与刻度
// 纵向线:
	fm1->Image1->Canvas->Pen->Color = clTeal;
	pos=920;
	for(i=0;i<20;i++)
	{
	  pos -= 40;
	  fm1->Image1->Canvas->MoveTo(pos,350); fm1->Image1->Canvas->LineTo(pos,50);
	}
// 横向线:
	fm1->Image1->Canvas->Pen->Color = clTeal;
	pos = 35;
	for(i=0;i<20;i++)
	{
	  pos += 15;
	  fm1->Image1->Canvas->MoveTo(80,pos); fm1->Image1->Canvas->LineTo(fm1->Image1->Width*0.98,pos);
	}
// x轴刻度
	fm1->Image1->Canvas->Font->Color = clWhite;
	fm1->Image1->Canvas->Font->Name = "Arial";
	fm1->Image1->Canvas->Font->Size = 9;
	fm1->Image1->Canvas->Pen->Color = clWhite;
	pos = 80;
	for(i=0;i<20;i++)
	{
	  AnsiString number_x;
	  number_x=String((i+1)*10.0)+".0";
	  pos += 40;
	  fm1->Image1->Canvas->MoveTo(pos,350); fm1->Image1->Canvas->LineTo(pos,355);
	  fm1->Image1->Canvas->TextOutA(pos-14,360,number_x);
	}
// y轴刻度
	fm1->Image1->Canvas->Font->Color = clWhite;
	fm1->Image1->Canvas->Font->Name = "Arial";
	fm1->Image1->Canvas->Font->Size = 9;
	fm1->Image1->Canvas->Pen->Color = clWhite;
	pos = 35;
	for(i=0;i<20;i++)
	{
	  AnsiString number_x,number_y;
	  number_x=String((i+1)*10.0)+".0";
	  number_y=String((i+1)*10.0)+".0";
	  pos += 15;
	  fm1->Image1->Canvas->MoveTo(75,pos); fm1->Image1->Canvas->LineTo(80,pos);
	  fm1->Image1->Canvas->TextOutA(40,343-(i+1)*15,number_y);
	}
	fm1->Image1->Canvas->TextOutA(20,343-0*15,"0.0    ");

6.完整代码。上述第5点是代码解析,复制第6点可以直接生成代码。

int pos,i;
void __fastcall Tfm1::FormCreate(TObject *Sender)
{
/*
  FillRect:填充矩形
  fillRect 方法的作用是在画布上绘制已填充的矩形
  使用语法:"fillRect (x,y,width,height):", 其中x、y分别表示矩形左上角的x坐标、y坐标
  rect:矩形
  moveto:移动到某个坐标   moveto(x,y)
  lineto:从当前坐标, 移动的某个坐标连接到当前坐标。 lineto(x,y)
  这两个函数加起来就是画一条直线:moveto(x,y)和lineto(x,y)
  TextOut:函数使用当前选定的字体、背景色和文本颜色在指定位置写入一个字符串。
		   TextOutA(x,y,text);
*/
/*
  步骤:1.先确定Image的位置,大小(可以不写)
		2.设置初始面板,绘制初始的x,y坐标轴
		3.画x,y向的刻度线,标刻x,y轴刻度
		4.获取数据 (可以不写)
		5.将数据标刻在Image上 (可以不写)
*/
// 定位、大小(可以不写)
	fm1->Image1 ->Top =30;fm1->Image1 ->Left =30;
	fm1->Image1 ->Width =1000;fm1->Image1 ->Height =400;

// 设置
	fm1->Image1->Canvas->Pen->Color = clWhite;                                  //Canvas:画布   brush:刷子
	fm1->Image1->Canvas->Brush->Color = clBlack;

	fm1->Image1->Canvas->FillRect(Rect(0,0, fm1->Image1->Width,fm1->Image1->Height));              //初始面板
	fm1->Image1->Canvas->MoveTo(50,350); fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350);      //初始x轴绘制
	fm1->Image1->Canvas->MoveTo(80,380); fm1->Image1->Canvas->LineTo(80,20);                       //初始y轴绘制

	fm1->Image1->Canvas->MoveTo(fm1->Image1->Width*0.98,345); fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350);      //x轴箭头绘制
	fm1->Image1->Canvas->LineTo(fm1->Image1->Width,350); fm1->Image1->Canvas->LineTo(fm1->Image1->Width*0.98,355);
	fm1->Image1->Canvas->MoveTo(75,40); fm1->Image1->Canvas->LineTo(80,20);                                             //y轴箭头绘制
	fm1->Image1->Canvas->MoveTo(80,20); fm1->Image1->Canvas->LineTo(85,40);

// 画刻度线与刻度
// 纵向线:
	fm1->Image1->Canvas->Pen->Color = clTeal;
	pos=920;
	for(i=0;i<20;i++)
	{
	  pos -= 40;
	  fm1->Image1->Canvas->MoveTo(pos,350); fm1->Image1->Canvas->LineTo(pos,50);
	}
// 横向线:
	fm1->Image1->Canvas->Pen->Color = clTeal;
	pos = 35;
	for(i=0;i<20;i++)
	{
	  pos += 15;
	  fm1->Image1->Canvas->MoveTo(80,pos); fm1->Image1->Canvas->LineTo(fm1->Image1->Width*0.98,pos);
	}
// x轴刻度
	fm1->Image1->Canvas->Font->Color = clWhite;
	fm1->Image1->Canvas->Font->Name = "Arial";
	fm1->Image1->Canvas->Font->Size = 9;
	fm1->Image1->Canvas->Pen->Color = clWhite;
	pos = 80;
	for(i=0;i<20;i++)
	{
	  AnsiString number_x;
	  number_x=String((i+1)*10.0)+".0";
	  pos += 40;
	  fm1->Image1->Canvas->MoveTo(pos,350); fm1->Image1->Canvas->LineTo(pos,355);
	  fm1->Image1->Canvas->TextOutA(pos-14,360,number_x);
	}
// y轴刻度
	fm1->Image1->Canvas->Font->Color = clWhite;
	fm1->Image1->Canvas->Font->Name = "Arial";
	fm1->Image1->Canvas->Font->Size = 9;
	fm1->Image1->Canvas->Pen->Color = clWhite;
	pos = 35;
	for(i=0;i<20;i++)
	{
	  AnsiString number_x,number_y;
	  number_x=String((i+1)*10.0)+".0";
	  number_y=String((i+1)*10.0)+".0";
	  pos += 15;
	  fm1->Image1->Canvas->MoveTo(75,pos); fm1->Image1->Canvas->LineTo(80,pos);
	  fm1->Image1->Canvas->TextOutA(40,343-(i+1)*15,number_y);
	}
	fm1->Image1->Canvas->TextOutA(20,343-0*15,"0.0    ");
}

7.编译代码并运行。按 F9键 或 Run

8.得到结果。

 9.源码链接。可直接在桌面运行

C++Builder2010绘制坐标资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/God_me_1/89397348

/*=============================================== 作者:LXZ-2008 FROM:CUMT 计08级 时间:2012-04-22 功能:能在SDK、MFC编程中实现笛卡尔 坐标系统的绘制,以及曲线,点的绘制。 特性:1.本程序采用面向对象思想设计; 2.具备很好的独立性,随时可以把这两个文件应 用在任意SDK、MFC开发中; 3.有良好的灵活性,扩展性,易用性,在稍微扩 展一下可以绘制任意曲线,图形; 4.具备良好的组合性,符合模块内高内聚,模块 外低耦合的思路; 5.整个程序仅有1300行左右代码,如果嫌代码过 多,可以把原先变量的PROTECTED保护类型打开, 换成PUBLIC,这样去掉GET和SET函数,这个思路 起源于我对J2EE中STRUTS2框架的学习以及对COM 组件技术的了解,它们也是这种思路这时可以省 下几百行代码。 6.当然也会有设计模式的思路在里面。 个人说明: 本程序花了我将近2天的时间编写,尽管开始有点 不想,但是还是觉得有意义,能给广大网友提供益处。 本系统的雏形来自2010年下半年的程序,当时花了 10天时间,弄了3千行代码。在现在看来当时的程序的 执行效率未必比现在的低,但是可维护性糟糕,可拓展 性糟糕,不具备良好的灵活性。需求改变了,代码会大 幅改变。换句话说,现在看来当时的程序是十分糟糕的, 生命周期已经结束。 而在用了面向对象的思想和设计模式,以及一些数 据结构去重新搭建这个系统的时候,代码其实1千多行就 搞定了,时间3-4天,不需要那么多(现在我来弄的话)。 主要起源于自己参与真实的有数十万代码的项目的开发, 这样提高了对程序开发的认识,以及商业程序应该如何 开发。同时也是自己面向对象思想和设计模式学习,对 自身思想的提高。 希望阅读代码的人觉得这些代码是优雅的,这就满 足了,尽管注释少了些,你们自己加吧。 QQ:706625262 E-MAIL:706625262@qq.com 不做商业和技术支持。 声明: 本程序代码未经本人同意,或者未给我MONEY的前提下, 不得用于商业目的,别让我鄙视你。在非商业目的使用 下请注明本人是原创,表学腾讯。 ==================================================*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God_me_1

给点动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值