在windows平台上,unreal3的console窗口类是FOutputDeviceConsoleWindows

启动时,它可以从XXXGame.ini中读取诸如窗口大小之类的属性,具体的代码在

void FOutputDeviceConsoleWindows::Show( UBOOL ShowWindow )

中,第一次Show时创建console,分别读取了x,y,w,h四个属性,通过SetConsoleScreenBufferSize/SetWindowPos设置到console窗口上。

实用中碰到两个问题:

1、窗口的大小和屏幕缓冲区大小不一致,导致输出的字符串不能自动换行,总是要拖滚横向滚动条才能看完全部

2、手动修改窗口的位置和大小后,并没有保存到配置文件中,每次启动又要重设

解决办法如下:

1、在FOutputDeviceConsoleWindows::Show里增加设置窗口大小的代码

SMALL_RECT rect = {};
rect.Right = ConsoleWidth - ;
rect.Bottom = ;
BOOL b = ::SetConsoleWindowInfo(ConsoleHandle, TRUE, &rect);

因为它原来只设了屏幕缓冲区,没有设窗口,现成将窗口宽度改成跟缓冲区一样(实际小1,MS规定的),就不用横向滚动了。高度30纯手打,可根据自己需要调整,读取原高度也可以。

2、这个问题的原因是,表示控制台窗口的变量是个全局静态变量:

static FOutputDeviceConsoleWindows            LogConsole

它的SaveToINI函数是在析构中调用,全局静态变量的析构函数实际是在main函数之后才被调用的,那时表示配置文件的GConfig早就先销毁了(在appExit<-WinMain中),在SaveToINI时发现GConfig没有,自然写不了配置。

解决办法是在合适的时机手动调用SaveToINI,然后这函数是子类的(通常也就windows用ini吧),基类上并没有。但没关系,基类FOutputDevice上有个TearDown虚函数,正适合来做此类清理操作。

首先在FOutputDeviceConsoleWindows中重载TearDown,调用SaveToINI。

然后在FOutputDeviceConsoleWindowsInherited中也重载TearDown,调用其链接的目标设备ForwardConsole的TearDown即可!

至于为啥有FOutputDeviceConsoleWindowsInherited这个类以及链接是干啥用的,现在还没体会清楚,但保存控制台属性的目的,已经达到了~

unreal3控制台窗口属性调整的更多相关文章

  1. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性

    目录 00. 目录 01. 句柄 02. GetStdHandle函数 03. CloseHandle函数 04. SetConsoleTextAttribute函数 05. 十进制颜色对照表 06. ...

  2. 用CMake屏蔽Release运行时的控制台窗口

    在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...

  3. Xlib 窗口属性

    Xlib 窗口属性 转, 无法找到原作者 所有的 InputOutput 窗口都可以有零个或者多个像素的边框宽度,一个可选的背景,一个事件压制掩码(它压制来自孩子的事件传播),和一个 property ...

  4. MFC如何在有界面的应用程序中开启控制台窗口

    在有界面的应用程序中开启控制台窗口有时候非常有用,尤其是在调试多线程应用程序中,由于通过断点的方式调试程序时会导致线程挂起从而导致各种难于预料的结果.这时候就可以通过开启控制台窗口往窗口输出信息来查看 ...

  5. VS中运行后控制台窗口一闪就没了

    使用VS2010后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现”press any key to continue…” 或者“请按任意键继续”. 出现这种原因,主要是建立工程时选用 ...

  6. 控制台窗口和powershell运行服务会卡住的解决办法

    之前使用nodejs做了一个简单的web服务,通过控制台窗口运行,通过浏览器访问发现有时候浏览器等很久数据都加载不出来,以为是代码有问题,后来发现是控制台卡住了,按一下enter键就好了,当时百度了一 ...

  7. 【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区

    目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScreenBuffer ...

  8. 如何解决Visual Studio 2017 运行后控制台窗口一闪就消失了

    出现这种情况的原因 安装使用Visual Studio 2017 后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现"press any key to continue-&q ...

  9. C# 在winform或者wpf中显示控制台窗口

    这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library ...

随机推荐

  1. 20145229吴姗珊 《Java程序设计》第9周总结

    20145229吴姗珊 <Java程序设计>第9周总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交 ...

  2. Delphi 函数的重载和作用域

    1.在delphi 中,我们可以使用相同的函数名来调用不同的函数,我们称这个函数为重载,函数的参数类型和参数的个数可以不同,用到的关键字overload:格式如下: function addInt(x ...

  3. Jquery + css 日期控件用法实例.zip

    /*==============================================================================** Filename:common.j ...

  4. poj3177边-双连通分量

    题意和poj3352一样..唯一区别就是有重边,预先判断一下就好了 #include<map> #include<set> #include<list> #incl ...

  5. POJ 2253 Frogger(warshall算法)

    题意:湖中有很多石头,两只青蛙分别位于两块石头上.其中一只青蛙要经过一系列的跳跃,先跳到其他石头上,最后跳到另一只青蛙那里.目的是求出所有路径中最大变长的最小值(就是在到达目的地的路径中,找出青蛙需要 ...

  6. C# 往excel出力数据

    /// <summary> /// 出力Excel /// </summary> /// <param name="storeModelForExcel&quo ...

  7. python遍历并获取对象属性--dir(),__dict__,getattr,setattr

    一.遍历对象的属性: 1.dir(obj) :返回对象的所以属性名称字符串列表(包括属性和方法). for attr in dir(obj): print(attr) 2.obj.__dict__:返 ...

  8. 关于_T()说明

    #define  _T(X)  L##X _T()是MFC里的宏.VS支持两种编码方式ASCII和Unicode,前者是用单字节编码,只能表示0~255个字符.为了表示各个国家的字符,采用了UNICO ...

  9. the referenced script on this behaviour is missing!

    1.看看你脚本上挂的某个组件是不是发生了变动,比如被删除了什么的 2.最有可能的是你创建完脚本后,中途改过脚本的名字,致使脚本名字和内部的名字不统一.

  10. tensorflow中张量(tensor)的属性——维数(阶)、形状和数据类型

    tensorflow的命名来源于本身的运行原理,tensor(张量)意味着N维数组,flow(流)意味着基于数据流图的计算,所以tensorflow字面理解为张量从流图的一端流动到另一端的计算过程. ...