在Win32程序中添加控制台窗口方法汇总

在Win32程序中添加控制台窗口方法汇总

ID:43489888

大小:156.98 KB

页数:4页

时间:2019-10-08

在Win32程序中添加控制台窗口方法汇总_第1页
在Win32程序中添加控制台窗口方法汇总_第2页
在Win32程序中添加控制台窗口方法汇总_第3页
在Win32程序中添加控制台窗口方法汇总_第4页
资源描述:

《在Win32程序中添加控制台窗口方法汇总》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、XDE(XanaviDevelopmentEnveriment)的在PC机上运行的时候,除了模拟导航仪屏幕的对话框窗口外,还有一个用来协助调试的控制台(console)窗口。这个console窗口可以用来输入调试命令,也可以进行打屏输出以观察程序的运行状态,非常方便。这样做有两个好处:一、console窗口的输入输出速度比一般的windows窗口要快;二、console窗口的输入输出不会对消息流产生影响(你知道,就像dos窗口不知道消息的存在一样,console窗口也具有这样的特性),而在一般的windows窗口上进行输入输出时,会打乱原有的消息流(因为会有一大堆的像WM

2、_PAINT、WM_GETFOCUS这样与鼠标、焦点、键盘、刷新相关的消息产生)。对于调试与消息相关的程序来说(比如像XDE这样拥有自己消息控制的程序),console这样的特性是非常重要的。在windows系统下使用C/C++编程的时候,我们一般会有两种选择,一个是做成类似DOS字符界面样式的程序(这就是console程序),这种程序的入口函数是main(对于UNICODE则是wmain),另一种是做成win32窗口程序,这样的程序会产生标准的windows窗口,它的入口函数是WinMain。一般来讲,一个win32的窗口程序在默认状态下是不会产生console窗口的。

3、但是,对于一个win32窗口程序,我们可以在运行期间给这个程序添加一个控制台窗口。有几个win32的API是用来实现这个功能的:AllocConsole,FreeConsole以及与Console相关的Get和Set系列函数。AllocConsole用来产生一个窗口,FreeConsole用来销毁它。下面我们来具体地看看每一个函数的作用。与Console窗口相关的API函数介绍:BOOLAllocConsole(void)这个函数为调用它的进程产生一个console窗口,如果成功,就返回非0值;否则,返回0。要注意的是,每个进程最多只有拥有一个console的窗口(但多个

4、进程可能同时拥有一个console窗口,比如子进程可以共享父进程的console窗口),如果这个进程已经有一个console窗口了,那么再调用AllocConsole的时候它会返回0。BOOLFreeConsole(void)销毁进程所拥有的console窗口(如果这个console是被多个进程共同拥有,那么它不会被Free掉,但是调用此函数的进程将无法再访问到这个console了)。成功返回非0值,否则返回0。HANDLEGetStdHandle(DWORDnStdHandle);nStdHandle:取STD_INPUT_HANDLE、STD_OUTPUT_HANDL

5、E、STD_ERROR_HANDLE三个值中的一个。STD_INPUT_HANDLE:标准输入设备句柄STD_OUTPUT_HANDLE:标准输出设备句柄STD_ERROR_HANDLE:标准错误输出设备句柄。这个函数用来获取标准输入、输出、错误输出设备的句柄。这些句柄是某些console相关的函数上会用到,比如下面几个函数。BOOLWriteConsole(HANDLEhConsoleOutput,//控制台窗口输出句柄constVOID*lpBuffer,//需要输出的字符所在的bufferaddressDWORDnNumberOfCharsToWrite,//需要输

6、出的字符个数LPDWORDlpNumberOfCharsWritten,//实际被输出的字符个数LPVOIDlpReserved//保留用,必须为NULL);这个函数用来向console窗口的输入缓冲区中写入字符串。BOOLWriteConsoleInput(HANDLEhConsoleInput,//控制台窗口输出句柄constINPUT_RECORD*lpBuffer,//需要输出的字符所在的bufferaddressDWORDnLength,//需要输出的字符个数LPDWORDlpNumberOfEventsWritten//实际被输出的字符个数);功能与上一个函数

7、类似,只是它不写入缓冲区而是直接写到输出设备上。BOOLReadConsole(HANDLEhConsoleInput,//控制台窗口输入句柄LPVOIDlpBuffer,//需要输入的字符存放的bufferaddressDWORDnNumberOfCharsToRead,//需要输入的字符个数LPDWORDlpNumberOfCharsRead,//实际被输入的字符个数LPVOIDlpReserved//保留用,必须为NULL);这个函数用来从console窗口的输入字符。BOOLReadConsoleInput(HANDL

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。