?? 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 + -