如何创建一个纯winapi窗口

avatar
作者
筋斗云
阅读量:6

要创建一个纯 WinAPI 窗口,你需要完成以下步骤:

  1. 包含头文件:包含 windows.h 头文件,该头文件包含了创建窗口所需的函数和宏定义。
#include <windows.h> 
  1. 定义窗口处理函数: 定义一个窗口处理函数(Window Procedure),该函数将被用来处理窗口消息。
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; // 处理其他消息 default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } 
  1. 注册窗口类:使用 RegisterClassEx 函数注册一个窗口类。
WNDCLASSEX wc = {0}; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = L"WinAPIClass"; if (!RegisterClassEx(&wc)) { MessageBox(NULL, L"窗口类注册失败!", L"错误", MB_ICONERROR); return 1; } 
  1. 创建窗口:使用 CreateWindowEx 函数创建一个窗口实例。
HWND hwnd = CreateWindowEx( 0, L"WinAPIClass", L"WinAPI 窗口", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) { MessageBox(NULL, L"窗口创建失败!", L"错误", MB_ICONERROR); return 1; } 
  1. 显示窗口:调用 ShowWindow 函数显示窗口。
ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); 
  1. 消息循环:使用 GetMessagePeekMessage 函数进入消息循环。
MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } 

完整示例代码:

#include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASSEX wc = {0}; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = L"WinAPIClass"; if (!RegisterClassEx(&wc)) { MessageBox(NULL, L"窗口类注册失败!", L"错误", MB_ICONERROR); return 1; } // 创建窗口 HWND hwnd = CreateWindowEx( 0, L"WinAPIClass", L"WinAPI 窗口", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) { MessageBox(NULL, L"窗口创建失败!", L"错误", MB_ICONERROR); return 1; } // 显示窗口 ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // 消息循环 MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } 

这样你就创建了一个纯 WinAPI

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!