论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
  ·推荐新闻
 
·美前任官员认为amd告倒英特
·搜索引擎关键字排行简介
·网站优化教程(一)
·msn近期遭受木马病毒骚扰 用
·用qq管理你的系统^_^ 
·测评中心金山毒霸联合发布7
·qq群聊实名 普通用户不受影
·雅虎思科联手推数字邮件签名
·这18条背下来没人敢和你忽悠
·自己动手,拯救丢失的硬盘数
  ·资料搜索
 
  ·相关文章
·深度探索c++对象模型(完结篇)
·深度探索c++对象模型(10)
·深度探索c++对象模型(9)
·深度探索c++对象模型(8)
·深度探索c++对象模型(7)
·深度探索c++对象模型(6)
·深度探索c++对象模型(5)
·深度探索c++对象模型(4)
·深度探索c++对象模型(3)
·深度探索c++对象模型(2)
  ·热门新闻
首页>>程序开发>>c/c++区>>文章正文

控制台窗口界面控制设计(一)


 日期:2005-7-18 9:13:35     来源:易特网络技术   编辑:黑鹰  点击:

  摘要: 文本界面的控制台应用程序开发是深入学习c++、掌握交互系统的实现方法的最简单的一种手段。然而,visual c++c++专用库却没有tc所支持的文本(字符)屏幕控制函数,为此本系列文章从一般控制步骤、控制台窗口操作、文本(字符)控制、滚动和移动、光标、键盘和鼠标等几个方面讨论控制台窗口界面的编程控制方法。

  在众多c++开发工具中,由于microsoft本身的独特优势,选用visual c++已越来越被众多学习者所接受。显然,现今如果还再把tc作为开发环境的话,不仅没有必要,而且也不利于向windows应用程序开发的过渡。然而,visual c++c++专用库却没有tc所支持的文本屏幕(控制台窗口)控制函数(相应的头文件是conio.h)。这必然给c++学习者在文本界面设计和编程上带来诸多不便。要知道,文本界面设计是一种深入学习c++、掌握交互系统的实现方法的最简单的一种手段,它不像c++的windows图形界面应用程序,涉及知识过多。为此,本系列文章来讨论在visual c++ 6.0开发环境中,如何编写具有美观清晰的控制台窗口界面的c++应用程序。

  一、概述

  所谓控制台应用程序,就是指那些需要与传统dos操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。简单地讲,就是指在windows环境下运行的dos程序。一旦c++控制台应用程序在windows 9x/nt/2000操作系统中运行后,就会弹出一个窗口。例如下列过程:

  单击visual c++标准工具栏上的“new text file”按钮,打开一个新的文档窗口。

  选择file | save菜单或按快捷键ctrl+s或单击标准工具栏的save按钮,弹出“保存为”文件对话框。将文件名为“hello.cpp” (注意扩展名.cpp不能省略)。

  在文档窗口中输入下列代码:

#include
void main()
{
cout<<"hello, console!"< }

  单击小型编译工具栏中的“build”按钮或按f7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。

  单击小型编译工具栏中的“execute program”按钮或按ctrl+f5键,运行刚才的程序。

  程序运行后,弹出下图的窗口。


  这就是控制台窗口,与传统的dos屏幕窗口相比最主要的区别有:

  (1) 默认的控制台窗口有系统菜单和标题,它是一个内存缓冲区窗口,缓冲区大小取决于windows操作系统的分配;而dos屏幕是一种物理窗口,不具有windows窗口特性,其大小取决于rom bios分配的内存空间。

  (2) 控制台窗口的文本操作是调用低层的win32 apis,而dos屏幕的文本操作是通过调用bios的16(10h)中断而实现的。

  (3) 默认的控制台窗口可以接收键盘和鼠标的输入信息,设备驱动由windows管理,而dos屏幕窗口接收鼠标时需要调用33h中断,且鼠标设备驱动程序由自己安装。

  二、控制台文本窗口的一般控制步骤

  在visual c++ 6.0中,控制台窗口界面的一般编程控制步骤如下:

  调用getstdhandle获取当前的标准输入(stdin)和标准输出(stdout)设备句柄。函数原型为:

   handle getstdhandle( dword nstdhandle );

  其中,nstdhandle可以是std_input_handle(标准输入设备句柄)、std_output_handle(标准输出设备句柄)和std_error_handle(标准错误句柄)。需要说明的是,“句柄”是windows最常用的概念。它通常用来标识windows资源(如菜单、图标、窗口等)和设备等对象。虽然可以把句柄理解为是一个指针变量类型,但它不是对象所在的地址指针,而是作为windows系统内部表的索引值来使用的。

  调用相关文本界面控制的api函数。这些函数可分为三类。一是用于控制台窗口操作的函数(包括窗口的缓冲区大小、窗口前景字符和背景颜色、窗口标题、大小和位置等);二是用于控制台输入输出的函数(包括字符属性操作函数);其他的函数并为最后一类。

  调用closehandle()来关闭输入输出句柄。

  注意,在程序中还必须包含头文件windows.h。下面看一个程序:

#include
#include
#include
void main()
{
handle hout;
hout = getstdhandle(std_output_handle);
// 获取标准输出设备句柄
console_screen_buffer_info binfo; // 窗口信息
getconsolescreenbufferinfo(hout, &binfo );
// 获取窗口信息
printf("\n\nthe soul selects her own society,\n");
printf("then shuts the door;\n");
printf("on her devine majority\n");
printf("obtrude no more.\n\n");
_getch();
coord pos = {0, 0};
fillconsoleoutputcharacter(hout, ' ', binfo.dwsize.x * binfo.dwsize.y, pos, null);
// 向窗口中填充字符以获得清屏的效果
closehandle(hout); // 关闭标准输出设备句柄
}

程序中,coord和console_screen_buffer_ info是wincon.h定义的控制台结构体类型,其原型如下:

// 坐标结构体
typedef struct _coord {
short x;
short y;
} coord;

// 控制台窗口信息结构体
typedef struct _console_screen_buffer_info {
coord dwsize; // 缓冲区大小
coord dwcursorposition; // 当前光标位置
word wattributes; // 字符属性
small_rect srwindow; // 当前窗口显示的大小和位置
coord dwmaximumwindowsize; // 最大的窗口缓冲区大小
} console_screen_buffer_info ;

  还需要说明的是,虽然在c++中,iostream.h定义了cin和cout的标准输入和输出流对象。但它们只能实现基本的输入输出操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream.h和它们是c++两套不同的输入输出操作方式,使用时要特别注意。



上一篇:c++运算符重载探讨
下一篇:c++中的健壮指针和资源管理
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络
信息来源: 易特网络技术 录入时间: 2005-7-18 9:13:35
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息