C++:DestroyWindow()函数

1. 函数功能

DestroyWindow函数用于销毁指定的窗口。当调用这个函数时,它会发送一系列的消息来清理窗口相关的资源,包括释放窗口所占用的内存、销毁窗口的菜单、子窗口等相关资源。例如,在一个图形用户界面(GUI)应用程序中,当用户关闭一个窗口或者程序需要清理某个窗口时,就可以使用DestroyWindow函数。

2. 函数原型及参数说明

函数原型:BOOL DestroyWindow( HWND hWnd);

参数hWnd:这是要销毁的窗口的句柄。这个句柄是在创建窗口时由系统返回的一个唯一标识符,用于在程序中引用该窗口。例如,在Windows API编程中,当使用CreateWindow或CreateWindowEx函数创建窗口后,会得到一个窗口句柄,这个句柄就可以作为DestroyWindow函数的参数来销毁对应的窗口。

3. 返回值

如果函数成功销毁窗口,返回值为非零(TRUE)。

如果函数失败,返回值为零(FALSE)。可能导致失败的原因包括传递了无效的窗口句柄或者系统资源不足等情况。可以通过调用GetLastError函数来获取更详细的错误信息。

4. 使用示例

以下是一个简单的示例,创建一个简单的窗口,然后在用户按下某个按键(比如ESC键)时销毁该窗口:

#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("MyWindow");
    HWND hWnd;
    MSG msg;
    WNDCLASS wndclass;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    if (!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This program requires Windows NT!"),
        szAppName, MB_ICONERROR);
        return 0;
    }
    hWnd = CreateWindow(szAppName, TEXT("My Window"),
    WS_OVERLAPPEDWINDOW,
    CWND_USEDEFAULT, CWND_USEDEFAULT,
    CWND_USEDEFAULT, CWND_USEDEFAULT,
    NULL, NULL, hInstance, NULL);
    ShowWindow(hWnd, iCmdShow);
    UpdateWindow(hWnd);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_KEYDOWN:
            if (wParam == VK_ESCAPE)
            {
                DestroyWindow(hWnd);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
return 0;
}

在上述示例中:

首先通过WinMain函数进行窗口类的注册、窗口的创建和消息循环的启动。

在WndProc函数中,处理WM_KEYDOWN消息。当用户按下ESC键(VK_ESCAPE)时,调用DestroyWindow函数来销毁窗口。当窗口收到WM_DESTROY消息时,通过PostQuitMessage函数发送一个退出消息,从而结束消息循环,使程序正常退出。

C++编程API库