21xrx.com
2025-04-28 13:43:51 Monday
文章检索 我的文章 写文章
C++ 简单窗口代码实例
2023-07-07 10:37:52 深夜i     13     0
C++编程 窗口程序 程序实例 GUI设计 界面开发

C++作为一门广泛使用的编程语言,常被用于开发桌面应用。窗口程序是C++实现桌面应用的重要一环,本文将介绍C++实现简单窗口的代码实例。

使用C++实现窗口通常需要借助于Windows API(应用程序接口)库。Windows API提供了许多函数、结构体和常量,用于操作窗口、消息队列、用户界面等。

我们先来看一下一个最简单的窗口程序:

#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  const char CLASS_NAME[] = "Sample Window Class";
  
  WNDCLASS wc = { };
  wc.lpfnWndProc = WndProc;
  wc.hInstance = hInstance;
  wc.lpszClassName = CLASS_NAME;
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  
  if (!RegisterClass(&wc)) {
    MessageBox(NULL, "Window Registration Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
    return 0;
  }
  
  HWND hWnd = CreateWindowEx(
    0,               // optional window styles
    CLASS_NAME,           // window class
    "Sample Window",        // window title
    WS_OVERLAPPEDWINDOW,      // window style
    // size and position
    CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
    NULL,    // parent window  
    NULL,    // menu
    hInstance, // instance handle
    NULL    // additional application data
  );
  if (hWnd == NULL) {
    MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
    return 0;
  }
  ShowWindow(hWnd, nCmdShow);
  MSG msg = { };
  while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}
LRESULT CALLBACK WndProc(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;
}

这个程序只是创建了一个窗口,窗口的标题为“Sample Window”,大小为400x300。其中RegisterClass函数注册了一个窗口类,在创建窗口时指定使用该窗口类。

WndProc是一个回调函数,当窗口接收到消息时,Windows自动调用该函数对消息进行处理。在这个程序中,只处理了窗口销毁消息WM_DESTROY,当接收到该消息时,程序结束并退出。

以上代码仅仅是一个简单的窗口程序,但对于刚开始入门C++窗口编程的开发者来说,是一个很好的学习例子。在实际开发中,我们还需要实现更复杂的用户交互、视图布局和功能模块等。

  
  

评论区