在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. linux共享库加载

    参考自: <<程序员的自我修养--链接.装载与库>> 第八章 Linux共享库的组织 以下截取部分内容 (这本书比较好的讲解了从程序的链接,装载,到运行) 共享库的兼容性 li ...

  2. log4net性能小探

    初步测试了Log4性能.Appender架构如下. 一般客户端,使用FileAppender,把Log记录在本地磁盘. <lockingModel type="log4net.Appe ...

  3. Java -- 表达式类型的自动提升

    1. 提升规则: a. 所有byte型,short型和char型将被提升到int型. b. 整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型. 例1: short val = 5; ...

  4. hdu 4542 小明系列故事——未知剩余系 反素数 + 打表

    小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Prob ...

  5. 机器学习(十九)— xgboost初试kaggle

     1.官网下载kaggle数据集Homesite Competition数据集,文件结构大致如下: 2.代码实战 #Parameter grid search with xgboost #featur ...

  6. ES field store yes no 区别——可以设置为false,如果_source有的话

    store By default, field values are indexed to make them searchable, but they are not stored. This me ...

  7. listen and translation exercise 49

    Huh? Appears to Be Universally Understood What's the most universal utterance in languages across th ...

  8. sphinx:python项目文档自动生成

    Sphinx: 发音: DJ音标发音: [sfiŋks] KK音标发音: [sfɪŋks] 单词本身释义: an ancient imaginary creature with a lion's bo ...

  9. 《java编程思想》:散列的原理

    以实现一个简单的HashMap为例,详细讲解在code之中. 简单解释散列原理: 1.map中内建固定大小数组,但是数组并不保存key值本身,而是保存标识key的信息 2.通过key生成数组角标,对应 ...

  10. 详细详解One Hot编码-附代码

    机器学习算法无法直接用于数据分类.数据分类必须转换为数字才能进一步进行. 在本教程中,你将发现如何将输入或输出的序列数据转换为一种热编码,以便于你在Python中深度学习的序列分类问题中使用.本教程分 ...