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

📄 mainframe.cpp

📁 这是一个族谱的管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//#include <windows.h>
//#include <conio.h>
#include"jiapu.h"
#include"frame.h"
#include "else.h"
/*button::button(COORD pos,char* name,WORD att,HANDLE h)
{
	pos1=pos;len=strlen(name);att1=att;
	FillConsoleOutputAttribute(h, att, strlen(name), pos, NULL);
    WriteConsoleOutputCharacter(h,name,strlen(name),pos,NULL);

}*/
void button::createbutton(COORD pos,char* name,WORD att,WORD att2,HANDLE h)//创建按钮
{
	pos1=pos;
	strcpy(buttonname,name);
	len=strlen(name);
	att1=att;
	att0=att2;
	p=true;
	FillConsoleOutputAttribute(h, att, strlen(name), pos, NULL);
    WriteConsoleOutputCharacter(h,name,strlen(name),pos,NULL);

}

void button::hidebutton(HANDLE h,BOOL tal)          //设置按钮的可见性
{
	p=tal;
	if(p)                                             //p为true则显示按钮
	{
			FillConsoleOutputAttribute(h, att1, len, pos1, NULL);
			WriteConsoleOutputCharacter(h,buttonname,len,pos1,NULL);

	}
	else                                            //p为false则隐藏按钮
	{
		char a[30];
		for(int i=0;i<len;i++)
			a[i]=' ';
	
	FillConsoleOutputAttribute(h, att1,len, pos1, NULL);
    WriteConsoleOutputCharacter(h, a,len,pos1,NULL);

	}
}
	

void full(BOOL flag)                              //全屏 
{
		typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD);
		typedef BOOL (WINAPI *PROCGETCONSOLEDISPLAYMODE)(LPDWORD);

		PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode;
		PROCGETCONSOLEDISPLAYMODE GetConsoleDisplayMode;

		HMODULE hKernel32 = GetModuleHandle("kernel32");

		SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODE)
		GetProcAddress(hKernel32,"SetConsoleDisplayMode");  //用GetProcAddress函数动态加载

		GetConsoleDisplayMode = (PROCGETCONSOLEDISPLAYMODE)
		GetProcAddress(hKernel32,"GetConsoleDisplayMode");  
		HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

		DWORD dwOldMode;
	if(flag)
	{	//设为全屏
		SetConsoleDisplayMode(hOut,1,&dwOldMode);
		
	}
	else
	{	//退出全屏
		SetConsoleDisplayMode(hOut,dwOldMode,&dwOldMode);
	}
}


BOOL fullScreen(BOOL tal,button a,HANDLE hOut,HANDLE hIn)
{
	if(tal)
	{
		full(tal);
	    return false;
	}
		else
	{	
			full(tal);
			return true;	
	}

}


BOOL mouseclickr(HANDLE hOut,HANDLE hIn,button &a,INPUT_RECORD mouseRec)          //鼠标单击右键则返回true
{

if(a.p)
{
		
	if (mouseRec.EventType == MOUSE_EVENT)
	{
		if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
		{	
			if (mouseRec.Event.MouseEvent.dwButtonState ==RIGHTMOST_BUTTON_PRESSED)
			{
				if (mouseRec.EventType == MOUSE_EVENT)
				{
					if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
					{	
						if (mouseRec.Event.MouseEvent.dwButtonState ==RIGHTMOST_BUTTON_PRESSED)
						{
							DWORD res;
							ReadConsoleInput(hIn, &mouseRec, 1,&res);
							FillConsoleOutputAttribute(hOut, a.att1 ,a.len, a.pos1 , NULL);
							return true;// 
						}
						else 
							return false;
					}
					else return false;
				}
				else return false;
			}
			else 
				return false;
		}
		else 
			return false;
	}
	else 
		return false;
}
else return false;

}

