📄 mainframe.cpp
字号:
//#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 + -