windows中控制台窗口和普通窗口有什么区别?

1. 窗口都是windows标准窗口,有窗口句柄,但是console window没有消息循环,直接从缓冲区读数据,显示数据。

windows中普通窗口都有自己的窗口过程, 我可以使用SetWindowlong来修改窗口过程, 但是控制台窗口修改后去无法收到消息, 都是窗口为什么控制台的不能通过修改窗口过程来捕获消息?

1. 控制台是基于STDIO相关的句柄实现的,内部循环流程是不断的用ReadConsole来读取输入缓冲并显示,用WriteConsole输出显示结果,相当于窗口中的Peak和Translate消息。它不是基于消息队列,当然不接受消息。还记得开始学C时候控制台常用的printf和scanf吗?使用他们需要加的头文件是stdio.h

2. 控制台窗口我理解为是系统维护的,只提供stdio接口。
不知你发现没有,控制台窗口大小是字符大小的整倍数,也就是说,不会出现只显示半个字符的情况。这实际与控制台工作原理有关。
stdio中有一个缓冲区,每次写入都写到缓冲区末端,超出缓冲区的,会被后来写的“顶”出去。改变窗口大小的同时,缓冲区大小也会被改变。

时间: 2024-12-29 21:05:51

windows中控制台窗口和普通窗口有什么区别?的相关文章

Windows中检测当前是否有窗口全屏

不时看到有人问起如何判断当前是否有窗口正处于全屏状态? 不过, 在解决这个问题之前先来解决一个简单的问题?         什么是全屏?     相当一部分人认为: 窗口如果是最大化的, 那么它就是最大化的? 真是这样吗? 简直BS!. 全屏是指窗口整体大小至少占据了整个屏幕, 而不是除任务栏以外的那一部分空间! 而最大化是指窗口整体大小占据了桌面的工作区(Workarea)! 所以, 不要只是简单地调用IsZoomed()就决定窗口当前是否全屏, 那是判断是否最大化的作为; 也不要只是把窗口的

windows中静态库lib和动态dll的区别及使用方法

1. 静态库lib和动态dll的区别 1.1 项目类型 VS在建Win32项目时,有以下选项: windows应用程序控制台应用程序DLL静态库最后两个类型:DLL和静态库,这两种项目类型是不可以单独运行的,必须在Windows应用程序调用他们执行,是提供的库函数而已. 1.2 两种lib的区别: (1)静态库(.lib) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB).在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建

windows中根据进程PID查找进程对象过程深入分析

这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进程而言,也就是句柄一定所属于某个进程,为某个进程私有的资源.句柄的分配来自于进程私有的句柄表.而进程PID和线程TID和句柄的分配原理是一样的,但是来源就不同了.进程PID来源于系统中一张全局的句柄表PSpcidtable.从级别上来说Pspcidtable和进程对象eprcess中的objecttab

在windows中的DOS窗口执行adb shell出错的解决办法

1,首先要检查是否已经配置好环境变量或者在platform-tools目录(adb.exe存在的路径)下执行的adb shell 2,步骤1没问题的话,那么运行:adb kill-server 再执行:adb shell 好了,问题解决(PS:反正我的解决了) 在windows中的DOS窗口执行adb shell出错的解决办法,布布扣,bubuko.com

在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字

在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是cmd窗口中utf-8格式的编码.cmd窗口默认编码为gbk,数字代码为936 D:\>chcp 65001 Active code page: 65001 3,在cmd窗口标题栏里右键点击,调出右键菜单,点击属性->字体,将字体改成Lucida Console, OK,可以正确显示utf-8编码的

windows学习记录----hello world与窗口创建

1.第一个程序:Hello,world! 1 #include<windows.h> 2 3 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) 4 { 5 MessageBox( NULL, TEXT("Hello,world!"), TEXT("MessageBox"), 0 ); 6 7 return 0;

delphi程序向另一个可执行程序发消息(使用GetForegroundWindow; 找出当前操作系统中活动的第一个窗口)

function FindWindowThroughWindowText(WindowText: string): THandle;var  hCurrentWindow: THandle;  cnt: Integer;  WindowTitle: array [0 .. 254] of Char;begin  Result := INVALID_HANDLE_VALUE; // 返回值预设为无效的句柄  hCurrentWindow := GetForegroundWindow; // 找出当

MFC中通过子窗口关闭父窗口以实现退出程序

这应该是个老问题,我来稍微总结下:(我刚刚接触Windows编程希望大家多多指点) 1.上来来个最鲁莽的. 直接通过exit(0),ExitProcess(0); //不好的用法 猜测资源得不到回收 原因如下: http://blog.csdn.net/jiang1013nan/article/details/4831020 2.向父窗口发送WM_CLOSE消息,然后自己关闭自己的窗口. 获取将父窗口的句柄直接传给子窗口,然后子窗口可以直接关闭父窗口. 示例代码如下: 父窗口类的定义: // C

《Windows程序设计》读书笔三 窗口与消息

第三章 窗口于消息 前面的例子都使用MessageBox来创建窗口 ,单他所创建的窗口灵活性有限. 3.1 窗口的创建 只要调用CreateWindow函数即可 3.1.1 系统结构概述 一个应用程序窗口可能包含,标题栏,菜单栏,工具栏,滚动条.另外还有一种类型的窗口是对话框,这种窗口可以不带标题栏 还可能包含,按钮,单选按钮,复选框,列表框,滚动条,文本框等.每一个这些对象都被称为 子窗口,或者 控件窗口 当用户改变窗口尺寸时,Windows便向应用程序发送一条携带新窗口尺寸相关的信息,接着应