【C语言】超级简单的字符界面

闲来无聊,写了一个小时候看到其他软件经常出现的字符界面。

实现了一定的通用性,字体居中等等;逻辑上没什么难度,本来是C语言写的,由于太过无聊,又改成C++了

#include<iostream>
#include<windows.h>
#include<String.h>
#include<time.h>
#pragma comment(lib,"user32.lib")
using namespace std;

class UI{
		void Pos(int x,int y);
	public:
		void setTime();
		void surface(int x,int y,int start_x ,int start_y,WORD color);
		void Information(int x,int y,string str,string author,string data,int start_x,int start_y,WORD color);
}; 

void UI::Pos(int x, int y){
	COORD pos;
    HANDLE hOutput;
    pos.X = x;
    pos.Y = y;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput, pos);
}
void UI::surface(int x,int y,int start_x =0,int start_y =0,WORD color=FOREGROUND_RED){
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	GetConsoleScreenBufferInfo(hConsole, &csbi);
	start_x+=csbi.dwCursorPosition.X;
	start_y+=csbi.dwCursorPosition.Y;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);  
	int sign_y = 0;
	Pos(start_x,start_y+sign_y);//start
	for(int i =0 ; i < x+2 ; i++){
		cout << "|";
	}
	sign_y++;
	for(int j=start_y+sign_y;j<y+start_y;j++){
		Pos(start_x,j);
		cout << "||";
		Pos(x+start_x,j);
		cout << "||";
	}
	sign_y+=y;
	Pos(start_x,start_y+sign_y-1);
	for(int i =0 ; i <= x+1 ; i++){
		cout << "|";
	}
	sign_y++; 
	Pos(start_x,start_y+sign_y);
}
void UI::Information(int x,int y,string str,string author="",string data="",int start_x=0,int start_y=0,WORD color=FOREGROUND_GREEN){
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	GetConsoleScreenBufferInfo(hConsole, &csbi);
	start_x+=csbi.dwCursorPosition.X;
	start_y+=csbi.dwCursorPosition.Y;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);  
	int sign_y = 0; 
	Pos(start_x,start_y+sign_y);//start
	for(int i =0 ; i < x+2 ; i++){
		cout << "|";
	}
	sign_y++;
	for(int k=0;k<3;k++){
		Pos(start_x,start_y+k+sign_y);
			cout << "||";
		Pos(start_x+x,start_y+k+sign_y);
		cout << "||";
	}
	sign_y+=3;
	if((x-str.length())/2<0||(x-str.length())/2>x/2){
		str = "错误!字符长度过长!"; 
	}
	Pos(x/2-(str.length()/2),start_y+2);
	cout << str;
	Pos(start_x,start_y+sign_y);
	for(int i =0 ; i < x+2 ; i++){
		cout << "|";
	}
	sign_y++;
	for(int k=0;k<3;k++){
		Pos(start_x,start_y+k+sign_y);
			cout << "||";
		Pos(start_x+x,start_y+k+sign_y);
		cout << "||";
	}
	sign_y++;
	Pos(start_x+x-6-author.length(),start_y+sign_y);//署名 
	cout << "作者:" << author;
	sign_y++;
	Pos(start_x+x-13-author.length(),start_y+sign_y);//日期 
	cout << "日期:" << data ;
	sign_y++;
	Pos(start_x,start_y+sign_y);
	for(int i =0 ; i < x+2 ; i++){
		cout << "|";
	}
	sign_y++; 
	Pos(start_x,start_y+sign_y);
}
void UI::setTime(){
	time_t now;
	struct tm *tm_now;
	time(&now);
	tm_now = localtime(&now);
	Pos(90,20);
	cout <<tm_now->tm_year+1900 << "年" << tm_now->tm_mon+1 << "月" << tm_now->tm_mday << "日" ;
	Pos(92,21);
	cout << tm_now->tm_hour<< "时" << tm_now->tm_min << "分" << tm_now->tm_sec << "秒";
	Pos(90,30);
} 
int main(){
	SetConsoleTitle("测试程序");
	UI ui;
	ui.Information(80,30,"爱我中华","拉阿鲁","2018年7月30日");
	ui.surface(80,30,0,0); 
	while(true){
		ui.setTime();
		Sleep(1000);
	}
	return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值