zoukankan      html  css  js  c++  java
  • unreal3控制台窗口属性调整

    在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 - 1;
    rect.Bottom = 30;
    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这个类以及链接是干啥用的,现在还没体会清楚,但保存控制台属性的目的,已经达到了~

  • 相关阅读:
    腰颈椎病康复运动治疗
    丹田呼吸简易教程
    丹田呼吸法
    GNU 汇编语言
    openssl命令简介
    AES128 + cbc + pkcs7 编码C语言实现
    一些linux下的性能监测工具
    git 基本使用教程
    【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)
    【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  • 原文地址:https://www.cnblogs.com/wellbye/p/5330417.html
Copyright © 2011-2022 走看看