21xrx.com
2025-06-20 00:15:57 Friday
文章检索 我的文章 写文章
C++怎样设置多窗口?
2023-07-08 22:02:38 深夜i     --     --
C++编程 多窗口设置 界面设计 控件调用 消息传递

C++是一种通用的高级编程语言,广泛用于开发各种类型的应用程序。在Windows操作系统上,C++也能够轻松建立多窗口的应用程序。下面将介绍C++如何设置多窗口应用程序。

首先,我们需要包含头文件"windows.h"。这个头文件包含了许多与创建Windows应用程序相关的函数和数据类型。接下来,我们需要定义新的窗口类,并通过CreateWindow函数创建新的窗口。

可以通过以下步骤实现多窗口:

1.定义一个新的窗口类,指定窗口类名、窗口过程、和窗口样式。窗口类名是窗口的标识符,用于在程序中唯一地标识一个窗口。

2.通过注册窗口类将窗口类注册到系统中。

3.调用CreateWindow函数创建一个窗口,并指定它的窗口类名、标题、样式、位置和大小等属性。

4.当我们想要在程序中创建新的窗口时,可以通过重复步骤1至3创建新的窗口。

下面的示例代码演示了如何使用C++创建两个窗口:

#include <windows.h>
// 定义第一个窗口类
const char* g_szClassName1 = "MyWindowClass1";
LRESULT CALLBACK WndProc1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
  {
    // 处理窗口销毁事件
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    default:
      return DefWindowProc(hwnd, msg, wParam, lParam); 
  }
  return 0;
}
// 定义第二个窗口类
const char* g_szClassName2 = "MyWindowClass2";
LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
  {
    // 处理窗口销毁事件
    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)
{
  // 注册第一个窗口类
  WNDCLASSEX wc;
  ZeroMemory(&wc, sizeof(wc));
  wc.cbSize = sizeof(wc);
  wc.style = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc = WndProc1;
  wc.hInstance = hInstance;
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wc.lpszClassName = g_szClassName1;
  RegisterClassEx(&wc);
  // 注册第二个窗口类
  ZeroMemory(&wc, sizeof(wc));
  wc.cbSize = sizeof(wc);
  wc.style = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc = WndProc2;
  wc.hInstance = hInstance;
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wc.lpszClassName = g_szClassName2;
  RegisterClassEx(&wc);
  // 创建第一个窗口
  HWND hwnd1 = CreateWindowEx(
    0,
    g_szClassName1,
    "Window 1",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    640,
    480,
    NULL,
    NULL,
    hInstance,
    NULL
  );
  ShowWindow(hwnd1, nCmdShow);
  // 创建第二个窗口
  HWND hwnd2 = CreateWindowEx(
    0,
    g_szClassName2,
    "Window 2",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    640,
    480,
    NULL,
    NULL,
    hInstance,
    NULL
  );
  ShowWindow(hwnd2, nCmdShow);
  // 进入消息循环
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int)msg.wParam;
}

在这个示例中,我们创建了两个窗口类(g_szClassName1和g_szClassName2),并在程序中分别创建了两个窗口(hwnd1和hwnd2)。在窗口过程中,我们将处理窗口销毁事件(WM_DESTROY),以退出应用程序。

通过以上实例,我们已经了解了在C++中如何设置多窗口,代表Windows应用程序更加灵活和强大。

  
  

评论区