BOOL mouseclickl(HANDLE hOut,HANDLE hIn,button &a,INPUT_RECORD mouseRec)          //鼠标单击左键则返回true
{
//	INPUT_RECORD mouseRec;
//	DWORD state = 0, res;
//	ReadConsoleInput(hIn, &mouseRec, 1,&res);
	if(a.p)
	{
	
	if (mouseRec.EventType == MOUSE_EVENT)
	{
		if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
		{	
			if (mouseRec.Event.MouseEvent.dwEventFlags == 0)
			{	
				DWORD  res;
            	ReadConsoleInput(hIn, &mouseRec, 1,&res);
				if (mouseRec.EventType == MOUSE_EVENT)
				{

					if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
					{	
						if (mouseRec.Event.MouseEvent.dwEventFlags == 0)
						{	
							FillConsoleOutputAttribute(hOut, a.att1 ,a.len , a.pos1 , NULL);
							return true;
						}
						else return false;
					}
					else return false;
				}
				else return false;
			}
			else 
				return false;
		}
		else 
			return false;
	}
	else 
		return false;
	}
	else return false;


}
void  mousemove(HANDLE hOut,HANDLE hIn,button &a,INPUT_RECORD mouseRec)
{
//	INPUT_RECORD mouseRec;
//	DWORD state = 0, res;

//	ReadConsoleInput(hIn, &mouseRec, 1,&res);
	if(a.p)
	{
	
	if (mouseRec.EventType == MOUSE_EVENT)

		if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
		{	
			if (mouseRec.Event.MouseEvent.dwEventFlags ==MOUSE_MOVED)
			{
					COORD pos;
					pos.X=a.pos1.X+1;
					pos.Y=a.pos1.Y;
				FillConsoleOutputAttribute(hOut, a.att0,a.len -2, pos , NULL);// 
			}
		}
		else
			FillConsoleOutputAttribute(hOut, a.att1 ,a.len , a.pos1 , NULL);
	}
	else return;

}

void  mousemove1(HANDLE hOut,HANDLE hIn,button &a,INPUT_RECORD mouseRec)
{
//	INPUT_RECORD mouseRec;
//	DWORD state = 0, res;

//	ReadConsoleInput(hIn, &mouseRec, 1,&res);
	if(a.p)
	{
	
	if (mouseRec.EventType == MOUSE_EVENT)

		if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
		{	
			if (mouseRec.Event.MouseEvent.dwEventFlags ==MOUSE_MOVED)
			{
				
				FillConsoleOutputAttribute(hOut, a.att0,a.len,a.pos1 , NULL);// 
			}
		}
		else
			FillConsoleOutputAttribute(hOut, a.att1 ,a.len , a.pos1 , NULL);
	}
	else return;

}


BOOL mousedoubleclick(HANDLE hOut,HANDLE hIn,button &a,INPUT_RECORD mouseRec)                 //鼠标双击击按钮则返回true
{
//	INPUT_RECORD mouseRec;
//	DWORD state = 0, res;
//	ReadConsoleInput(hIn, &mouseRec, 1,&res);
	if(a.p)
	{
	

	if (mouseRec.EventType == MOUSE_EVENT)
	{
		if(mouseRec.Event .MouseEvent .dwMousePosition .X>a.pos1 .X &&mouseRec.Event .MouseEvent .dwMousePosition .X<=a.pos1 .X+a.len &&mouseRec.Event .MouseEvent .dwMousePosition .Y ==a.pos1 .Y )
		{	
			if (mouseRec.Event.MouseEvent.dwEventFlags ==DOUBLE_CLICK)
			{
				FillConsoleOutputAttribute(hOut, a.att1 ,a.len , a.pos1 , NULL);
				return true;// 
			}
			else 
				return false;
		}
		else 
			return false;
	}
	else
		return false;
	}
	else return false;

}	

