设置WndClassEx.style = WS_OVERLAPPEDWINDOW后窗口类注册失败问题
问题原因
你犯的是Win32开发里非常常见的风格参数混用错误,根源是混淆了两类完全不同的窗口风格体系:
- WNDCLASSEX结构体的
style成员接收的是窗口类风格,所有取值都为CS_前缀的常量(比如CS_HREDRAW、CS_VREDRAW、CS_DBLCLKS等),用来定义同一窗口类下所有窗口实例的公共属性。 - 你用的
WS_OVERLAPPEDWINDOW是窗口实例风格,所有取值都为WS_前缀,是创建单个窗口时传给CreateWindowEx函数的dwStyle参数的,不属于窗口类的合法配置项。
系统执行RegisterClassEx时会校验style字段的合法性,传入非CS前缀的非法标识位就会直接返回失败。
修复方案
- 替换窗口类的style赋值为合法的类风格,最常用的基础配置如下:
WndClassEx.style = CS_HREDRAW | CS_VREDRAW;
- 把
WS_OVERLAPPEDWINDOW移到你后续创建窗口实例的CreateWindowEx调用的dwStyle参数位置即可。
排错小提示
下次遇到Win32 API调用失败时,立刻调用GetLastError()获取错误码,这类非法参数的错误会返回87(ERROR_INVALID_PARAMETER),可以快速定位问题类型。
内容的提问来源于stack exchange,提问作者Gijahara
相关产品推荐
相关产品推荐

