力为的博客
技术那些事。
posts - 89,comments - 434,trackbacks - 0

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(1616, ILC_COLOR24, 10);
    
int nIdx11 = ImageList_Add(m_hImageFirst,,NULL);
    
int nIdx12 =  ImageList_Add(m_hImageFirst,,NULL);

        
//2nd ImageList, with bigger image
    m_hImage2nd = ImageList_Create(4816, ILC_COLOR24, 20);
    
int nIdx21 =ImageList_Add(m_hImage2nd ,,NULL);

    
// add imagelists, the order is very important
    ::SendMessage(m_hWnd, CCM_SETVERSION, (WPARAM) 50);
    ::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.
posted on 2006-06-11 15:39 力为 阅读(1223) 评论(0)  编辑 收藏 引用 所属分类: COM&ATL&WTL


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: