以下示例使用CreateWindowEx函数创建用户可以自定义的工具栏,并具有与之关联的工具提示控件。该示例使用TB_ADDBITMAP和TB_ADDSTRING消息将按钮图像和按钮字符串添加到工具栏。该示例还使用TB_ADDBUTTONS消息添加了三个按钮。
// CreateAToolBar - 创建工具栏并添加初始集合
//按钮。
//如果成功返回工具栏的句柄,否则返回NULL。
// hwndParent - 父窗口的句柄
HWND CreateAToolBar(HWND hwndParent)
{
HWND hwndTB;
TBADDBITMAP tbab;
TBBUTTON tbb[3];
char szBuf[16];
int iCut, iCopy, iPaste;
//确保加载公共控制DLL。
InitCommonControls();
//创建一个用户可以自定义的工具栏
//与其相关联的工具提示
hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL,
WS_CHILD | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE,
0, 0, 0, 0, hwndParent, (HMENU) ID_TOOLBAR, g_hinst, NULL);
//发送TB_BUTTONSTRUCTSIZE消息,这是必需的
//向后兼容性。
SendMessage(hwndTB,TB_BUTTONSTRUCTSIZE,
(WPARAM) sizeof(TBBUTTON), 0);
//将包含按钮图像的位图添加到工具栏。
tbab.hInst = g_hinst;
tbab.nID = IDB_BUTTONS;
SendMessage(hwndTB,TB_ADDBITMAP,(WPARAM)NUM_BUTTON_BITMAPS,
(WPARAM) &tbab);
//将按钮字符串添加到工具栏。
LoadString(g_hinst, IDS_CUT, (LPSTR) &szBuf, MAX_LEN);
iCut = SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf);
LoadString(g_hinst, IDS_COPY, (LPSTR) &szBuf, MAX_LEN);
iCopy = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
(LPARAM) (LPSTR) szBuf);
LoadString(g_hinst, IDS_PASTE, (LPSTR) &szBuf, MAX_LEN);
iPaste = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0,
(LPARAM) (LPSTR) szBuf);
//将TBBUTTON数组填入按钮信息,然后添加
//按钮到工具栏。
tbb[0].iBitmap = BMP_CUT;
tbb[0].idCommand = IDM_CUT;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].dwData = 0;
tbb[0].iString = iCut;
tbb[1].iBitmap = BMP_COPY;
tbb[1].idCommand = IDM_COPY;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].dwData = 0;
tbb[1].iString = iCopy;
tbb[2].iBitmap = BMP_PASTE;
tbb[2].idCommand = IDM_PASTE;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].dwData = 0;
tbb[2].iString = iPaste;
SendMessage(hwndTB,TB_ADDBUTTONS,(WPARAM)NUM_BUTTONS,
(LPARAM) (LPTBBUTTON) &tbb);
ShowWindow(hwndTB, SW_SHOW);
return hwndTB;
}