21xrx.com
2025-04-03 07:33:31 Thursday
文章检索 我的文章 写文章
如何编写一个简单的C++窗口程序
2023-07-08 14:37:43 深夜i     22     0
C++ 窗口程序 编写 简单

想学习编写C++窗口程序的朋友,不要担心,它并不难。

首先,要准备好开发环境,推荐使用Visual Studio开发工具,它为C++窗口程序开发提供了方便的支持。安装后,打开Visual Studio,选择空白项目。

第一步,定义窗口类。将以下代码粘贴到新建的项目中,我们就创建了一个名为MyWindowClass的窗口类:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
class MyWindowClass
{
public:
  static HINSTANCE hInstance;
  static TCHAR szWindowClass[];
  static TCHAR szTitle[];
  HWND hWnd;
  MyWindowClass();
  ~MyWindowClass();
  bool InitWindow();
  void RunWindow();
};

第二步,实现窗口类。编写以下代码,将上述窗口类的成员函数实现:

HINSTANCE MyWindowClass::hInstance = NULL;
TCHAR MyWindowClass::szWindowClass[] = _T("MyWindowClass");
TCHAR MyWindowClass::szTitle[] = _T("My Window");
MyWindowClass::MyWindowClass()
{
  InitWindow();
}
MyWindowClass::~MyWindowClass()
{
}
bool MyWindowClass::InitWindow()
{
  WNDCLASSEX wcex;
  wcex.cbSize = sizeof(WNDCLASSEX);
  wcex.style = CS_HREDRAW | CS_VREDRAW;
  wcex.lpfnWndProc = WindowProc;
  wcex.cbClsExtra = 0;
  wcex.cbWndExtra = 0;
  wcex.hInstance = hInstance;
  wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
  wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wcex.lpszMenuName = NULL;
  wcex.lpszClassName = szWindowClass;
  wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
  if (!RegisterClassEx(&wcex))
  {
    MessageBox(NULL, _T("窗口注册失败!"), _T("错误"), MB_ICONERROR | MB_OK);
    return false;
  }
  hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL);
  if (!hWnd)
  {
    MessageBox(NULL, _T("窗口创建失败!"), _T("错误"), MB_ICONERROR | MB_OK);
    return false;
  }
  ShowWindow(hWnd, SW_SHOWDEFAULT);
  UpdateWindow(hWnd);
  return true;
}
void MyWindowClass::RunWindow()
{
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
}

第三步,编写窗口过程函数。将以下代码添加到项目中:

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  PAINTSTRUCT ps;
  HDC hdc;
  switch (uMsg)
  {
  case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    TextOut(hdc, 5, 5, _T("Hello, world!"), 12);
    EndPaint(hWnd, &ps);
    break;
  case WM_DESTROY:
    PostQuitMessage(0);
    break;
  default:
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    break;
  }
  return 0;
}

这个窗口过程函数的功能是,当接收到WM_PAINT消息时,在窗口客户区内显示“Hello, world!”的字样。当接收到WM_DESTROY消息时,退出程序。

第四步,创建窗口对象并运行。编写以下代码,创建窗口对象并启动:

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
  UNREFERENCED_PARAMETER(hPrevInstance);
  UNREFERENCED_PARAMETER(lpCmdLine);
  MyWindowClass::hInstance = hInstance;
  MyWindowClass myWindow;
  myWindow.RunWindow();
  return 0;
}

现在,我们已经完成了C++窗口程序的编写。保存并编译程序,在Visual Studio的“调试”菜单中,选择“开始调试”,即可运行程序。打开的窗口将会在屏幕中央显示,并且窗口客户区内会显示“Hello, world!”字样。

  
  

评论区

请求出错了