【问题标题】:C++ Console Application, hiding the title barC++ 控制台应用程序,隐藏标题栏
【发布时间】:2010-12-08 15:41:28
【问题描述】:

我有一个用 C++ 编写的 Windows 控制台应用程序,并且想要隐藏/删除控制台窗口的完整标题栏,包括关闭、最小/最大控件等。我搜索了很多但没有发现任何有用的东西。

我使用 GetConsoleWindow 查询控制台 HWND 并尝试通过删除 WS_CAPTION 标志来使用 SetWindowLong 更改控制台窗口样式,但这似乎根本没有效果:

HWND hwnd = GetConsoleWindow();
LONG style = GetWindowLong(hwnd, GWL_STYLE);
style &= ~(WS_BORDER|WS_CAPTION|WS_THICKFRAME);
SetWindowLong(hwnd, GWL_STYLE, style);

SetWindowPos( hwnd, NULL, 0,0,0,0,
       SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE
       |SWP_FRAMECHANGED ); 

我也尝试过 GetSystemMenu/RemoveMenu 但这似乎只会禁用关闭按钮等控件。

【问题讨论】:

  • 有趣的问题,为什么要隐藏标题栏?
  • 我真的不知道。它只是通过显示与默认控制台不同的东西来使程序看起来“更好”,每个人都已经看过一千次了。

标签: c++ winapi console


【解决方案1】:

您可以使用 SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP); ,这将删除标题/标题栏和边框。
警告:这确实引入了一些我不知道如何修复的故障(我猜它们是缓存的边框?),但至少它确实产生了你想要的效果。

【讨论】:

    【解决方案2】:

    您可以尝试一个复杂的解决方案,涉及隐藏控制台窗口(这是可能的),然后设置一个窗口(没有控件),在真实的控制台窗口中来回转发适当的事件。特别是 GDI 事件,用于在您的假控制台窗口中绘制控制台窗口内容,并与滚动条交互(进而调整控制台...)。

    这个解决方案相当遥远,而且技术性很强。

    【讨论】:

      【解决方案3】:

      我想我会编写/使用两个程序。一个控制台程序完成这项工作,第二个程序是运行第一个控制台窗口的可控控制台窗口。很可能已经存在现有的控制台程序,有些可以在没有标题栏的情况下启动?或者找一个开源的,修改一下。

      【讨论】:

      【解决方案4】:

      你不能。一般来说,控制台窗口的 hWnd 不能保证适用于所有窗口句柄操作,例如文档中的here

      【讨论】:

      • 好的,很高兴知道这一点,所以我会忘记这一点并尝试使用替代命令提示符或保持原样。
      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2011-04-04
      • 2011-02-15
      • 2011-01-09
      • 2015-08-17
      • 2016-03-30
      相关资源
      最近更新 更多