有没有更好的方法来删除标题栏上的所有三个按钮并使用Windows API删除滚动条?

时间:2013-11-21 16:14:38

标签: c winapi button console-application mingw32

删除标题栏上所有三个按钮并删除我在“Windows 7”中使用的滚动条的代码到目前为止列出:

#define WINVER 0x0501 // WinXP and UP
#include <windows.h>

int main ( void ) 
{
     //Get a console handle
     HWND ConsoleWindow = GetConsoleWindow();

     //Change Settings
     SetWindowLong (ConsoleWindow, GWL_STYLE, WS_THICKFRAME);
     SetWindowLong (ConsoleWindow, GWL_STYLE, WS_CAPTION);
     SetWindowPos  (ConsoleWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_SHOWWINDOW);

     //Resize
     system ("mode con cols=75 lines=50");
     system ("pause>nul");
     return 0;
}

编译命令:

mingw32-gcc.exe -c "Console_Graphing_10.c" -o "Console_Graphing_10.o"
mingw32-gcc.exe -o "Console_Graphing_10.exe"  "Console_Graphing_10.o"

但是这不能删除标题栏上的所有三个按钮并删除“Windows XP”中的滚动条

有没有更好的代码来实现这一目标?感谢。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

#define WINVER 0x0501 // WinXP and UP
#include <windows.h>

int main ( void ) 
{
  LONG style;
  HWND ConsoleWindow;

  ConsoleWindow = GetConsoleWindow();

  style = GetWindowLong(ConsoleWindow, GWL_STYLE); 
  style &= ~( WS_MINIMIZEBOX | WS_SYSMENU ); 
  SetWindowLongPtr(ConsoleWindow, GWL_STYLE, style);

  SetWindowPos(ConsoleWindow, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED |
  SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);

  system ("pause>nul");
  return 0;
}

将删除所有按钮:

enter image description here

答案 1 :(得分:1)

我发现 我的评论后说我认为不可能......

void ClearButtons(void)
{
    int index = WS_BORDER;
    unsigned int a = (unsigned int)((WS_BORDER | WS_CAPTION) & (~WS_ICONIC));

    LONG_PTR lPtr;
    HWND hWnd = GetActiveWindow();
    lPtr = GetWindowLongPtr(hWnd, index); 
    SetWindowLongPtr(hWnd, GWL_STYLE, a);  
}

注意: 在编译32位Windows时,SetWindowLongPtr被定义为对SetWindowLong函数的调用。因此,应该使用Windows 7或XP(没有测试)

测试图像:
enter image description here