本文主要是介绍Toolbar在Win SDK下用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Toolbar真的是要折磨死人,MSDN都翻遍了都调试不对。关键还是靠一个日本人写的Demo才搞好的[1]。
下面给出一个最简Toolbar,代码加入到WM_CREATE下面:
// Create the toolbar.HWND hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,hwnd, NULL, hInst, NULL);// Create the image list.HIMAGELIST g_hImageList = NULL;g_hImageList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);ImageList_AddMasked(g_hImageList, (HBITMAP)LoadImage(hInst, (TCHAR *)1, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR), 0);// Set the image list.SendMessage(hWndToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)g_hImageList);TBBUTTON tbButtons[] ={{ 0, 0, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 1, 1, TBSTATE_ENABLED, BTNS_BUTTON, },{ 2, 2, TBSTATE_ENABLED, BTNS_BUTTON, },{ 3, 3, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 4, 4, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, },{ 5, 5, TBSTATE_ENABLED, BTNS_BUTTON, },{ 0, 0, 0, BTNS_SEP, 0, -1, },{ 0, 0, 0, BTNS_SEP, },{ 6, 6, TBSTATE_ENABLED, BTNS_BUTTON, },};// Add buttons.SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons);// Resize the toolbar, and then show it.SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0);
在.rc中加入:
1 BITMAP "toolbar.bmp"
LoadImage的第二个参数可以是外来的.bmp,也可以是内置资源。如果是内置资源的话参数为“(TCHAR *)资源号”。
所以如果是VS自动生成的.rc和Resource.h的话,填入资源名称(例如IDR_TOOLBAR1)就好了。
我自己改的.rc文件,写成了类似
IDR_TOOLBAR1 BITMAP "toolbar.bmp"
形式,又在Resource.h里加入#define IDR_TOOLBAR1 101,结果死活找不到图片。对比了VS自动生成的.rc,发现VS的.rc前面有#include “Resource.h”,而我的没有。加上这句就好了。低级错误啊。
参考
1.http://www.cnblogs.com/ifaithu/articles/2455564.html
2.https://msdn.microsoft.com/en-us/library/windows/desktop/bb760435(v=vs.85).aspx
这篇关于Toolbar在Win SDK下用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!