今天使用win32编程创建ToolBar, 由于对这块不熟, 所以今天特意写一下,怕以后忘了, 也没啥技术含量, 大牛飘过~~~
创建ToolBar可以使用CreateToolBar和CreateWindowEx, 由于微软不提倡使用CreateToolBar, 所以这里使用的是后者。
用CreateWindowEx需要指定窗口类为TOOLBARCLASSNAME,这里就直接上代码了
(1)使用commctl中的标准位图
HWND CreateAToolBar(HWND hwnDlg) // hwnDlg为窗口的句柄
{
const int BUTTONNUMS = 2; //工具栏上按钮的数目
TBBUTTON tbb[2]; //按钮
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = STD_FILENEW;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[1].iBitmap = STD_REDOW;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
//位图,commctl中的标准位图
TBADDBITMAP tbBitmap;
tbBitmap.hInst = HINST_COMMCTRL;
tbBitmap.nID = IDB_STD_SMALL_COLOR;
RECT windowRect;
GetWindowRect(hwndParent,&windowRect);
hwndToolbar = CreateWindowEx(0L,TOOLBARCLASSNAME,NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,0,0,0,0,
hwndParent,(HMENU)ID_TOOLBAR,hInst,NULL);
//将位图添加到工具栏
SendMessage(hwndToolbar,TB_ADDBITMAP,0,(LPARAM)&tbBitmap);
//计算工具栏大小
SendMessage(hwndToolbar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
//添加按钮到工具栏
SendMessage(hwndToolbar,TB_ADDBUTTONS,(WPARAM)BUTTONNUMS,(LPARAM)&tbb);
return hwndToolbar;
}
(2) 另一种就是使用自己定位的位图(这里我是一个一个位图添加的, 不是一个位图里面包含很多的图片)
BOOL CreateAToolBar(HWND hwnDlg)
{
HWND hToolBar = CreateWindowEx(NULL, TOOLBARCLASSNAME, " ", WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS,
0, 0, 0, 0, hwnDlg, /*NULL*/(HMENU)1111, hInst, NULL); // 创建工具栏
TBBUTTON tbb[13];
ZeroMemory(tbb, sizeof(tbb));
HIMAGELIST hInmageList = ImageList_Create(32, 32, ILC_COLOR24/*ILC_COLOR16 | ILC_MASK*/, 13, 0); // 创阿位图列表, 13表示我创建了13个这样的
int iBitmap[13] = {0};
WORD Id[13] = { IDB_FileManage, IDB_ScreenControl, IDB_Cmd, IDB_KeyRecord, IDB_ProcessManage, IDB_Regedit, IDB_ServiceManage,
IDB_WindowsManage, IDB_AudioMomonitor, IDB_DownLoad, IDB_FlushIP, IDB_ParameterSet,IDB_ProduceClient };
for (int i = 0; i < 13; i++)
{
iBitmap[i] = ImageList_Add(hInmageList, LoadBitmap(hInst, MAKEINTRESOURCE(Id[i])), 0);
}
SendMessage(hToolBar, TB_SETIMAGELIST, 0, (LPARAM)hInmageList); //将位图添加到工具栏
TCHAR *szBitMAp[] = { "文件管理", "屏幕监控", "超级终端", "键盘记录", "进程管理", "注册表管理", "服务管理", "窗口管理",
"音视频监控","下载管理","刷新IP", "参数设置", "创建客户"};
for (int j = 0; j < 13; j++)
{
tbb[j].iBitmap = MAKELONG(iBitmap[j], 0);
tbb[j].fsState = TBSTATE_ENABLED;
tbb[j].fsStyle = TBSTYLE_BUTTON;
tbb[j].iString = (INT_PTR)szBitMAp[j];
}
SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); //计算工具栏大小
SendMessage(hToolBar, TB_ADDBUTTONS, sizeof(tbb) / sizeof(TBBUTTON), (LPARAM)&tbb); //添加按钮到工具栏
//SendMessage(hToolBar, TB_SETBUTTONSIZE, 0, (LPARAM)MAKELONG(60, 60));
SendMessage(hToolBar, TB_AUTOSIZE, 0, 0); //调整工具栏大小
//ShowWindow(hToolBar, TRUE);
return TRUE;
}