BOOL frame1(HANDLE hOut,HANDLE hIn)                         //弹出退出对话框
{
    button a1,b,c,a2,d,e[3],f[3];
	INPUT_RECORD mouseRec;
	DWORD  res;
	COORD posa1={55,11},posb={58,14},posc={66,14},posa2={55,15},posd={60,12}; //┣ ━ ┳ ┃┣ ┗
	
	COORD pose0={55,12},pose1={55,13},pose2={55,14};
	COORD posf0={75,12},posf1={75,13},posf2={75,14};

	a1.createbutton(posa1,"┏━━━━━━━━━┓",14,14,hOut);
	a2.createbutton(posa2,"┗━━━━━━━━━┛",14,14,hOut);
	d.createbutton(posd,"确定要退出?",14,256,hOut);

	b.createbutton(posb,"【确定】",14,236,hOut);
	c.createbutton(posc,"【取消】",14,236,hOut);
	
	e[0].createbutton(pose0,"┃",14,236,hOut);
	e[1].createbutton(pose1,"┃",14,236,hOut);
	e[2].createbutton(pose2,"┃",14,236,hOut);
	f[0].createbutton(posf0,"┃",14,236,hOut);
	f[1].createbutton(posf1,"┃",14,236,hOut);
	f[2].createbutton(posf2,"┃",14,236,hOut);
	
	for(;;)
	{
		ReadConsoleInput(hIn, &mouseRec, 1,&res);
		mousemove(hOut,hIn,b,mouseRec);
		mousemove(hOut,hIn,c,mouseRec);
		if(mouseclickl(hOut,hIn,b,mouseRec))
		{
			a1.hidebutton(hOut,false);
			a2.hidebutton(hOut,false);
			b.hidebutton(hOut,false);
			c.hidebutton(hOut,false);
			d.hidebutton(hOut,false);
			for(int i=0;i<3;i++)
			{
				e[i].hidebutton(hOut,false);
				f[i].hidebutton(hOut,false);
			}
			return true;
		}
		if(mouseclickl(hOut,hIn,c,mouseRec))
		{	a1.hidebutton(hOut,false);
	    	a2.hidebutton(hOut,false);
			b.hidebutton(hOut,false);
			c.hidebutton(hOut,false);
			d.hidebutton(hOut,false);
			for(int i=0;i<3;i++)
			{
				e[i].hidebutton(hOut,false);
				f[i].hidebutton(hOut,false);
			}
			return false;
		}
			
	}

}
	
void setmenu0(button*a,int n,HANDLE h)                   //初始化菜单
{
	for(int i=1;i<n;i++)
	{
		a[i].hidebutton(h,false);
	}		
}
void setmenu1(button*a,int n,HANDLE h)                    //设置菜单
{
	for(int i=1;i<n;i++)
	{
		a[i].hidebutton(h,true);
	}		
}


