控制台是编程中最实用的窗口,下面几招可以随心控制控制台。
1.改变颜色
(1)全局
用color指令可以迅速调节全控制台的文字颜色及背景颜色:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("PureColorText\n");
system("pause");
system("color 0A");
printf("\nTurn to green\n");
system("pause");
return 0;
}
可以发现最后修改了全部文字的颜色。
color本身就是系统带的,在cmd打color /?可以看到用法:
这个很好理解。
(2)局部
那么怎么改一小部分的颜色呢?就稍微有些麻烦:
VOID SetColor(UINT uFore,UINT uBack) {
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle,uFore+uBack*0x10);
}
用了俩Windows API,这样就比较方便了:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
VOID SetColor(UINT uFore,UINT uBack) {
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle,uFore+uBack*0x10);
}
int main()
{
SetColor(14,0);
printf("Colorful ");
SetColor(11,0);
printf("Text\n");
system("Pause");
return 0;
}
这样就有两种颜色了。
请注意这里的参数与前面的color是相反的.
2.改变控制台大小
为了让输出内容更有条理,需要改变控制台大小。
这里用了另一个命令.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void SetSize(unsigned uCol,unsigned uLine)
{
char cmd[64];
sprintf(cmd,"mode con cols=%d lines=%d",uCol,uLine);
system(cmd);
}
int main()
{
SetSize(80,3);
printf("Very very long....................................\n");
system("Pause");
return 0;
}
这样就弄出一个非常长的控制台,但有点缺陷就是有点延时。
3.换标题
默认的标题是文件路径,超长一串不美观。用这个可以更换标题。
VOID SetTitle(LPCSTR lpTitle) {
SetConsoleTitle(lpTitle);
}
往里投个常量字符串参数就能改变标题了.
4.指定文字输出坐标
这个功能就比较厉害了,在做游戏里就很实用。
VOID SetPosC(COORD a) { // set cursor
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(out, a);
}
VOID SetPos(int x, int y) { // set cursor2
COORD pos= {x, y};
SetPosC(pos);
}
两种改变方式,一个传坐标,一个直接传xy(单位:字符长宽).
可以直接跳到所指区域,很方便!
5.改变窗口位置
这个功能也不是非常重要:
LONG GetWindowWidth(HWND hwnd){
RECT rect=GetWindowRect(hwnd);
return (rect.right - rect.left);
}
LONG GetWindowHeight(HWND hwnd){
RECT rect=GetWindowRect(hwnd);
return (rect.bottom - rect.top);
}
WINBOOL MoveWindow(HWND hwnd,
int X=0,int Y=0,
bool bRepaint=true)
{
LONG w,h;
w=GetWindowWidth(hwnd);
h=GetWindowHeight(hwnd);
MoveWindow(hwnd,X,Y,w,h,bRepaint);
}
请用第三个函数就能移动控制台了,说一下参数:
WINBOOL MoveWindow(HWND hwnd, //窗口句柄
int X=0,int Y=0, //指定屏幕内坐标(单位:像素)
bool bRepaint=true); //是否重绘窗口
用的时候很简单:
MoveWindow(GetConsoleWindow(),100,100); //把控制台拖到(100,100)
6.隐藏光标
控制台输出、输入时都有一个下划线光标在那里闪,用这个函数可以隐藏它:
VOID HideConsoleCursor(VOID) {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),
&cursor_info);
}
直接调用即可。
7.让关闭按钮无效化
这个用于很作死或者有特殊目的的程序:
VOID KillConsoleCloseButton(VOID) {
DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE),
SC_CLOSE, MF_DISABLED);
DrawMenuBar(GetConsoleWindow());
}
OK!
//注意:这几个开头大写的函数必须包含windows.h.