是否有必要使用InitCommonControlsEx()和InitCommonControls()?

时间:2009-04-07 17:41:04

标签: winapi

我对win32完全不熟悉。我在过去的48小时里一直在努力。

我正在尝试构建一个“grid”,我在列表视图控件标题控件上有示例msdn.microsoft.com。

第一个调用InitCommonControls()函数(此外我读过这个函数已经过时了。)

HWND DoCreateHeader(HWND hwndParent, HINSTANCE hInst) 
{ 
    HWND hwndHeader; 
    RECT rcParent; 
    HDLAYOUT hdl; 
    WINDOWPOS wp; 

    // Ensure that the common control DLL is loaded, and then create 
    // the header control. 
    InitCommonControls(); 

    // ...

    // hwndHeader = CreateWindowEx(0, WC_HEADER, ...
}

第二个调用InitCommonControlsEx()函数。

HWND CreateListView (HWND hwndParent, HINSTANCE hInst) 
{     
    RECT rcl; 
    INITCOMMONCONTROLSEX icex;

    // Ensure that the common control DLL is loaded. 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC  = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex); 

    // ...

    // HWND hWndListView = CreateWindow(WC_LISTVIEW ...
}
似乎这些函数需要comctl32.lib库,但下载它是一团糟。

此外,我注意到如果我删除这些功能,一切都会继续正常运行。 然后,他们是否有必要?

谢谢!

1 个答案:

答案 0 :(得分:9)

是的,这是必要的。他们需要获取已注册的自定义控件的窗口类。可能性是,代码中的其他一些组件正在加载它们。我不确定,但我想如果你在清单中支持comctl v6(XP和up视觉样式),你会自动获得commctl32.dll。

有关InitCommonControlsEx执行的更多信息here

通过下载comctl32.lib不确定您的意思,它自NT 4和Windows 95以来就存在于每个Windows平台上,因此您无需重新分发它。