您的位置:首页 > 其它

InitCommonControlsEx Function|MFC通用控件初始化

2014-03-30 18:16 453 查看
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**********************************************************

WINCOMMCTRLAPIvoidWINAPI
InitCommonControls(void);

#if(_WIN32_IE >= 0x0300)

typedefstructtagINITCOMMONCONTROLSEX {

DWORD dwSize; //size of this structure
结构体的大小

DWORD dwICC; //标志位用来决定那些通用控件类将从DLL中加载,值可以是下面那些ICC_的组合

} INITCOMMONCONTROLSEX,*LPINITCOMMONCONTROLSEX;

#defineICC_LISTVIEW_CLASSES 0x00000001//listview,
header

#defineICC_TREEVIEW_CLASSES 0x00000002//treeview,
tooltips

#defineICC_BAR_CLASSES 0x00000004//toolbar,
statusbar, trackbar, tooltips

#defineICC_TAB_CLASSES 0x00000008//tab,
tooltips

#defineICC_UPDOWN_CLASS 0x00000010//updown

#defineICC_PROGRESS_CLASS 0x00000020//progress

#defineICC_HOTKEY_CLASS 0x00000040//hotkey

#defineICC_ANIMATE_CLASS 0x00000080//animate

#defineICC_WIN95_CLASSES 0x000000FF

#defineICC_DATE_CLASSES 0x00000100//month
picker, date picker, time picker, updown

#defineICC_USEREX_CLASSES 0x00000200//comboex

#defineICC_COOL_CLASSES 0x00000400//rebar
(coolbar) control

#if(_WIN32_IE >= 0x0400)

#defineICC_INTERNET_CLASSES 0x00000800

#defineICC_PAGESCROLLER_CLASS 0x00001000 //page
scroller

#defineICC_NATIVEFNTCTL_CLASS 0x00002000 //native
font control

#endif

#if(_WIN32_WINNT >= 0x501)

#defineICC_STANDARD_CLASSES 0x00004000

#defineICC_LINK_CLASS 0x00008000

#endif

WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
#endif //_WIN32_IE
>= 0x0300

************************************************************************************************************************

ICC_BAR_CLASSES——注册工具栏、状态栏、Trackbar和Tooltip类。

ICC_COOL_CLASSES——注册Rebar类。

ICC_DATE_CLASSES——注册Date and Time Picker类。

ICC_HOTKEY_CLASS——注册Hot Key类。

ICC_INTERNET_CLASSES——注册IP Address Picker类。

ICC_LISTVIEW_CLASSES——注册ListView和Header类。

ICC_PAGESCROLLER_CLASS——注册Pager类。

ICC_PROGRESS_CLASS——注册Progress Bar类。

ICC_TAB_CLASSES——注册Tab和Tooltip类。

ICC_TREEVIEW_CLASSES——注册TreeView和Tooltip类。

ICC_UPDOWN_CLASS——注册Up-Down类。

ICC_USEREX_CLASSES——注册ComboBoxEx类。

ICC_WIN95_CLASSES——注册InitCommonControls函数注册的所有类。

转自:http://blog.sina.com.cn/s/blog_4fcd1ea30100qlzp.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: