⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 window.cpp

📁 金融pos机前台源码
💻 CPP
字号:
/******************************************************************************
	模  块:	窗口模块.
	功  能:	能插入控件,并控制控件运行.
	程序员:	雷中南.
	版  本:	v1.1
	时  间:	1999-05-05
******************************************************************************/
#include <stdio.h>
#include <graphics.h>
#include "window.h"

//构造函数.
Window::Window(struct RECT R): Object(R)
{
	//设定总控件数为0.
	ObjectNumber = 0;
	//将背景设为灰色.
	SetBkColor(7);
	//将控件指针数组全部改为NULL;
	for(int i=0;i<CON_NUMBER;i++) Con[i]=NULL;
}

//析构函数.
Window::~Window()
{
}

//运行窗口.
void
Window::DoIt()
{
	//临时变量,记录上一个控件的ID;
	int t;
	//如果窗口中没有控件直接返回.
	if(ObjectNumber == 0)
	{
		return;
	}
	//在窗口中查找下一个控件.
	int i = FindNext(-1);
	unsigned int Event = 0;
	for(;;)
	{
		//运行发现的控件.
		Con[i]->Run();
		//获取上一个控件运行所产生的事件.
		GetEvent(Event);
		switch (Event)
		{
			case KEY_RETURN:
				//回车.
				t = i;
				i = FindNext(i);
				if(i == t)
				{
					PutEvent(Event);
					return;
				}
				break;
			case EV_PREV:
				//上一个.
				i = FindPrev(i);
				break;
			case EV_NEXT:
				//下一个.
				i = FindNext(i);
				break;
			case EV_QUIT:
				//退出.
				PutEvent(EV_QUIT);
				return;
			default:
				PutEvent(Event);
				return;
		};
	}
}

//查找下一个控件.
int
Window::FindNext(int now)
{
	int i;
	//从控件数组中的当前位置开始判断是否存在控件,存在则返回控件ID.
	for(i=now + 1; i<CON_NUMBER; i++)
	{
jmp:
		if(Con[i] != NULL) return i;
	}
	//未找到控件则从头再来.
	if(i == CON_NUMBER)
	{
		i=0;
		goto jmp;
	}
	return 0;
}

//查找上一个控件.
int
Window::FindPrev(int now)
{
	int i;
	//从控件数组中的当前位置开始判断是否存在上一个控件,存在则返回控件ID.
	for(i=now - 1; i>=0; i--)
	{
jmp:
		if(Con[i] != NULL) return i;
	}
	//未找到控件则从尾再来.
	if(i == -1)
	{
		i=CON_NUMBER - 1;
		goto jmp;
	}
	return 0;
}

//将控件插入窗口.
void
Window::Insert(Object *con)
{
	//预留的控件指针数组被赋值.
	Con[ObjectNumber] = con;
	//窗口种的总控件数加一.
	ObjectNumber++;
}

//显示整个窗口.
void
Window::Show()
{
	//先显示窗口.
	Object::Show();
	//再显示各控件.
	for(int i=0; i<ObjectNumber; i++)
	{
		if(Con[i] != NULL)
		{
			Con[i]->Show();
		}
	}
}

//隐藏整个窗口.
void
Window::Hide()
{
/*	//先将窗口中有的控件隐藏起来.
	for(int i=0; i<ObjectNumber; i++)
	{
		if(Con[i] != NULL)
		{
			Con[i]->Hide();
		}
	}
*/	//隐藏窗口自己.
	Object::Hide();
}

void
Window::Draw()
{
	//先画对象.
	Object::Draw();

		//画3D边框.
		setcolor(15);
		line(0, 0, Rect.Width, 0);
		line(0, 0, 0, Rect.Height);
		line(1, Rect.Height-1, Rect.Width-1, Rect.Height-1);
		line(Rect.Width-1, 1, Rect.Width-1, Rect.Height-1);
		setcolor(8);
		line(1, 1, Rect.Width-2, 1);
		line(1, 1, 1, Rect.Height-2);
		line(0, Rect.Height, Rect.Width, Rect.Height);
		line(Rect.Width, 0, Rect.Width, Rect.Height);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -