慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

用 Visual C++ 编写可以在 Borland C++ 3.1 下编译执行的程序 铜牌收录

由于某些学校的硬性规定,课设必须用 Borland C++ 3.1(以下简称 BC) 一类 DOS 下的编程工具完成。

但是,BC 用起来很费劲,毕竟是 dos 时代的工具,无论编辑还是调试,都很吃力。尤其是图形程序,由于涉及到硬件及系统的问题,导致程序不能在 win7 及以上版本的 Windows 中运行,必须借助 dosbox 一类工具或者虚拟机才可以,麻烦多多。

本文通过一些常用的技巧,讲解怎样用 Visual C++(以下简称 VC) 编写可以在 BC 下直接编译运行的程序。

这样做的好处就是,可以节约大量的编码和调试时间。众所周知,当程序规模比较大的时候,调试时间会超过编码时间。而 VC 的强大调试功能,远不是 BC 能比的。同时,windows 下便捷的编辑环境,也比 BC 能节约很多时间。再比如有些人的显示器可以旋转,将 24 寸的显示器旋转 90 度竖着用,一屏可以阅读上百行代码,这种效率,绝对不是 BC 那一屏 20 多行代码可以比的。即便 BC 启用 43 行模式,效果仍然很差。

所以,下面的这个方法看似啰嗦,但真的可以为程序员节约大量时间。并且,通过 VC 编译生成的 exe 文件,可以直接在 win7/win8 下面运行,不需要像 BC 那样必须把 exe 文件和 dosbox 打包才能在 win7 / win8 下运行,这对于发布演示程序来说也是很方便很重要的。

一、所需工具

  1. 编程工具:Borland C++ 3.1,Visual C++ 6.0(更高版本的也行)

  2. 绘图库:EasyX 2013霜降版(更高版本的也行)。EasyX 库和 BC 的绘图函数的接口类似,可以方便实现后续功能。

二、所需技术

主要就是使用 C 语言的预定义标识符。

三、思路

利用 C 语言的预定义标识符,根据编译器的预定义常量进行不同代码的编译。

把有区别的代码整理到代理函数中,并把所有代理函数整合到头文件中。

在需要调用图形函数的部分引用上述头文件。

四、范例

该范例实现画一个红色圆。以下是具体步骤:

  1. 创建文件 delegate.h,作为范例,该文件的内容包括两方面:

a. 初始化屏幕。BC 和 VC 的初始化绘图窗口代码有出入。VC 无需指定驱动路径。

b. 设置颜色。BC 和 VC 的设置颜色的代码有出入。BC 在 VGAHI 模式下只有 16 色,VC 可以实现 24 位真彩色。

然后,通过 VC 的预定义常量 _MSC_VER 将以上两个功能封装为两个代理函数。代码如下:

#include <graphics.h>

// 初始化图形模式
void _initgraph()
{
#if _MSC_VER
	initgraph(640, 480);
#else
	int gd=VGA, gm=VGAHI;
	initgraph(&gd, &gm, "c:\\borlandc\\bgi");
#endif
}

// 设置颜色
void _setcolor(int color)
{
#if _MSC_VER
	static COLORREF C[] = {BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
		DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE};
	setlinecolor(C[color]);
	settextcolor(C[color]);
#else
	setcolor(color);
#endif
}
  1. 在 VC 中编写绘图代码(记得引用上一步创建的 delegate.h),并调试执行。

注意,绘图函数部分,需要调用代理函数,而不是直接调用相关平台的绘图函数。

例如,我们画一个红色的圆,代码如下:

#include "delegate.h"
#include <conio.h>

// 主函数
void main()
{
	_initgraph();
	_setcolor(4);
	circle(100, 100, 50);
	getch();
	closegraph();
}
  1. 调试无误后,将代码直接拿到 BC 上编译,完美通过。

至此,我们实现了在 VC 下编辑和调试绘图程序,并且这个绘图程序可以在 BC 下完美运行。

添加评论