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

📄 mclient.cpp

📁 飞虹 vision仿windows开发
💻 CPP
字号:
#include"\sunshine\include\mclient.h"
#include<string.h>
#include<alloc.h>
#define DELTA 10
MClient::MClient(int x,int y,int w,int h,char *idname)
 : MObj(x,y,w,h,idname)
 {
  window=new MWindow*[DELTA];
  windownum=0;
  maxwindow=DELTA;
 }
MClient::~MClient()
 {
  for(int i=0;i<windownum;i++)
	delete window[i];
  delete window;
 }
void MClient::Add(MWindow &awin)
 {
  int i;
  windownum++;
  if(windownum>1)
	window[0]->SetAc(0);
  if(windownum>maxwindow)
	{
	 maxwindow+=DELTA;
	 window=(MWindow**)realloc(window,maxwindow);
	}
  if(windownum>1)
	 for(i=maxwindow-2;i>=0;i--) window[i+1]=window[i];
  window[0]=&awin;
  window[0]->SetAc(1);
 }
void MClient::Del()
 {
	delete window[0];
	for(int i=0;i<maxwindow-1;i++)
	 window[i]=window[i+1];
	window[0]->SetAc(1);
	windownum--;
 }
int MClient::IsInAny(MWindow *p)
 {
	int x1=p->x(),y1=p->y();
	int x2=p->x()+p->w()-1;
	int y2=p->y()+p->h()-1;
	int xx1,yy1,xx2,yy2;
	int i,j;
	char *name=p->GetId();
	for(i=0;i<windownum;i++)
	 {
	  if(!strcmp(window[i]->GetId(),name))
		 continue;
	  xx1=window[i]->x();
	  yy1=window[i]->y();
	  xx2=window[i]->x()+window[i]->w()-1;
	  yy2=window[i]->y()+window[i]->h()-1;
		for(j=x1;j<=x2;j++)
		  if(j>=xx1&&y1>=yy1&&j<=xx2&&y1<=yy2) return 1;
		for(j=y1;j<=y2;j++)
		  if(x2>=xx1&&j>=yy1&&x2<=xx2&&j<=yy2) return 1;
		for(j=x1;j<=x2;j++)
		  if(j>=xx1&&y2>=yy1&&j<=xx2&&y2<=yy2) return 1;
		for(j=y1;j<=y2;j++)
		  if(x1>=xx1&&j>=yy1&&x1<=xx2&&j<=yy2) return 1;
	 }
	return 0;
 }
void MClient::ToHead(int i)
 {
  int j;
  MWindow *temp;
  if(i==0||i>=windownum) return;
  temp=window[i];
  for(j=i-1;j>=0;j--) window[j+1]=window[j];
  window[0]=temp;
 }
int MClient::Process()
 {
  Mouse am;
  int value,i,j;
  if(!windownum) return 1;

  if(firstrun)
	 {
	  firstrun=0;
	  for(i=windownum;i>0;i--)
		 window[i-1]->Process();
	 }

  if(am.lp())
	 {
		for(int i=0;i<windownum;i++)
		  {
			MWindow &awin=*(window[i]);
			if(am.x()>=awin.x()&&am.y()>=awin.y()&&
			am.x()<=awin.x()+awin.w()-1&&am.y()<=
			awin.y()+awin.h()-1) break;
		  }
		if(i>0&&i<windownum)
		  {
			if(!IsInAny(window[i]))
			 {
				window[0]->SetAc(0);
				window[0]->LightTopic();
				ToHead(i);
				window[0]->SetAc(1);
				window[0]->LightTopic();
				return 1;
			  } //end when no in any window's rectangle
		 for(j=0;j<=i;j++) window[j]->Restore();
		 window[0]->SetAc(0);
		 ToHead(i);
		 window[0]->SetAc(1);
		 for(j=i;j>=0;j--)
		  {
			 window[j]->Save();
			 window[j]->Redraw();
		  }
		  return 1;
		}//end if else

	}//end if
  for(i=0;i<windownum;i++)
	 {
	  value=window[i]->Process();
	  switch(value)
		{
		 case DEL: Del();
				  if(!windownum) return 1;
				  window[0]->Redraw();
		}
	 }
	return 1;
 }

⌨️ 快捷键说明

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