跟着 微软提供的 创建工具栏 代码学,使用自己按钮
//非编程专业人士写的代码,边抄边写,下面的代码来之 微软,略微修改后,放在主程序创建主窗口后面即可使用,我把它作为一个函数放在一了 主窗口的 WM_CREATE消息里
//为个性化,解析下代码,方便以后使用
//应用程序句柄
HIMAGELIST g_hImageList = NULL;
HWND CreateSimpleToolbar(HWND hWndParent, HINSTANCE g_hInst)
{
// 初始化一些东西.
const int ImageListID = 0;
const int numButtons = 3;
const int bitmapSize = 16; // 工具栏图标的 大小 :这里拟打算 宽(cx) = 高(cy)
const DWORD buttonStyles = BTNS_AUTOSIZE;
// 只是创建了一个 灰色的横栏,还没有任何东西
//
HWND hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | TBSTYLE_WRAPABLE, 0, 0, 0, 0,
hWndParent, NULL, g_hInst, NULL);
if (hWndToolbar == NULL)
return NULL;
// 创建 按钮图像 列表. 这就像雕刻、蚀刻工艺, 先弄个蚀刻网 做好 分格框架,为后面加工前面的 灰色栏 做准备
g_hImageList = ImageList_Create(bitmapSize, bitmapSize, // Dimensions of individual bitmaps.
ILC_COLOR16 | ILC_MASK, // 使用 16 位 (32/64k 彩色) DIB 部分。使用掩码。 图像列表包含两个位图,其中一个是用作蒙板的单色位图。
// 如果未包含此值,则图像列表仅包含一个位图。
numButtons, 0);
// 根据 列表 对 灰色工具栏 分格
SendMessage(hWndToolbar, TB_SETIMAGELIST,
(WPARAM)ImageListID,
(LPARAM)g_hImageList);
//载入 按钮图片 到 列表
SendMessage(hWndToolbar, TB_LOADIMAGES,
(WPARAM)IDB_STD_SMALL_COLOR,
(LPARAM)HINST_COMMCTRL);
TBBUTTON tbButtons[numButtons] = {
{ MAKELONG(STD_FILENEW, ImageListID), IDM_NEW, TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)L"New" },
{ MAKELONG(STD_FILEOPEN, ImageListID), IDM_OPEN, TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)L"Open"},
{ MAKELONG(STD_FILESAVE, ImageListID), IDM_SAVE, TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)L"Save"} };
// 载入到 工具栏.
SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)numButtons, (LPARAM)&tbButtons);
// 调整 工具栏位置 并显示出来
SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0);
ShowWindow(hWndToolbar, TRUE);
return hWndToolbar;
}
实现后,就是这个样子的
最开始是这样的 | 只修改示例代码的字符串 | 添加位图16*16位图资源修改后 | |
|
====> 不New |
|
|
这个文字下面有个 New ,就是前面 构建按钮实体是设定的,我们改改 为 “不New”
这段的第一行改掉,如下:
在 建立 按钮列表前面增加自己的 图片作为按钮的代码:
实现后的情况,如上面那个表格第三列的样子,第一个图标的 样子 和 文字 描述已经不一样了,成了我们自己需要的样子。而且第 52 行 修改后就是自己的消息响应,不再是示例代码关联的菜单栏
需要增加更多,就依次类推就好了。1、加入一样大小的资源,2、载入按钮图标列表,3、重新设定 按钮数量;4、TBBUTION结构的对应 安放按钮的序号,修改之。
这里恰好是修改的第一个,后面的需要 按序 替换