65.9K
CodeProject 正在变化。 阅读更多。
Home

如何创建面向对象的 Win32 控制台应用程序

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.67/5 (10投票s)

2010年5月14日

CPOL

2分钟阅读

viewsIcon

45665

downloadIcon

927

如何创建面向对象的 Win32 控制台应用程序

引言

在 Win32 控制台模式下设计应用程序相当枯燥。不存在用户界面库。但这个简单的应用程序演示了如何在 Win32 控制台中创建一个面向对象的应用程序。但在我们开始之前,让我们谈谈一个名为 cExampleTextMode.h 的头文件。

C 头文件 cExampleTextMode.h 包含对于游戏能够将光标和文本字符定位在正确的 xy 位置至关重要的函数。textmode.h 文件中还包含绘制简单对话框、绘制线条、绘制点以及设置文本字符颜色的函数。

cExampleTextMode.h 中的函数

 delay()         delays x milliseconds
 gotoxy()        Goes to position on 80x25 console screen
 setcolor()      Changes text and background color
 clrbox()        draws colored box without frames
 box()           draws framed box
 gotoxy() only works with printf(), cprintf() and not cout<

gotoxy(int x, int y) 方法

调用 gotoxy(int x, int y) 事件会将光标设置在特定的 xy 位置。

void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x; coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
	return;
}

setcolor(WORD Color) 方法

调用 setcolor(WORD color) 事件会设置文本字符的颜色。

void setcolor(WORD color)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
	return;
}

clrscr() 方法

调用 clrscr() 事件会清除屏幕或用特定颜色填充屏幕。

void clrscr()
{
    COORD coordScreen = { 0, 0 };
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    DWORD dwConSize;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    GetConsoleScreenBufferInfo(hConsole, &csbi);
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    FillConsoleOutputCharacter(hConsole, TEXT(' '), 
		dwConSize, coordScreen, &cCharsWritten);
    GetConsoleScreenBufferInfo(hConsole, &csbi);
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, 
		dwConSize, coordScreen, &cCharsWritten);
    SetConsoleCursorPosition(hConsole, coordScreen);
	return;
}  

类头文件 cExample.h

现在是应用程序本身。我们首先声明一个类头文件,然后我们在 cExample.h 文件中定义类成员函数。
我们的类 cExample 将从类 cExampleTextMode 继承一些函数方法,通过使用以下语法实现

class cExample: public cExampleTextMode 

我们选择不在头文件中定义和实现我们的成员函数,而只是将原型放在 cExample.h 中。我们将在 Example.cpp 中定义函数和方法的具体实现。

// cExample.h

#ifndef CExample_H
#define CExample_H

#include "cExampleTextMode.h"

class cExample: public  cExampleTextMode  	// cExample inherits methods 
					// from cExampleTextMode
{
   public:
	cExample();       // default constructor

	cExample( int i);	//  constructor, always have a parameter 
			// in the constructor header to avoid link errors
	~cExample();     	// destructor


	// class member functions
	void ExampleInfo(void);

	void ExampleMethod(void);

};

#endif CExample_H

类定义文件 cExample.cpp

cExample.cpp 中,我们将定义和实现我们的成员函数,并包含函数调用、语法和语句。我们的类 cExample 继承了类 cExampleTextMode 的函数方法,因此我们需要包含以下语法

cExample::cExample( int i) : cExampleTextMode()

现在,cExampleTextMode.h 中的函数方法已经“统一”到我们的类 cExample 中的函数方法中。我们还在构造函数中放置了我们希望在启动时初始化的函数调用,以便在实例化我们的类时,这些函数方法会被调用和执行。

// cExample.cpp

#include "cExample.h"

cExample::cExample( int i) :  cExampleTextMode()	// cExample inherits methods 
						// from cExampleTextMode
{
	ExampleInfo();
	ExampleMethod();
}

void cExample::ExampleInfo(void)
{
	setcolor(15);
	clrscr();

	clrbox(2,2,78,6,224);
	gotoxy(3,2);printf(" %s ",ver);
	 gotoxy(3,3);printf(" %s ",prgdate);
	gotoxy(3,4);printf(" %s ",author);
	gotoxy(3,5);printf(" %s ",website);

	setcolor(15);gotoxy(1,23);
}

void cExample::ExampleMethod(void)
{
	clrbox(20,10,60,16,31);
	   box(20,10,60,16,15,15,"ExampleMethod Title");
	gotoxy(22,12);printf("ExampleMethod Text out ");
	setcolor(15);gotoxy(1,23);
}

构造函数

我们还在构造函数中放置了我们希望在启动时初始化的函数调用,以便在实例化我们的类时,这些函数方法会被调用和执行。

cExample::cExample( int i) :  cExampleTextMode()	// cExample inherits methods 
						// from  cExampleTextMode
{
	ExampleInfo();
	ExampleMethod();
}

cExample::ExampleMethod(void) 方法

当创建类的实例时,将执行方法 cExample::ExampleMethod(void),由于我们在构造函数中放置了对其的调用,它将继续绘制一个标题为“ExampleMethod Title”的文本模式对话框,并在对话框中心打印文本 “ExampleMethod Text out”

void cExample::ExampleMethod(void)
{
	clrbox(20,10,60,16,31);
	   box(20,10,60,16,15,15,"ExampleMethod Title");
	gotoxy(22,12);printf("ExampleMethod Text out ");
	setcolor(15);gotoxy(1,23);
}

主文件

文件 cExample_main.cpp 是我们创建类的实例并运行应用程序的地方

//cExample_main.cpp

#include "cExample.h"

int main()
{
  cExample *Example = new cExample(1);

  return 0;
}

这就是创建简单的面向对象 Win32 控制台应用程序是多么容易。

感谢阅读。

历史

  • 2010-05-13 更新
© . All rights reserved.