void windows1(HANDLE hOut,HANDLE hIn)
{
	
	BOOL tal=true;
	INPUT_RECORD mouseRec;
	DWORD  res;	

	hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄

	hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄
	
	CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息

	GetConsoleScreenBufferInfo(hOut, &bInfo );// 获取窗口缓冲区信息
	

	COORD size = {200, 200},posText={0,0};

	SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小

	SMALL_RECT rc = {10,20, 100,52}; // 重置窗口位置和大小

	SetConsoleWindowInfo(hOut,true ,&rc);

	COORD p={1,1},poss={0,10},poss1={0,0},poss2={20,11};
	COORD posa={50,5},pos1={10,15},posb={64,5},posc0={34,2};

	COORD posc1={33,1},posc2={33,3},posc3={32,2},posc4={48,2};

	FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X*bInfo.dwSize.Y-1, posText, NULL);
	
	FillConsoleOutputAttribute(hOut, 14, bInfo.dwSize.X*bInfo.dwSize.Y-1, posText, NULL); 
	
	SetConsoleTextAttribute(hOut,14);                                //设置窗口属性

	SetConsoleCursorPosition(hOut,p);                  //设置光标的位置

	FillConsoleOutputAttribute(hOut, 170, 199, poss, NULL); 
	FillConsoleOutputAttribute(hOut, 170, 199, poss1, NULL); 
	for(;poss1.Y<199;poss1.Y++)
	{
		if(poss2.Y<=poss1.Y)
		{
			FillConsoleOutputAttribute(hOut, 170, 1, poss2, NULL); 

			poss2.Y++;
		}
		FillConsoleOutputAttribute(hOut, 170, 1, poss1, NULL); 
	}
	
	
	button a,b,c[5],d[4];   //全屏按钮,退出按钮
    
	COORD posd0={9,5},posd1={9,6},posd2={9,7},posd3={9,8};
	a.createbutton(posa,"【全屏切换】",14,236,hOut);

	b.createbutton(posb,"【 退 出 】",14,236,hOut);

	c[0].createbutton(posc0," 家谱管理系统 ",14,180,hOut);

	c[1].createbutton(posc1,"︽︽︽︽︽︽︽︽",14,110,hOut);
    c[2].createbutton(posc2,"︾︾︾︾︾︾︾︾",14,110,hOut);
	c[3].createbutton(posc3,"§",14,110,hOut);
	c[4].createbutton(posc4,"§",14,110,hOut);

	d[0].createbutton(posd0,"【 文 件 】",14,236,hOut);          //第一个菜单 新建菜单
	d[1].createbutton(posd1,"【 新 建 】",14,236,hOut);
	d[2].createbutton(posd2,"【 打 开 】",14,236,hOut);
	d[3].createbutton(posd3,"【 退 出 】",14,236,hOut);
	                                           //菜单可见性
	button e[5];                                                  //编辑菜单
    COORD pose0={22,5},pose1={22,6},pose2={22,7},pose3={22,8},pose4={22,9};
	e[0].createbutton(pose0,"【 编 辑 】",14,236,hOut);
	e[1].createbutton(pose1,"【 剪 切 】",14,236,hOut);
	e[2].createbutton(pose2,"【 复 制 】",14,236,hOut);
	e[3].createbutton(pose3,"【 粘 贴 】",14,236,hOut);
	e[4].createbutton(pose4,"【 删 除 】",14,236,hOut);

	button f[3];                                                  //帮助菜单
	COORD posf0={36,5},posf1={36,6},posf2={36,7};
    f[0].createbutton(posf0,"【 帮 助 】",14,236,hOut);
	f[1].createbutton(posf1,"【 关 于 】",14,236,hOut);
	f[2].createbutton(posf2,"【 帮 助 】",14,236,hOut);

	COORD p1={9,13};
    button aa[7];
	aa[0].createbutton(p1," 欢 ",14,236,hOut);
	p1.Y=p1.Y+2;
	aa[1].createbutton(p1," 迎 ",14,236,hOut);
	p1.Y=p1.Y+2;
	aa[2].createbutton(p1," 使 ",14,236,hOut);
	p1.Y=p1.Y+2;
	aa[3].createbutton(p1," 用 ",14,236,hOut);
	p1.Y=p1.Y+2;
	aa[4].createbutton(p1," 本 ",14,236,hOut);
	p1.Y=p1.Y+2;
	aa[5].createbutton(p1," 系 ",14,236,hOut);	
	p1.Y=p1.Y+2;
	aa[6].createbutton(p1," 统 ",14,236,hOut);
	p1.Y=p1.Y+2;

	COORD posq1={21,13},posq2={180,180};
	
	for(;;)

	{

		SetConsoleTextAttribute(hOut,14);                                //设置窗口属性
	    SetConsoleCursorPosition(hOut,p);                  //设置光标的位置
		FillConsoleOutputAttribute(hOut, 170, 199, poss, NULL); 
		FillConsoleOutputAttribute(hOut, 170, 199, poss1, NULL); 
	for(;poss1.Y<199;poss1.Y++)
	{
		if(poss2.Y<=poss1.Y)
		{
			FillConsoleOutputAttribute(hOut, 170, 1, poss2, NULL); 

			poss2.Y++;
		}
		FillConsoleOutputAttribute(hOut, 170, 1, poss1, NULL); 
	}
		setmenu0(d,4,hOut);                                  //文件菜单
		setmenu0(e,5,hOut);                                    //编辑菜单
		setmenu0(f,3,hOut);                                    //帮助菜单

		a.p=true;b.p=true;                                //p为true时鼠标事件有效

		ReadConsoleInput(hIn, &mouseRec, 1,&res);

		mousemove(hOut,hIn,aa[0],mouseRec);
		mousemove(hOut,hIn,aa[1],mouseRec);
		mousemove(hOut,hIn,aa[2],mouseRec);
		mousemove(hOut,hIn,aa[3],mouseRec);
		mousemove(hOut,hIn,aa[4],mouseRec);
		mousemove(hOut,hIn,aa[5],mouseRec);
		mousemove(hOut,hIn,aa[6],mouseRec);
	
		mousemove(hOut,hIn,f[0],mouseRec);                     //帮助菜单
		if(mouseclickl(hOut,hIn,f[0],mouseRec))
		{
			setmenu1(f,3,hOut);	
			for(;;)
			{
				a.p=false;
				b.p=false;
			
				ReadConsoleInput(hIn, &mouseRec, 1,&res);
					mousemove(hOut,hIn,f[1],mouseRec);
  
					mousemove(hOut,hIn,f[2],mouseRec);
	
					if(mouseclickl(hOut,hIn,f[0],mouseRec));
					if (mouseRec.EventType == MOUSE_EVENT)	
						if (mouseRec.Event.MouseEvent.dwEventFlags ==MOUSE_MOVED);
						else
							if(mouseclickl(hOut,hIn,f[1],mouseRec))
							{
							//	a.hidebutton(hOut,false);

								//添加"关于"函数
								clearscreen(hOut,posq1,posq2);
								about(hOut);
								button _a;
								COORD poo={48,26};
								_a.createbutton(poo,"【确定】",14,236,hOut);
								for(;;)
								{
										ReadConsoleInput(hIn, &mouseRec, 1,&res);
										mousemove(hOut,hIn,_a,mouseRec);
										if(mouseclickl(hOut,hIn,_a,mouseRec))
											break;
								}
								clearscreen(hOut,posq1,posq2);
								break;
							}
							else
								if(mouseclickl(hOut,hIn,f[2],mouseRec))
								{
								         //	a.hidebutton(hOut,true);

									//添加帮助函数
									break;
								}
								else
								{
									break;
								}
			}
		}


		

		
		mousemove(hOut,hIn,e[0],mouseRec);                     //编辑菜单
		if(mouseclickl(hOut,hIn,e[0],mouseRec))
		{
			setmenu1(e,5,hOut);	
			for(;;)
			{
				a.p=false;
				b.p=false;
			
				ReadConsoleInput(hIn, &mouseRec, 1,&res);

				//	mousemove(hOut,hIn,e[1],mouseRec);
				//	mousemove(hOut,hIn,e[2],mouseRec);	
				//	mousemove(hOut,hIn,e[3],mouseRec);
				//	mousemove(hOut,hIn,e[4],mouseRec);

					if(mouseclickl(hOut,hIn,e[0],mouseRec));
					if (mouseRec.EventType == MOUSE_EVENT)	
						if (mouseRec.Event.MouseEvent.dwEventFlags ==MOUSE_MOVED);
						else
							if(mouseclickl(hOut,hIn,e[1],mouseRec))
							{
								//在此添加剪切函数
								break;
							}
							else
								if(mouseclickl(hOut,hIn,e[2],mouseRec))
								{

									//添加复制函数
									break;
								}

⌨️ 快捷键说明

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