📄 muldocm.cpp
字号:
/*********************************************
Muldocm.cpp文件
定义了main()函数,对软件中各个对象进行调度
**********************************************/
#include <bios.h>
#include <conio.h>
#include <dir.h>
#include <dos.h>
#include <malloc.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//改变显示模式函数
//改变指定区域的颜色
void ChangeColor(int iLeft,int iTop,int iRight,int iBottum,char cColor)
{
//开辟空间容纳屏幕数据
int iTotal=2*(iRight-iLeft+1)*(iBottum-iTop+1);
char *iShowBuf = (char*)malloc(iTotal);
//截取屏幕数据
gettext(iLeft,iTop,iRight,iBottum,iShowBuf);
//改变显示颜色
for(int i=0;i<iTotal;i+=2) iShowBuf[i+1]=cColor;
//将改变后的数据显示到屏幕上
puttext(iLeft,iTop,iRight,iBottum,iShowBuf);
free(iShowBuf);
}
#include <msg.cpp>
#include <item.cpp>
#include <clipb.cpp>
#include <mouse.cpp>
#include <dialgbox.cpp>
#include <menuitem.cpp>
#include <tw2.cpp>
//键盘检测函数
//如果键盘有键入,返回键入字符
int KeyInput()
{
int c;
REGS r;
//用0x21号中断检测键盘
r.x.ax=0x0b00;
int86(0x21,&r,&r);
if(!r.h.al) return 0; //如果没有键入,函数返回
//如果有键入,获取键码
if(c=getch()) c&=0xff; //如果不是扩展字符,记录ASCII
else
{
c=0xff00|getch(); //如果是扩展字符,先记录键码
if(bioskey(2) & 3) //然后判断组合键
c&=0x0fff; //Shift键按下
if(bioskey(2) & 8)
{c&=0xff;c-=0x78;c|=0xf000;} //Alt键按下
}
return c;
}
//新窗口注册函数
void NewWindows(TextWindows *WinArry[],int &iCurItem)
{
for(int i=0;i<6&&WinArry[i];i++); //寻找可以用于注册的指针
if(i==6) return; //如果没有找到,那么函数返回
int iPreItem=iCurItem;
iCurItem=i;
TextWindows *CurItem=new TextWindows(iCurItem+1); //建立新窗口
WinArry[iCurItem]=CurItem; //将焦点交给新窗口
TextWindows *PreItem=WinArry[iPreItem];
//定义窗口位置和大小
CurItem->cTop=2+iCurItem;
CurItem->cLeft=1+iCurItem;
CurItem->cHeight=25-CurItem->cTop+1;
CurItem->cWidth=80-CurItem->cLeft+1;
Msg TheMsg2;
if(iPreItem>=0&&WinArry[iPreItem]) //如果有已经存在的窗口
{
TheMsg2.iOpera=mWINLOSFOCUS; //那么旧窗口失去焦点
WinArry[iPreItem]->ComMsg(TheMsg2);
}
//新窗口得到焦点并刷新
TheMsg2.iOpera=mWINGETFOCUS;
WinArry[iCurItem]->ComMsg(TheMsg2);
TheMsg2.iOpera=mITEMREFRESH;
WinArry[iCurItem]->ComMsg(TheMsg2);
}
//关闭窗口函数
void CloseWindows(TextWindows *WinArry[],int &iCurItem)
{
int iTemp=iCurItem;
char cpTop=2,cpLeft=1,cpWidth=0,cpHeight=0;
if(iCurItem<0) return; //如果没有窗口,那么函数返回
if(WinArry[iCurItem]) //如果当前窗口序号合法
{
//记录当前窗口位置和大小
cpTop=WinArry[iCurItem]->cTop;
cpLeft=WinArry[iCurItem]->cLeft;
cpHeight=WinArry[iCurItem]->cHeight;
cpWidth=WinArry[iCurItem]->cWidth;
//析构当前窗口
delete WinArry[iCurItem];
//释放指向该窗口的指针
WinArry[iCurItem]=NULL;
}
//向前寻找存在的窗口作为当前窗口
iCurItem--;
while(iCurItem!=iTemp)
{
if(iCurItem<0) iCurItem=6;
//如果找到存在的窗口,那么将窗口作为当前窗口并跳出循环
if(iCurItem<6&&WinArry[iCurItem]) break;
iCurItem--;
}
//从屏幕上抹去被删除的窗口的图象
int iClearBuf[80];
for(int i=0;i<cpWidth;i++) iClearBuf[i]=' '|(BLACK<<12)|(WHITE<<8);
for(i=cpTop;i<cpTop+cpHeight;i++)
puttext(cpLeft,i,cpLeft+cpWidth-1,i,iClearBuf);
if(iCurItem==iTemp) //如果没有没有找到存在的窗口
iCurItem=-1; //那么使菜单得到焦点
else
{
//将使被找到的窗口得到焦点
Msg TheMsg2;
TheMsg2.iOpera=mWINGETFOCUS;
WinArry[iCurItem]->ComMsg(TheMsg2);
TheMsg2.iOpera=mITEMREFRESH;
WinArry[iCurItem]->ComMsg(TheMsg2);
}
}
//寻找下一个窗口函数
void NextWindows(TextWindows *WinArry[],int &iCurItem)
{
int iTemp=iCurItem;
if(iCurItem<0) return;//如果没有窗口存在,那么函数返回
//寻找下一个窗口
for(iCurItem++;iCurItem!=iTemp;iCurItem++)
{
if(iCurItem>=6) iCurItem=0;
if(WinArry[iCurItem]) break;
}
//焦点转换
Msg TheMsg2;
if(iCurItem!=iTemp)
{
TheMsg2.iOpera=mWINLOSFOCUS;
WinArry[iTemp]->ComMsg(TheMsg2);
TheMsg2.iOpera=mITEMREFRESH;
WinArry[iCurItem]->ComMsg(TheMsg2);
}
TheMsg2.iOpera=mWINGETFOCUS;
WinArry[iCurItem]->ComMsg(TheMsg2);
}
//寻找窗口
//当鼠标点击在当前窗口的外面,那么通过该函数寻找被点击的窗口
void SearchOtherWin(TextWindows *WinArry[],int &iCurItem,int iPose)
{
int iScrChar;
char x=iPose>>8,y=iPose&0xff;
Msg TheMsg;
while(y>1)
{
gettext(x,y,x,y,&iScrChar);
if(y==(iPose&0xff)) iScrChar^=0x7f00;
if(iScrChar==(0xff&'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -