2009-10-21 275 views
6

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

我询问与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但这似乎只是关闭像关闭按钮这样的控件。

+0

有趣的问题,为什么你需要隐藏标题栏? – 2009-10-21 09:30:05

+3

我真的不知道。 这只是通过展示与默认控制台不同的东西来使得程序看起来“更好”,每个人都已经看过上千次。 – asdrubael 2009-10-23 11:02:36

回答

5

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

+0

好吧,这是很好的知道,所以我会忘记这一点,并尝试使用替代命令提示符或保持原样。 – asdrubael 2009-10-21 10:04:59

0

我想我会写/使用两个程序。一个控制台程序在做这项工作,另一个程序是一个可控制的控制台窗口,运行第一个程序。大多数情况下,现有的控制台程序已经存在,有些可以在没有标题栏的情况下启动?或者找到一个开放源代码并修改它。

+0

是的,这是一个选项,用类似“Console”的替换cmd.exe: http://sourceforge.net/projects/console/ – asdrubael 2009-10-21 10:03:51

2

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

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

0

您可以使用SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP);,这将删除标题/标题栏和边框。
警告:这并介绍几个小故障,我不知道如何解决(我猜他们是缓存边界?),但至少它产生你想要的效果。