MFC工程中,在InitInstance()函数(一般在工程名.cpp文件中)中有这样一段代码:************************************************************************************* // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls);**************************************************************************************这些代码的作用,注释里已经说的很清楚了,我们先来看下这写代码是什么意思。我们从InitCommonControlsEx函数下手,其函数原型为:BOOL InitCommonControlsEx( LPINITCOMMONCONTROLSEX lpInitCtrls);其有一个参数lpInitCtrls,是一个指向结构体INITCOMMONCONTROLSEX的长指针,上面的代码先创建一个INITCOMMONCONTROLSEX结构体对象 InitCtrls,然后将其地址作为InitCommonControlsEx函数的参数。INITCOMMONCONTROLSEX结构体的定义在commctrl.h文件中,下面的代码节选自commctrl.h文件,其中包括InitCommonControls和InitCommonControlsEx函数的声明以及tagINITCOMMONCONTROLSEX 结构体的定义。 INITCOMMONCONTROLSEX结构体包含两个参数dwSize和dwICC,参数说明请看注释。_WIN32_IE和_WIN32_WINNT的定义请看stdafx.h文件。 InitCommonControlsEx函数的调用效果是累加的,例如你先以ICC_TAB_CLASSES标志调用InitCommonControlsEx,然后以ICC_BAR_CLASSES 标志调用,那么tab和bar通用控件类都将被注册并在你的程序中是可用的。InitInstance()函数中采用的ICC_WIN95_CLASSES其实是上面那些标志的组合。********************************************commctrl.h**********************************************************
WINCOMMCTRLAPI void WINAPI InitCommonControls( void ); #if (_WIN32_IE >= 0x0300) typedef struct tagINITCOMMONCONTROLSEX { DWORD dwSize; // size of this structure 结构体的大小 DWORD dwICC; // 标志位用来决定那些通用控件类将从DLL中加载,值可以是下面那些ICC_的组合 } INITCOMMONCONTROLSEX, * LPINITCOMMONCONTROLSEX; #define ICC_LISTVIEW_CLASSES 0x00000001 // listview, header #define ICC_TREEVIEW_CLASSES 0x00000002 // treeview, tooltips #define ICC_BAR_CLASSES 0x00000004 // toolbar, statusbar, trackbar, tooltips #define ICC_TAB_CLASSES 0x00000008 // tab, tooltips #define ICC_UPDOWN_CLASS 0x00000010 // updown #define ICC_PROGRESS_CLASS 0x00000020 // progress #define ICC_HOTKEY_CLASS 0x00000040 // hotkey #define ICC_ANIMATE_CLASS 0x00000080 // animate #define ICC_WIN95_CLASSES 0x000000FF #define ICC_DATE_CLASSES 0x00000100 // month picker, date picker, time picker, updown #define ICC_USEREX_CLASSES 0x00000200 // comboex #define ICC_COOL_CLASSES 0x00000400 // rebar (coolbar) control #if (_WIN32_IE >= 0x0400) #define ICC_INTERNET_CLASSES 0x00000800 #define ICC_PAGESCROLLER_CLASS 0x00001000 // page scroller #define ICC_NATIVEFNTCTL_CLASS 0x00002000 // native font control #endif #if (_WIN32_WINNT >= 0x501) #define ICC_STANDARD_CLASSES 0x00004000 #define ICC_LINK_CLASS 0x00008000 #endif WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX); #endif // _WIN32_IE >= 0x0300