第一讲认识Windows句柄.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第一讲:认识Windows句柄

童鞋们,你们还在为了那个黑底白字却不能自己DIY的控制台而困扰吗?你还在为那个死板冷漠的界面而反感吗?从今天开始我们将学着如何使用MFC框架DIY我们自己的控制台,童鞋们再也不用每天对着黑底白字的界面啦!

【控制台程序概述】

要想对控制台进行DIY,我们就需要先对控制台的一些概念有基本的了解。所谓控制台应用程序,就是指那些需要与传统DOS操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。简单地讲,就是指在 Windows环境下运行的DOS程序。一旦控制台应用程序在Windows操作系统中运行后,就会弹出一个窗口。例如下列代码:

#includeiostreamusingnamespacestd;voidmain()

{

coutHelloConsole!endl;

}

单击小型编译工具栏中的“Build”按钮或按F7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。单击小型编译工具栏中的“ExecuteProgram”按钮或按Ctrl+F5键,运行刚才的程序。程序运行后,弹出下图的窗口:

这就是控制台窗口。

【控制台程序与传统的DOS窗口的区别】

那么控制台程序与传统的DOS程序又有什么区别呢?区别如下:

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

控制台窗口的文本操作是调用低层的Win32APIs,而DOS屏幕的文本操作是通过调用BIOS的16(10h)中断而实现的。

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

【什么是Windows句柄】

要想对控制台进行操作,我们就必须要认识什么是句柄,句柄,英文名称为Handle。顾名思义,就好像我们炒菜用的勺子的勺子柄一样。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。

在Windows的世界中,所有的界面元素都含有一个固定的句柄!

【定义Windows句柄】

如果我们需要对某一个句柄的界面元素,例如我们的控制台窗口进行操作,我们就必须要获得该窗口的句柄,这有些类似于我们要想使用勺子就必须握住勺子的勺子柄。在MFC中我们使用句柄类型HANDLE定义变量保存句柄,当然在使用HANDLE类型之前你需要在程序中包含Windows.h头文件。例如:

HANDLEhandle;//定义一个句柄

HANDLEhandle;//定义一个句柄

【获取控制台句柄】

在MFC中我们可以通过GetStdHandle函数获取界面元素的句柄,控制台的句柄在Windows.h中已经明确定义,记名为:STD_OUTPUT_HANDLE,即标准输出句柄。当然,这很好理解。所谓的输出实际上就是将需要输出的字符串写入

到标准输出设备文件(在C/C++中,硬件资源也是使用文件的形式进行管理的),而标准输出设备就是指控制台的窗口,也就是我们平时所说的屏幕。

下面的实例说明了获取控制台句柄的步骤:

#includeWindows.h#includeiostreamusingnamespacestd;voidmain()

{

HANDLEhandle=NULL;//定义一个句柄变量

handle=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄if(handle!=NULL)

{

cout获取句柄成功!endl;wcout句柄号:handleendl;

}

else

cout获取句柄失败!endl;

}

运行效果如下:

【常见的句柄类型】

MFC中常见的标准句柄如下表:

句柄变量STD_OUTPUT_HANDLESTD_INPUT_HANDLESTD_ERROR_HANDLE

说明标准输出设备句柄标准输入设备句柄标准错误句

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档