您的位置:首页 > 其它

控制台界面控制(四)

2016-01-07 19:32 232 查看
本文为转载文档,源文档链接:http://blog.csdn.net/bnb45/article/details/7983562
设置光标位置

[cpp] view
plaincopy

// ---- 设置光标位置

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. 当它的右坐标小于左坐标,或者下坐标小于上坐标时。如果设置的控制台窗口尺寸小于缓冲区尺寸,则会出现滚动条;如果刚刚好,就不会出现滚动条。

[cpp] view
plaincopy

// ---- 设置窗口大小

void CMyConsole::SetSize(short len, short wid) // 设置同样的缓冲区和窗口大小,不会出现滚动条

{

COORD pos = {len, wid};

SMALL_RECT rc = {0, 0, len-1, wid-1}; // 坐标从0开始

// -- 设置窗口信息

// @param HANDLE [in] 窗口句柄

// @param bool [in] 意思不明,但在true时才起作用

// @param RECT * [in] 分别指定窗口左上角坐标和右下角坐标

// #return bool 成功返回非0值

SetConsoleWindowInfo(hOut, true, &rc);

// -- 设置缓冲区大小

// -- 长和宽不得小于控制台大小;不得小于系统最小限制。否则设置无效

// @param HANDLE [in] 窗口句柄

// @param COORD [in] 坐标结构,包含长和宽

// #return bool 成功返回非0值

SetConsoleScreenBufferSize(hOut, pos);

}

实例测试

[cpp] view
plaincopy

#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函数后,就无法再使用第二次了。(为啥??)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: