工具栏:
#include<commctrl.h>
加入静态库:comctl32.lib
#defineIDC_MAIN_TOOL 4
#define ID_FILE_NEW 5
#defineID_FILE_OPEN 6
#defineID_FILE_SAVEAS 7
InitCommonControls();
HWNDhTool=CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD |WS_VISIBLE,
0,0, 60, 60,
hWnd,
(HMENU)IDC_MAIN_TOOL,
GetModuleHandle(NULL),NULL);
SendMessage(hTool,TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);TBBUTTONtbb[3];TBADDBITMAPtbab;tbab.hInst =HINST_COMMCTRL;bab.nID =IDB_STD_SMALL_COLOR;
SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab);
ZeroMemory(tbb,sizeof(tbb));
tbb[0].iBitmap = SendMessage(hTool,TB_LOADIMAGES, (WPARAM)IDB_STD_LARGE_COLOR, (LPARAM)HINST_COMMCTRL) ;
tbb[0].fsState =TBSTATE_ENABLED;
tbb[0].fsStyle =TBSTYLE_BUTTON;
tbb[0].idCommand =ID_FILE_NEW;
tbb[1].iBitmap =STD_FILEOPEN;
tbb[1].fsState =TBSTATE_ENABLED;
tbb[1].fsStyle =TBSTYLE_BUTTON;
tbb[1].idCommand =ID_FILE_OPEN;
tbb[2].iBitmap =STD_FILESAVE;
tbb[2].fsState =TBSTATE_ENABLED;
tbb[2].fsStyle =TBSTYLE_BUTTON;
tbb[2].idCommand =ID_FILE_SAVEAS;
SendMessage(hTool,TB_ADDBUTTONS,sizeof(tbb)/sizeof(TBBUTTON),
(LPARAM)&tbb);
ps:创建具有自己指定图片按钮和提示框的工具栏
下面是我写的一个工具栏类(包含两个文件)
//DIToolBarWnd.h
#pragma once
#include "stdafx.h"
#include "DirectedImageMainWndFram.h"
//工具栏相关
#include "Commctrl.h"
#pragma comment(lib,"comctl32.lib")
/////////////////////////////////////////////////////
/*
类名:DICToolBarWnd
*/
//宏定义,define button id on toolbar
#define DIT_ID1 WM_USER+1
#define DIT_ID2 WM_USER+2
#define DIT_ID3 WM_USER+3
#define DIT_ID4 WM_USER+4
#define DIT_ID5 WM_USER+5
#define DIT_ID6 WM_USER+6
#define DIT_ID7 WM_USER+7
#define DIT_ID8 WM_USER+8
#define DIT_ID9 WM_USER+9
#define DIT_ID10 WM_USER+10
//宏定义:define toolbar id
#define DIT_TOOLBAR_ID WM_USER+11
//定义全局变量:toolbar caption
class DICToolBarWnd:public CDIMainWnd
{
public:
void Init();
HWND MCreateDIToolBar(HWND hwnd);
private:
HWND hTool;
};
//DIToolBarWnd.cpp
#include "stdafx.h"
#include "DIToolBarWnd.h"
#include "Resource.h"
int g_nCaption=0;
TBBUTTON ptoolbar[]=
{
{0, //指定图标编号,用于按钮的以0开始的按钮图片索引
DIT_ID1, //工具条按钮的ID,按钮的CommandID
TBSTATE_ENABLED, //可用状态,按钮的状态标志
BTNS_BUTTON| BTNS_DROPDOWN, //指定创建一个可以下按的按钮,按钮的风格标志
1, //保留,由应用程序定义该参数意义
g_nCaption}, //按钮字串索引
{1,DIT_ID2,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
{2,DIT_ID3,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
//{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
{3,DIT_ID4,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
////创建一个分割按钮用的竖线
//{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
{4,DIT_ID5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
{5,DIT_ID6,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
{6,DIT_ID7,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
//{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
{7,DIT_ID8,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
////创建一个分割按钮用的竖线
//{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
{8,DIT_ID9,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,g_nCaption},
{9,DIT_ID10,TBSTATE_ENABLED,BTNS_BUTTON| BTNS_DROPDOWN,2,g_nCaption}
};
/////////////////////////////////////////
void DICToolBarWnd::Init()
{
}
//////////////////////////////////////////
HWND DICToolBarWnd::MCreateDIToolBar(HWND hwnd)
{
HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
hTool=CreateWindowEx(
0 ,
TOOLBARCLASSNAME,
0,
WS_CHILD|WS_VISIBLE|TBSTYLE_TOOLTIPS |CCS_ADJUSTABLE|WS_BORDER,
0,0,0,0,
hwnd,
0,
hInst,
0
);
/*UpdateWindow(hTool);
ShowWindow(hTool,SW_SHOW);*/
SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
if(hTool)
{
TBADDBITMAP tab; //TBADDBITMAP结构包含了向工具栏添加的位图的信息,Win32下的位图结构
tab.hInst=NULL;
HBITMAP hbmp =LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2));
tab.nID=(ULONG)hbmp; //位图资源的ID
SendMessage(hTool,TB_ADDBITMAP,(WPARAM)10,(LPARAM)&tab);
SIZE_T ilen;
TCHAR buff[30];
int index=0;
lstrcpyW(buff,_T("文件"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("放大"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("缩小"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("移动"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("处理"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("颜色"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("调节"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("放弃"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("库"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
lstrcpyW(buff,_T("关于"));
ilen = _tcslen(buff);
buff[ilen]=L'\0';
g_nCaption = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);
ptoolbar[index++].iString = g_nCaption;
SendMessage(hTool, TB_SETEXTENDEDSTYLE, 1, TBSTYLE_EX_DRAWDDARROWS); // 显示下拉按钮风格
SendMessage(hTool, TB_SETEXTENDEDSTYLE, 2, TBSTYLE_EX_DRAWDDARROWS); // 显示下拉按钮风格
SendMessage(hTool,TB_ADDBUTTONS,(WPARAM)10,(LPARAM)&ptoolbar);
SendMessage(hTool,TB_SETBUTTONWIDTH,0,(LPARAM) MAKELONG (30,30));
SendMessage(hTool,TB_SETBUTTONSIZE,0,(LPARAM)MAKELPARAM(30,30));
SendMessage(hTool,TB_SETBITMAPSIZE,0,(LPARAM)MAKELONG(30,30));
SendMessage(hTool, TB_AUTOSIZE, 0, 0);
return hTool;
}
return NULL;
}