在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. 基于WebServices简易网络聊天工具的设计与实现

    基于WebServices简易网络聊天工具的设计与实现 Copyright 朱向洋 Sunsea ALL Right Reserved 一.项目内容 本次课程实现一个类似QQ的网络聊天软件的功能:服务 ...

  2. flex 动画笔记

    1.不涉及到组件宽度和高度变化的 如果类似showEffect等属性不好使的,直接使用hideEffect.end(); showEffect.play();等这样的用法. 2.涉及到组件宽度和高度变 ...

  3. Python 运算符(算术运算符(+,-,*,**,/,//),逻辑运算符(not , or ,and),比较运算符(>,<,>=,=<),复合运算符(+=,-=,*=,/=,**=,//=))

    # 一.算术运算符(+,-,*,**, /, //, %) # 加法运算符+ print(1 + 2) # 字符串相连 ") # 重载 print([1,2] + [3,4]) # 幂运算* ...

  4. Linux课程---8、Linux启动流程

    Linux课程---8.Linux启动流程 一.总结 一句话总结: grub启动引导界面(比如装了多系统,选择系统),找到linux内核 启动init程序,加载各种驱动 1.进入grub界面选择相应的 ...

  5. 计算地球上两个坐标点(经度,纬度)之间距离sql函数

    go --计算地球上两个坐标点(经度,纬度)之间距离sql函数 --作者:lordbaby --整理:www.aspbc.com CREATE FUNCTION [dbo].[fnGetDistanc ...

  6. 如何在node.js中使用neo4j

    本章中你将会学到如何在node.js中使用neo4j图形数据库. 当你想存储或者查询和数据紧密关联的数据的时候,图形数据库很有用. neo4j是一个可有效存储,处理和查询你数据模型中紧密相连的元素的数 ...

  7. PHP把时间转换成几分钟前、几小时前、几天前的几个函数、类分享

    这篇文章主要介绍了php计算时间几分钟前.几小时前.几天前的几个函数.类分享,需要的朋友可以参考下一.函数实现实例1: <?php header("Content-type: text ...

  8. Abp模块分析

    1.什么是模块? 模块化是一种处理复杂系统分解为更好的可管理模块的方式.模块化用来分割,组织和打包软件.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功 ...

  9. pyglet模块的EventDispatcher(事件派发对象)

    事件派发对象用于处理事件的派发与响应,pyglet的window对象正是继承了它才具有处理事件的能力. 步骤: 1.注册事件类型: EventDispatcher.register_event_typ ...

  10. 【leetcode刷题笔记】Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...