工具条和状态条的在comctl32.lib当中实现,要想得到TOOLBAR和STATUS的支持,程序必须添加CommCtrl头文件,并且在初始化TOOLBAR和STATUSBAR之前,调用函数InitCommonControls函数对整个库进行初始化。
工具条和状态条都属于主窗口的子窗口,所以创建的时机是在主窗口的ON_WM_CREATE消息当中。第一步,需要调用相应的函数创建出窗口句柄出来,这个函数就是CreateWindowEx。
HWND hToolBar = CreateWindowEx(0,
TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS |
TBSTYLE_FLAT | CCS_BOTTOM | TBSTYLE_TOOLTIPS,
0,
40,
340,
30,
hwnd,
NULL,
hInst,
NULL);
其中TOOLBARCLASSNAME在CommCtrl头文件中被定义,
#define TOOLBARCLASSNAMEW L"ToolbarWindow32"
#define TOOLBARCLASSNAMEA "ToolbarWindow32"
#ifdef UNICODE
#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW
#else
#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA
#endif
接下来是向刚刚创建的工具条发送TB_ADDBUTTONS消息,这个消息是由系统处理的,用于向系统添加TOOLBAR的按钮信息。这个按钮信息由TBBUTTON结构体数组组成,
typedef struct _TBBUTTON {
int iBitmap; //图片在IMAGELIST当中的索引号
int idCommand; //与这个工具条项目相对应的空间ID号
BYTE fsState; //工具条项目的状态,使能或者禁止
BYTE fsStyle; //工具条项目的风格,也就是工具条项目的表现形式,
BYTE bReserved[2];//保留用于对齐
DWORD_PTR dwData; //用于存放与工具条项目相关的数据地址
INT_PTR iString; //用于存放与工具条项目相关的字符串的地址,
} TBBUTTON
其中iBitMap和dwData、iString互斥使用,也就是说这个只能是三个当中的一个有效。
由于当使用iBitmap的时候,需要一个HIMAGELIST管理TBBUTTON相关的图片,其中iBitmap是HIMAGELIST的索引,所以首先需要创建一个HIMAGELIST。调用相应的宏ImageList_Create就可以了