控制台界面控制(四)

来源:互联网 发布:网络编程视频教程 编辑:程序博客网 时间:2024/05/16 09:33
设置光标位置

// ---- 设置光标位置void CMyConsole::Goto(short x, short y){COORD pos = {x, y};SetConsoleCursorPosition(hOut, pos);}
设置窗口大小

关于窗口大小的问题,我有许多的疑问。可实际上它只涉及到两个函数:SetConsoleScreenBufferSize 和 SetConsoleWindowInfo;

SetConsoleScreenBufferSize:第一个函数的作用是设置缓冲区大小。那什么是缓冲区呢,缓冲区是用来放置文本的地方。当我们把文本放在缓冲区中,它将按照坐标关系显示在控制台窗口中。控制台缓冲区的原点坐标是(0,0),最大的坐标是缓冲区大小减1。例如缓冲区大小为80*25,则最大坐标为(79*24)。需要注意的是,缓冲区大小不得小于控制台的窗口大小;不得小于系统设定的最小长宽;

SetConsoleWindowInfo:这个函数的作用是设置控制台窗口的位置和大小。函数无效的两种情况:1. 当它设置大于缓冲区的大小时;2. 当它的右坐标小于左坐标,或者下坐标小于上坐标时。如果设置的控制台窗口尺寸小于缓冲区尺寸,则会出现滚动条;如果刚刚好,就不会出现滚动条。

// ---- 设置窗口大小void CMyConsole::SetSize(short len, short wid)  // 设置同样的缓冲区和窗口大小,不会出现滚动条{COORD pos = {len, wid};SMALL_RECT rc = {0, 0, len-1, wid-1};// 坐标从0开始// -- 设置窗口信息// @paramHANDLE[in] 窗口句柄// @parambool[in] 意思不明,但在true时才起作用// @paramRECT *[in] 分别指定窗口左上角坐标和右下角坐标// #returnbool 成功返回非0值SetConsoleWindowInfo(hOut, true, &rc);// -- 设置缓冲区大小// -- 长和宽不得小于控制台大小;不得小于系统最小限制。否则设置无效// @paramHANDLE[in] 窗口句柄// @paramCOORD[in] 坐标结构,包含长和宽// #returnbool 成功返回非0值SetConsoleScreenBufferSize(hOut, pos);}
实例测试

#include "MyConsole.h"#include <stdio.h>int main(){CMyConsole myConsole;myConsole.SetSize(60, 30);myConsole.Goto(18, 14);printf("设置完毕!尺寸大小:60*30!\n");myConsole.Goto(0, 0);system("pause");return 0;}

现在一个比较搞不懂的问题是,当我使用完一次SetSize函数后,就无法再使用第二次了。(为啥??)


原创粉丝点击