21xrx.com
2024-11-08 22:09:26 Friday
登录
文章检索 我的文章 写文章
如何在隐藏C++窗口后结束程序?
2023-07-07 00:13:59 深夜i     --     --
C++ 窗口隐藏 结束程序

在某些情况下,我们可能需要在不显示UI界面的情况下运行C++程序,然后在程序完成任务后自动结束程序。这时,我们需要将程序隐藏起来,但是如何在程序运行完毕后结束呢?下面介绍两种方法。

方法一:使用GetConsoleWindow函数获取窗口句柄

首先,利用GetConsoleWindow函数获取控制台的窗口句柄:

HWND hwnd = GetConsoleWindow();

接着我们使用ShowWindow函数将窗体隐藏:

ShowWindow(hwnd, SW_HIDE);

上述函数已经将程序隐藏起来,但是程序并没有结束,我们需要让程序在完成后自动退出。为了实现这个效果,我们可以调用exit()函数:

exit(0);

这个函数会直接结束程序的运行。完整的代码如下所示:

#include

#include

int main()

{

  HWND hwnd = GetConsoleWindow();

  ShowWindow(hwnd, SW_HIDE);

  // Do something here

  exit(0);

}

方法二:在窗体被隐藏后使用消息循环结束程序

还有另一种方法,当窗体被隐藏时,我们可以在消息循环中监听WM_CLOSE消息,一旦收到该消息,我们就可以结束程序的运行。具体代码如下所示:

#include

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

  switch (msg)

  {

    case WM_CLOSE:

      DestroyWindow(hwnd);

      break;

    case WM_DESTROY:

      PostQuitMessage(0);

      break;

    default:

      return DefWindowProc(hwnd, msg, wParam, lParam);

  }

  return 0;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

  LPSTR lpCmdLine, int nCmdShow)

{

  HWND hwnd;

  MSG Msg;

  WNDCLASS wc = {0};

  wc.lpfnWndProc  = WndProc;

  wc.hInstance   = hInstance;

  wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);

  wc.lpszClassName = "MyWindowClass";

  RegisterClass(&wc);

  hwnd = CreateWindow("MyWindowClass", "My Program",

    WS_MINIMIZE, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);

  ShowWindow(hwnd, SW_HIDE);

  while (GetMessage(&Msg, NULL, 0, 0))

  {

    TranslateMessage(&Msg);

    DispatchMessage(&Msg);

    if (Msg.message == WM_CLOSE)

    {

      // Do something here

      DestroyWindow(hwnd);

    }

    if (Msg.message == WM_QUIT)

      break;

  }

  return Msg.wParam;

}

上面的代码利用消息循环监听WM_CLOSE消息,在窗体被隐藏后,这个消息仍然可以被监听到,此时我们就可以在其接收到该消息后,结束程序的运行。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复