"#include "<Windows.h>"\n\nLRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);\n\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)\n{\n // 注册窗口类\n WNDCLASS wc = {0};\n wc.lpfnWndProc = WindowProc;\n wc.hInstance = hInstance;\n wc.hbrBackground = (HBRUSH)COLOR_WINDOW;\n wc.lpszClassName = L"MyWindowClass";\n RegisterClass(&wc);\n\n // 创建窗口\n HWND hwnd = CreateWindow(\n L"MyWindowClass", \n L"不规则窗口", \n WS_POPUP | WS_VISIBLE, \n 100, 100, 400, 300, \n NULL, NULL, hInstance, NULL\n );\n\n // 创建不规则形状的区域\n HRGN hRgn = CreateEllipticRgn(0, 0, 400, 300);\n\n // 将区域应用于窗口\n SetWindowRgn(hwnd, hRgn, TRUE);\n\n // 消息循环\n MSG msg = {0};\n while (GetMessage(&msg, NULL, 0, 0))\n {\n TranslateMessage(&msg);\n DispatchMessage(&msg);\n }\n\n return msg.wParam;\n}\n\nLRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n switch (uMsg)\n {\n case WM_DESTROY:\n PostQuitMessage(0);\n return 0;\n }\n\n return DefWindowProc(hwnd, uMsg, wParam, lParam);\n}\n"\n\n上述代码中使用了CreateEllipticRgn函数创建了一个椭圆形状的区域,然后使用SetWindowRgn函数将该区域应用于窗口。所以最终窗口的形状就变成了一个椭圆。\n\n下面解释一些代码中的奇怪单词:\n\n- HWND:是一个句柄类型,代表窗口的句柄(handle),用于标识和操作窗口。\n- HINSTANCE:是一个句柄类型,代表程序实例的句柄。每个运行的Windows程序都有一个唯一的实例句柄。\n- HBRUSH:是一个句柄类型,代表画刷(brush)的句柄,用于绘制窗口的背景。\n- LRESULT:是一个长整型(LONG_PTR)的别名,在Windows API中用于表示函数返回值或消息处理结果。\n- WPARAM和LPARAM:是消息参数类型,用于传递消息相关的数据。\n- WS_POPUP:是窗口样式(window style)的一种,表示创建一个无标题栏的弹出式窗口。\n- DefWindowProc:是默认窗口过程(window procedure)的函数指针,用于处理未被应用程序处理的消息。\n- RegisterClass:用于注册窗口类,定义窗口的基本属性和行为。\n- CreateWindow:用于创建窗口。\n- GetMessage:用于从消息队列中获取消息。\n- TranslateMessage:用于将键盘消息转换为字符消息。\n- DispatchMessage:用于将消息分派给窗口过程进行处理。\n- PostQuitMessage:用于发送退出消息,终止消息循环。

C++ 使用 Windows API 创建不规则形状窗口 - 详细教程和代码示例

原文地址: https://www.cveoy.top/t/topic/qpzo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录