控制台界面控制(四)

来源:互联网 发布:暴走大事件淘宝店 编辑:程序博客网 时间:2024/05/16 06:42
本文为转载文档,源文档链接:http://blog.csdn.net/bnb45/article/details/7983562
设置光标位置

[cpp] view plaincopy
  1. // ---- 设置光标位置  
  2. void CMyConsole::Goto(short x, short y)  
  3. {  
  4.     COORD pos = {x, y};  
  5.   
  6.     SetConsoleCursorPosition(hOut, pos);  
  7. }  
设置窗口大小

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

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

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

[cpp] view plaincopy
  1. // ---- 设置窗口大小  
  2. void CMyConsole::SetSize(short len, short wid)  // 设置同样的缓冲区和窗口大小,不会出现滚动条  
  3. {  
  4.     COORD pos = {len, wid};  
  5.     SMALL_RECT rc = {0, 0, len-1, wid-1};       // 坐标从0开始  
  6.   
  7.     // -- 设置窗口信息  
  8.     // @param   HANDLE  [in] 窗口句柄  
  9.     // @param   bool    [in] 意思不明,但在true时才起作用  
  10.     // @param   RECT *  [in] 分别指定窗口左上角坐标和右下角坐标  
  11.     // #return  bool         成功返回非0值  
  12.     SetConsoleWindowInfo(hOut, true, &rc);  
  13.   
  14.     // -- 设置缓冲区大小  
  15.     // -- 长和宽不得小于控制台大小;不得小于系统最小限制。否则设置无效  
  16.     // @param   HANDLE  [in] 窗口句柄  
  17.     // @param   COORD   [in] 坐标结构,包含长和宽  
  18.     // #return  bool         成功返回非0值  
  19.     SetConsoleScreenBufferSize(hOut, pos);  
  20. }  
实例测试

[cpp] view plaincopy
  1. #include "MyConsole.h"  
  2. #include <stdio.h>  
  3.   
  4. int main()  
  5. {  
  6.     CMyConsole myConsole;  
  7.   
  8.     myConsole.SetSize(60, 30);  
  9.     myConsole.Goto(18, 14);  
  10.     printf("设置完毕!尺寸大小:60*30!\n");  
  11.     myConsole.Goto(0, 0);  
  12.     system("pause");  
  13.   
  14.     return 0;  
  15. }  

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