21xrx.com
2024-12-22 22:10:49 Sunday
登录
文章检索 我的文章 写文章
如何编写一个简单的C++窗口程序
2023-07-08 14:37:43 深夜i     --     --
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!”字样。

  
  

评论区

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