C ++控制台应用程序,隐藏标题栏

时间:2009-10-21 09:28:16

标签: c++ winapi console

我有一个用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,但这似乎只是禁用像关闭按钮这样的控件。

4 个答案:

答案 0 :(得分:5)

你做不到。通常,控制台窗口的hWnd不能保证适用于所有窗口句柄操作,例如记录here

答案 1 :(得分:2)

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

这个解决方案相当远,非常技术性。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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