使用DrawThemeBackground绘制系统样式控件前需调用InitCommonControls系列函数吗?
关于自定义绘制控件是否需要调用InitCommonControls的问题
不需要——前提是你完全靠自定义逻辑绘制控件,没有使用任何comctl32.dll提供的窗口类或扩展功能。
理由如下:
InitCommonControls/InitCommonControlsEx的核心作用是注册系统扩展通用控件的窗口类(比如工具栏、列表视图、树控件这些),同时初始化comctl32.dll里的部分功能。但你不用CreateWindowEx创建系统原生的组合按钮、复选框,这些标准控件的窗口类本来就由user32.dll注册好了,和这两个初始化函数无关。- 你用到的
DrawThemeBackground属于uxtheme.dll的主题绘制API,和comctl32.dll的初始化没有直接绑定。只要系统开启了视觉样式,并且你正确调用OpenThemeData获取了主题句柄,就能正常使用该函数绘制,不需要依赖InitCommonControls的调用。
当然,如果你的ActiveX控件里还用到了comctl32的其他功能(比如图像列表、提示框这类),那还是得保留初始化调用,否则这些功能可能无法正常工作。
内容的提问来源于stack exchange,提问作者Tecman
相关产品推荐
相关产品推荐

