C语言调整控制台颜色、大小、标题、文字位置、窗口位置、按钮

控制台是编程中最实用的窗口,下面几招可以随心控制控制台。

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 /?可以看到用法:

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.

发布了8 篇原创文章 · 获赞 1 · 访问量 1098

猜你喜欢

转载自blog.csdn.net/cjz2005/article/details/104358000