讲师中心 微信公众号
AI工具推荐 视频效率加速

c++ win32窗口创建 c++如何使用winapi创建gui窗口

夏芳小哥_6726

夏芳小哥_6726

发布时间:2026-03-21 18:05:03

|

344人浏览过

|

来源于php中文网

原创

是。必须调用RegisterClassEx注册窗口类,否则CreateWindowEx失败并返回NULL;WndProc中必须处理WM_DESTROY并调用PostQuitMessage(0);GUI程序首选GetMessage而非PeekMessage。

c++ win32窗口创建 c++如何使用winapi创建gui窗口

WinAPI 创建窗口必须调用 RegisterClassEx 吗?

必须。不注册窗口类,CreateWindowEx 会直接失败并返回 NULL,且 GetLastError() 返回 ERROR_CLASS_DOES_NOT_EXIST。

常见错误是只写 CreateWindowEx 就跑,忘了注册——尤其新手从网上抄片段时容易漏掉整个 WNDCLASSEX 初始化和注册流程。

  • cbSize 字段必须设为 sizeof(WNDCLASSEX),否则系统认为结构体无效(Windows 10+ 会静默失败)
  • hInstance 要传 WinMain 的第一个参数,不能用 GetModuleHandle(NULL) 替代(虽有时能凑合,但资源加载可能出错)
  • lpszClassName 是你自定义的字符串,后续 CreateWindowEx 的 lpClassName 必须完全匹配(区分大小写)

WndProc 里为什么一定要处理 WM_DESTROY?

不处理 WM_DESTROY,窗口关了进程还在跑,任务管理器里进程不退出,调试时以为卡死,其实是消息循环没收到 PostQuitMessage。

典型表现:点关闭按钮,窗口消失,但程序没退出,CPU 占用归零,线程挂起在 GetMessage。

立即学习“C++免费学习笔记(深入)”;

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • 必须在 case WM_DESTROY: 分支中调用 PostQuitMessage(0),这是通知 GetMessage 退出循环的唯一合法方式
  • 不要在 WM_CLOSE 里调用 PostQuitMessage(用户可能只是想最小化,不是退出)
  • 不要用 exit() 或 TerminateProcess 强退——资源泄漏、DLL 未卸载、调试器断连等问题接踵而至

GetMessage 和 PeekMessage 选哪个?

绝大多数 GUI 程序用 GetMessage;只有需要非阻塞轮询(比如游戏主循环、嵌入式 UI、或与 OpenGL 渲染线程协同)才考虑 PeekMessage。

误用 PeekMessage 最常见的坑是写成忙等:while (!PeekMessage(...)) { Render(); },结果 CPU 占满 100%,窗口反而卡顿无响应。

  • GetMessage 阻塞等待消息,节能、响应标准,适合传统 Win32 应用
  • PeekMessage 立即返回,需手动加 if (msg.message == WM_QUIT) break; 判断退出条件
  • 若用 PeekMessage,务必在无消息时插入 WaitMessage() 或短延时(如 Sleep(1)),避免空转

窗口显示后黑屏 / 不重绘,WM_PAINT 没触发?

大概率是没调用 UpdateWindow,或者 BeginPaint/EndPaint 成对缺失,导致系统认为“已绘制”,不再发 WM_PAINT。

另一个隐蔽原因是窗口类注册时 style 字段漏了 CS_HREDRAW | CS_VREDRAW,窗口缩放时不自动重绘客户区。

  • 创建窗口后立刻调用 UpdateWindow(hwnd),强制触发首次 WM_PAINT
  • WM_PAINT 处理中必须调用 BeginPaint 和 EndPaint,缺一不可(哪怕什么也不画)
  • 不要在 WM_PAINT 外部用 GetDC 绘图后不 ReleaseDC——GDI 句柄耗尽后整个桌面都可能变灰
窗口生命周期里最易被忽略的点:所有资源(图标、光标、字体、GDI 对象)必须在 WinMain 返回前显式销毁,靠进程退出自动清理在 Windows 上不可靠,尤其 DLL 场景下会引发句柄泄漏。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

334

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2480

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

727

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1638

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2464

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5944

2023.10.24

PixPix官网入口合集
PixPix官网入口合集

本专题汇总了PixPix官网在线使用入口及平台功能详解,涵盖文生图、图生图、AI图片编辑、AI视频创作等核心能力,并整理了AI爆款图片复刻、商品套图、详情页生成、视频变清晰与去水印等电商专项工具的使用教程。同时收录了PixPix MCP接入Codex、Claude Code等主流Agent的操作指南,助您一站式完成AI图片与视频创作。

0

2026.10.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn