前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CreateWindow返回空句柄而GetLastError返回0咋回事

CreateWindow返回空句柄而GetLastError返回0咋回事

作者头像
gaigai
发布2019-08-30 11:38:24
2.1K0
发布2019-08-30 11:38:24
举报
文章被收录于专栏:Windows开发Windows开发

调用CreateWindow或CreateWindowEx创建窗口返回空句柄时,我们总是会调用GetLastError看下错误码,就知道具体错误的原因(比如窗口类未注册),但如果GetLastError返回0没有报错,是怎么回事呢?

阅读CreateWindow API说明文档,梳理下CreateWindow的主要内部实现过程:

第一,系统创建窗口资源,获得一个窗口句柄。

第二,SendMessage发送WM_CREATE消息,消息处理函数WndProc处理WM_CREATE消息,返回处理结果

第三,如果处理结果为0,窗口创建成功返回窗口句柄,如果处理结果非0,销毁窗口,返回空句柄。

所以,CreateWindow返回空句柄而GetLastError返回0是因为未正确处理WM_CREATE消息,返回非0值。

笔者自己遇到过两例未正确处理WM_CREATE消息:

第一,窗口处理函数没有处理WM_CREATE消息时,没有调用默认窗口处理函数 retrunDefWindowProc(…);

第二,窗口处理函数入口处写了一段代码,该段代码触发了ASSERT,也就是DebugBreak,但是程序没崩溃。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Windows开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档