It's said in MSDN that:“ Microsoft Windows assumes that all of a toolbar's bitmapped images are the same size. ” So the question is : How can we implement a toolbar with different sized images, which is just like as Google Toolbar?
There are two ways:
1.To use double ImageLists
You should note that the image's size of the toolbar is decided by the first ImageList, even though the second one is different from the first one. So after registering double ImageLists, you also have to reset the button's size to suit the second imagelist.
This is the code segment:
a. setting double imagelist
//
1st ImageList, with normal images
m_hImage1st
=
ImageList_Create(
16
,
16
, ILC_COLOR24,
1
,
0
);
int
nIdx11
=
ImageList_Add(m_hImageFirst,
,NULL);
int
nIdx12
=
ImageList_Add(m_hImageFirst,
,NULL);
//
2nd ImageList, with bigger image
m_hImage2nd
=
ImageList_Create(
48
,
16
, ILC_COLOR24,
2
,
0
);
int
nIdx21
=
ImageList_Add(m_hImage2nd ,
,NULL);
//
add imagelists, the order is very important
::SendMessage(m_hWnd, CCM_SETVERSION, (WPARAM)
5
,
0
);
::SendMessage(m_hWnd, TB_SETIMAGELIST,
0
, (LPARAM)m_hImage1st);
::SendMessage(m_hWnd, TB_SETIMAGELIST,
1
, (LPARAM)m_hImage2nd);
//
set button image
pTBBtn[
0
].iBitmap
=
MAKELONG(nIdx21,
1
);
pTBBtn[
1
].iBitmap
=
MAKELONG(nIdx11,
0
);
pTBBtn[
2
].iBitmap
=
MAKELONG(nIdx12,
0
);
b. resize the button with bigger image
TBBUTTONINFO tbi;
tbi.cbSize
=
sizeof
(TBBUTTONINFO);
tbi.dwMask
=
TBIF_STYLE
|
TBIF_SIZE;
tbi.fsStyle
=
pTBBtn[
0
].fsStyle;
tbi.cx
=
48
;
::SendMessage(m_hWnd, TB_SETBUTTONINFO, nID, (LPARAM)
&
tbi);
And now, the first button of the toolbar has different sized image from others.
2. To use Rebar control
A rebar control may have many toolbars, so you can create two toolbars with different sized imagelist.(See MSDN.). But we can only create one toolbar in WTL by default, so it's a little complex to implement using WTL in this method. You can try this in MFC.
不同尺寸图标工具栏实现
本文介绍两种在Windows应用程序中实现带有不同尺寸图标的工具栏的方法:一是使用双图像列表并调整按钮大小;二是利用Rebar控件创建多个工具栏。这两种方法克服了Windows默认工具栏所有图标必须同尺寸的限制。
2693

被折叠的 条评论
为什么被折叠?



