第一次接触计算机图形学这东西,也是第一次用vc++6.0这个(zao xin de)软件,鉴于网上这块的学习资料太少了,把自己摸索的一些入门的操作写下来教给大家。
这篇文章主要是教大家如何使用VC++6.0来搭配算法进行画线、画圆。先展示一下我写好的效果图,如果不是你想要的,请绕路:
就简单展示这两个,其他的都是一样的,只是算法不同而已!!!需要我这个工程的,下面有链接哦!
如果上述功能是你想找的,那么就请跟着我一起来吧!
总体步骤:观察算法,确定变量 -> 建立对话框 -> 编写菜单 -> 建立菜单对话框消息映射 -> 编写算法
首先当然是安装VC++6.0(当然有VS的也可以啦,这里拿VC++6.0做演示吧,如果两个软件都没有,这里给你一个:https://www.lanzous.com/i5zbvpc )
- 观察算法,确定变量
打开软件,新建项目
因步骤都差不多,这里就只拿Bresenham画圆算法来做示范吧!
新建好项目后,先观察你的算法,Bresenham算法如下(至于原理,请翻阅其他资料,这里不做解释):
void circleBre(int x0, int y0, double circleBreR)
{
// TODO: Add your command handler code here
double x,y,d;
x=0;
y=(int)circleBreR;
d=int(3-2*circleBreR);
COLORREF rgb=RGB(0,0,225); //添加画笔颜色
while(x<y){
circlePoint(x0,y0,x,y,rgb);
if(d<0){
d=d+4*x+6;
}else{
d=d+4*(x-y)+10;
y--;
}
x++;
}
if(x==y){
circlePoint(x0,y0,x,y,rgb);
}
}
void circlePoint(int x0, int y0, int x, int y, int rgb)
{
// TODO: Add your command handler code here
CClientDC dc(this); //添加上下文,确定画布
dc.SetPixel(x0+x, y0+y, rgb);
dc.SetPixel(x0+y, y0+x, rgb);
dc.SetPixel(x0+y, y0-x, rgb);
dc.SetPixel(x0+x, y0-y, rgb);
dc.SetPixel(x0-x, y0-y, rgb);
dc.SetPixel(x0-y, y0-x, rgb);
dc.SetPixel(x0-y, y0+x, rgb);
dc.SetPixel(x0-x, y0+y, rgb);
}
可以看到,x0,y0是圆心坐标,circleBreR是圆的半径。因此我们需要的是输入这三个参数,可以把它们写成全局参数,并且画笔颜色rgb也可以后面定义,函数部分就可以少调用很多参数了(多了参数,怕乱),改写后的函数如下:
void circleBre()
{
// TODO: Add your command handler code here
double x,y,d;
x=0;
y=(int)circleBreR;
d=int(3-2*circleBreR);
while(x<y){
circlePoint(x,y);
if(d<0){
d=d+4*x+6;
}else{
d=d+4*(x-y)+10;
y--;
}
x++;
}
if(x==y){
circlePoint(x,y);
}
}
void circlePoint(double x, double y)
{
// TODO: Add your command handler code here
CClientDC dc(this); //添加上下文,确定画布
COLORREF rgb=RGB(0,0,225); //添加画笔颜色
dc.SetPixel(x0+x, y0+y, rgb);
dc.SetPixel(x0+y, y0+x, rgb);
dc.SetPixel(x0+y, y0-x, rgb);
dc.SetPixel(x0+x, y0-y, rgb);
dc.SetPixel(x0-x, y0-y, rgb);
dc.SetPixel(x0-y, y0-x, rgb);
dc.SetPixel(x0-y, y0+x, rgb);
dc.SetPixel(x0-x, y0+y, rgb);
}
好了,观察好你所需要的输入参数:圆心坐标x0,y0,半径R,可以来设计了:
- 建立对话框:
分别拖出四个静态文本框(Aa)和三个编辑框(ab|)
选中一个,右键属性!!!(千万不要去双击,这里的双击可不是你想要的效果)。
然后,在标题这输入显示文字(其他的静态文本框Static都一样),输入完后:
文本框弄好了,来修改编辑框,一样的选中一个编辑框,右键选择属性,修改ID
X:
Y:
R:
然后,如果看不惯这个排版,可以选中各对象,拖动或者方向键移动它们,我就简单地这样排了:
以上操作完成后,在对话框任意空白位置,双击,会弹出对话框,选择OK
为对话框建立变量:
添加变量:
创建好后,正常显示这样的,然后点击下面的“确定”:
- 编写菜单
对话框建立好了,现在可以修改菜单了:
输入菜单标题
编写子菜单
- 建立消息映射
以上两步可以颠倒顺序,上述两步建立好后,最重要的一步是“建立消息映射”。
以下操作务必按照序号来:
然后确定
编写函数
添加头文件
测试:
点击“感叹号”编译运行:
点击子菜单,出现弹出框表示正常:
- 写入算法
打开testView.h,建立全局变量:
回到“testView.h”给全局变量进行赋值:
编写算法函数(这里我就直接用现成的,由上面的改了下精度):
将下面的函数代码粘贴到上述函数的下面
void CTestView::circleBre()
{
// TODO: Add your command handler code here
int x,y,d;
x=0;
y=R;
d=3-2*R;
while(x<y){
circlePoint(x,y);
if(d<0){
d=d+4*x+6;
}else{
d=d+4*(x-y)+10;
y--;
}
x++;
}
if(x==y){
circlePoint(x,y);
}
}
void CTestView::circlePoint(int x, int y)
{
// TODO: Add your command handler code here
CClientDC dc(this); //添加上下文,确定画布
COLORREF rgb=RGB(0,0,225); //添加画笔颜色
dc.SetPixel(x0+x, y0+y, rgb);
dc.SetPixel(x0+y, y0+x, rgb);
dc.SetPixel(x0+y, y0-x, rgb);
dc.SetPixel(x0+x, y0-y, rgb);
dc.SetPixel(x0-x, y0-y, rgb);
dc.SetPixel(x0-y, y0-x, rgb);
dc.SetPixel(x0-y, y0+x, rgb);
dc.SetPixel(x0-x, y0+y, rgb);
}
当然,在这里写了函数,需要去“testView.h”进行函数声明:
上面的都做好了,那就运行吧!
输入参数:
运行结果:
大功告成!!!
其他的都类似了,大家尝试着动手做做呀!!!
需要我这两个工程的,下面是链接哦:
土豪链接://download.csdn.net/download/changfeng1998/11964897
非土豪链接:https://www.lanzous.com/i7cwc4h
如何打开工程呢?
选择菜单文件->打开
找到你要打开的文件路径: