📄 window.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 + -