在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. 剑指offer之 二进制中1的个数

    问题描述: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1 因此如果输入9,该函数输出2; package Problem10; public ...

  2. developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章

    developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...

  3. JAVA NIO之浅谈内存映射文件原理与DirectMemory

    JAVA类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原 ...

  4. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  5. cscope usage

    1) Reference: Linux 平台下阅读源码的工具链 程序员的利器 – cscope 2) cscope help: :help cscope :help cscope-suggestion ...

  6. java: jdk1.8以后就不支持桥接的方式

    java: jdk1.8以后就不支持桥接的方式 如果想继续使用桥接的方式,请使用jdk1.7及以下版本.

  7. 分享知识-快乐自己:HBase编程

    HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...

  8. jQuery中的动画理论干货

    [jQuery中的动画] 通过jQuery动画能够轻松地为页面添加精彩的视觉效果 [show()方法和hide()方法]1.show()方法和hide()方法是jQUERY中最基本的动画方法,相当于在 ...

  9. Hibernate映射--基本类映射和对象关系映射(转)

    原文地址:http://blog.csdn.net/lovesummerforever/article/details/20901011   尊重原创,请访问原网址 回想一些我们在没有学习ssh的时候 ...

  10. 常用的Hql语句(转)

    原文地址:http://blog.csdn.net/v123411739/article/details/28644007     尊重原创,请访问原文地址 // HQL: Hibernate Que ...