存在清单文件时仍需调用InitCommonControlsEx()吗?
问题
某Win32应用以对话框作为主窗体,未在主函数中显式创建窗口,当前对话框仅包含按钮。现有如下清单文件:
#pragma comment(linker,"\"/manifestdependency:type='win32' \ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
请问是否仍需调用如下InitCommonControlsEx()代码?
INITCOMMONCONTROLSEX icc; icc.dwSize = sizeof(INITCOMMONCONTROLSEX); icc.dwICC = ICC_STANDARD_CLASSES; // the right one? InitCommonControlsEx(&icc);
目前不调用该函数也无编译错误或警告,应用运行正常。
回答
- 不需要额外调用
InitCommonControlsEx()。 - 你的场景里,对话框只有标准按钮这类基础控件,通过清单文件指定通用控件依赖后,系统会自动加载对应的通用控件库,完全能支撑这些基础控件正常工作。
- 另外,
ICC_STANDARD_CLASSES对应标准控件类,但对仅含按钮的对话框而言,就算不手动初始化,系统在创建对话框时也会自动处理所需的控件注册逻辑,所以现在不调用该函数也能正常运行。 - 但如果之后要用到进度条、树视图这类更复杂的通用控件,就必须调用
InitCommonControlsEx(),并传入对应功能的dwICC参数来注册这些控件类。
内容的提问来源于stack exchange,提问作者user2470889189
相关产品推荐
相关产品推荐

