win32强化练习4.6_自定义图标或图像的工具栏
2016-11-26 23:40
211 查看
上一节直接使用了内置的工具栏(按钮),这一节练习使用自己的图标或图像来制作工具栏。
示例如下:
话不多说,步骤如下:
1. 自己想办法制作一个bmp的图,例如:
2. 把图放到res文件夹下,在RC文件中定义:IDB_BIT_ICON BITMAP
"chessIcon.bmp"
3. 必须包含头文件 : #include <commctrl.h>
4. 由于会使用到:TB_ADDIMAGELIST,以及ImageList_Create()函数,需要连接库: Comctl32.lib / libcomctl32.a
5. 如果“TB_SETIMAGELIST”不能用,可以直接用其#define的值 WM_USER + 48
6. 使用CreateWindowEx创建HWND hToobar
hToolbar = CreateWindow(TOOLBARCLASSNAME,"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
0,0,0,0,hwnd, (HMENU)12011, g_hInst, NULL);
7. 声明全局变量:HIMAGELIST g_imagelist ;
8. 用ImageList_Create创建图像列表,将资源中的图放到列表中,并发送TB_SETIMAGELIST消息,将图像指定给工具栏(与标准工具栏TBADDBITMAP类似)
g_imagelist = ImageList_Create(48,48,ILC_COLOR24,4,0); //48*48 4个
int iBitmap = ImageList_Add(g_imagelist,LoadBitmapA(g_hInst, MAKEINTRESOURCEA(IDB_BIT_ICON)), NULL);
SendMessage(hToolbar,WM_USER + 48,(WPARAM)0, (LPARAM)g_imagelist);9. TTBUTTON,这个与上一节差不多,需要注意要使用MAKELONG这个函数,MAKELONG无法使用则#include <windef.h>
TBBUTTON tb[4];
tb[0].iBitmap = MAKELONG(iBitmap, 0); //标准工具栏是:STD_FILENEW;
tb[0].fsState = TBSTATE_ENABLED;
tb[0].fsStyle = TBSTYLE_BUTTON;
tb[0].iString = 0;//如果这句不写,图像下方可能有字符,或者用zeroMemory(tb, sizeof(tb));先清除
tb[0].idCommand = IDT_NEW;
tb[1].iBitmap = MAKELONG(iBitmap + 1, 0);
tb[1].fsState = TBSTATE_ENABLED;
tb[1].fsStyle = TBSTYLE_BUTTON;
tb[1].iString = 0;
tb[1].idCommand = IDT_OPEN;
10. 仍然需要设定结构体大小,然后将按钮指定给工具栏,并进行自动大小适应:
SendMessageA(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON),0);
SendMessageA(hToolbar, TB_ADDBUTTONS,(WPARAM)4,(LPARAM)&tb);
SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0);
ShowWindow(hToolbar,TRUE);以上就是使用位图创建工具栏按钮了;
再简单补充一下用图标创建,大部分的步骤是相同的,包括声明变量HIMAGELIST,但不是把位图loadBitmap,而是LoadIcon,而且有几个ICON要load几次,比较直观,但比较繁琐,见代码:
HIMAGELIST himgIcon ;
tb[0].iBitmap = id1;
tb[0].fsState = TBSTATE_ENABLED;
tb[0].fsStyle = TBSTYLE_BUTTON;
tb[0].idCommand = IDT_NEW;了解原理再加上适当练习后,要做一个简单的自定义的工具栏也不是什么难事了~
示例如下:
话不多说,步骤如下:
1. 自己想办法制作一个bmp的图,例如:
2. 把图放到res文件夹下,在RC文件中定义:IDB_BIT_ICON BITMAP
"chessIcon.bmp"
3. 必须包含头文件 : #include <commctrl.h>
4. 由于会使用到:TB_ADDIMAGELIST,以及ImageList_Create()函数,需要连接库: Comctl32.lib / libcomctl32.a
5. 如果“TB_SETIMAGELIST”不能用,可以直接用其#define的值 WM_USER + 48
6. 使用CreateWindowEx创建HWND hToobar
hToolbar = CreateWindow(TOOLBARCLASSNAME,"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
0,0,0,0,hwnd, (HMENU)12011, g_hInst, NULL);
7. 声明全局变量:HIMAGELIST g_imagelist ;
8. 用ImageList_Create创建图像列表,将资源中的图放到列表中,并发送TB_SETIMAGELIST消息,将图像指定给工具栏(与标准工具栏TBADDBITMAP类似)
g_imagelist = ImageList_Create(48,48,ILC_COLOR24,4,0); //48*48 4个
int iBitmap = ImageList_Add(g_imagelist,LoadBitmapA(g_hInst, MAKEINTRESOURCEA(IDB_BIT_ICON)), NULL);
SendMessage(hToolbar,WM_USER + 48,(WPARAM)0, (LPARAM)g_imagelist);9. TTBUTTON,这个与上一节差不多,需要注意要使用MAKELONG这个函数,MAKELONG无法使用则#include <windef.h>
TBBUTTON tb[4];
tb[0].iBitmap = MAKELONG(iBitmap, 0); //标准工具栏是:STD_FILENEW;
tb[0].fsState = TBSTATE_ENABLED;
tb[0].fsStyle = TBSTYLE_BUTTON;
tb[0].iString = 0;//如果这句不写,图像下方可能有字符,或者用zeroMemory(tb, sizeof(tb));先清除
tb[0].idCommand = IDT_NEW;
tb[1].iBitmap = MAKELONG(iBitmap + 1, 0);
tb[1].fsState = TBSTATE_ENABLED;
tb[1].fsStyle = TBSTYLE_BUTTON;
tb[1].iString = 0;
tb[1].idCommand = IDT_OPEN;
10. 仍然需要设定结构体大小,然后将按钮指定给工具栏,并进行自动大小适应:
SendMessageA(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON),0);
SendMessageA(hToolbar, TB_ADDBUTTONS,(WPARAM)4,(LPARAM)&tb);
SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0);
ShowWindow(hToolbar,TRUE);以上就是使用位图创建工具栏按钮了;
再简单补充一下用图标创建,大部分的步骤是相同的,包括声明变量HIMAGELIST,但不是把位图loadBitmap,而是LoadIcon,而且有几个ICON要load几次,比较直观,但比较繁琐,见代码:
HIMAGELIST himgIcon ;
himgIcon = ImageList_Create(30,30,ILC_COLOR8, 2, 0); int id1 = ImageList_AddIcon(himgIcon, LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1))); int id2 = ImageList_AddIcon(himgIcon, LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON2))); SendMessage(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himgIcon);另外一点,在TTBUTTON结构体中,不需要使用MAKELONG了,直接把ID放进去就可以了:
tb[0].iBitmap = id1;
tb[0].fsState = TBSTATE_ENABLED;
tb[0].fsStyle = TBSTYLE_BUTTON;
tb[0].idCommand = IDT_NEW;了解原理再加上适当练习后,要做一个简单的自定义的工具栏也不是什么难事了~
相关文章推荐
- win32强化练习4.5_标准工具栏的使用
- win32强化练习4.2_菜单勾选与图标变换
- UEditor工具栏上自定义按钮、图标、事件、窗口页面
- IOS自定义图标和图像
- win32强化练习3.1_键盘控制小球移动
- win32强化练习3.6_贪吃蛇半部
- win32强化练习3.5_弹球游戏(键盘+定时器)
- 创建自定义图标和图像
- win32强化练习2.4_双击播放MP3(列表框与通知码)
- win32强化练习2.3_四则计算器(组合框控件)
- win32强化练习4.0_资源相关练习简介
- MFC开发中工具栏自定义图标问题
- Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例
- Java基础知识强化之IO流笔记53:IO流练习之 自定义类模拟BufferedReader的readLine()功能案例
- win32强化练习2.5_滚动条初步
- 创建自定义图标和图像
- Java基础知识强化之集合框架笔记41:Set集合之HashSet存储自定义对象并遍历练习
- win32强化练习0.1_开发环境搭建
- win32强化练习3.3_定时器与弹球
- win32强化练习4.1_更改别人的菜单