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

📄 muldocm.cpp

📁 本软件是简单的文本编辑器
💻 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 + -