控制台界面控制(四)
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函数后,就无法再使用第二次了。(为啥??)
设置光标位置
[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函数后,就无法再使用第二次了。(为啥??)
相关文章推荐
- iOS编程 -- webView的使用
- Gmap.net 怎么导入离线地图
- Android安全-对称加密和非对称加密
- Oracle 11g 大小写问题
- zhi pian man tian fei
- Spring学习笔记—装配Bean
- Spring学习笔记—装配Bean
- Oracle 11g 密码过期解决方案
- explicit C++关键字
- 控制台界面控制(三):设置窗口标题
- kerberos认证协议
- startActivityForResult详解
- OK6410 Qt Segment fault
- 编辑距离问题求解思路
- Eclipse背景颜色修改
- Lucky 2048 - The secret of being lucky
- Oracle查询表空间大小
- Linux下用ifconfig命令设置IP、掩码、网关
- LeetCode Permutaions II
- 05.C#委托(delegate)的使用