菜单下方的工具栏,在许多的程序中都会使用。
这次的练习是快速用WIN32 SDK建立一个可以使用的工具栏,为了方便练习,先从标准的工具栏入手。
步骤如下:
1. 必须先包含头文件:
2. 声明全局变量 HWND hToolBar;
3. 使用CreateWindowEx创建工具栏的窗口(墙面)
4. 准备好要用的图(海报,这个图是很大的,需要裁减),这是个结构体TBADDBITMAP,指定要用的图以及用大图1还是小图0
5. 将图用SendMessage的TB_ADDBITMAP消息将图指定给工具栏;
6. 使用TTBUTTON创建按钮的数组,给每个按钮的属性赋值,包括ID,使用的图的编号,可用状态和风格等
7. 注意:如果使用CreateWindow创建的工具栏,需要指定TTBUTTON的大小,要用到TB_BUTTONSTRUCTSIZE消息
8. 将按钮(已经设定好的)指定给工具栏,OK,并可以发送消息尺寸自动AUTOSIZE
9. 处理WM_COMMAND消息
代码如下:
1.
#include <commctrl.h>2.
HWND hToolBar;3.
hToolBar = CreateWindow(TOOLBARCLASSNAME,NULL,WS_CHILD| WS_VISIBLE|WS_BORDER,0,0,0,0, hwnd ,(HMENU)100312,g_hInst,NULL);4.&5.
TBADDBITMAP tBitmap; tBitmap.hInst = HINST_COMMCTRL; //标准工具栏 tBitmap.nID = 0; //0是小图,1是大图 SendMessage(hToolBar, TB_ADDBITMAP, 0, (LPARAM)&tBitmap);6.
TBBUTTON tb[2]; tb[0].iBitmap = STD_FILENEW; //使用图编号6 tb[0].fsState = TBSTATE_ENABLED; tb[0].fsStyle = TBSTYLE_BUTTON; tb[0].idCommand = 10038; //指定ID tb[1].iBitmap = 1; //使用图编号1- copy tb[1].fsState = TBSTATE_ENABLED; tb[1].fsStyle = TBSTYLE_BUTTON;7.
SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON),0); //必须指定结构体大小8.
SendMessageA(hToolBar,TB_AUTOSIZE,0,0);
SendMessage(hToolBar, TB_ADDBUTTONS, (WPARAM)2, (LPARAM)&tb);9.
switch(LOWORD(wParam)) { case 10038: MessageBox(0,"HELEL",0,0); break; }
这样一个标准工具栏就形成了,至于工具栏的消息会比较特殊一些,如果有需要再去学习,一般的用途已经可以实现了~