在vc里,一个工具条会对应一个bmp资源,保存着一串图标,这是由vc生成的。
像是CImageList这样的类也要一个图表列表的资源,这样的图片列表要怎样生成呢?
是自己在其他的图片编辑工具里面做,还是vc可以自己编辑呢?

解决方案 »

  1.   

    你可以使用CImageList的Add成员函数将bmp图片或者ico加到CImageList对象中,加的顺序就是图象列表的顺序,例如你第一个加的bmp图片的名称是a.bmp那么他在图象列表中的索引就是0!以此类推!
      

  2.   

    楼住是不想要一个真彩色的工具栏?我给你一个封装类,是一个外国人写的。
    /***=========================================================================
    ====                                                                     ====
    ====                          D C U t i l i t y                          ====
    ====                                                                     ====
    =============================================================================
    ====                                                                     ====
    ====    File name           :  TrueColorToolBar.h                        ====
    ====    Project name        :  Tester                                    ====
    ====    Project number      :  ---                                       ====
    ====    Creation date       :  13/1/2003                                 ====
    ====    Author(s)           :  Dany Cantin                               ====
    ====                                                                     ====
    ====                  Copyright ?DCUtility  2003                        ====
    ====                                                                     ====
    =============================================================================
    ===========================================================================*/
    #ifndef TRUECOLORTOOLBAR_H_
    #define TRUECOLORTOOLBAR_H_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include <afxtempl.h>/////////////////////////////////////////////////////////////////////////////
    // CTrueColorToolBarclass CTrueColorToolBar : public CToolBar
    {
    // Construction
    public:
    CTrueColorToolBar();// Attributes
    private:
    BOOL m_bDropDown; struct stDropDownInfo {
    public:
    UINT  uButtonID;
    UINT  uMenuID;
    CWnd* pParent;
    };

    CArray <stDropDownInfo, stDropDownInfo&> m_lstDropDownButton;

    // Operations
    public:
    BOOL LoadTrueColorToolBar(int  nBtnWidth,
      UINT uToolBar,
      UINT uToolBarHot = 0,
      UINT uToolBarDisabled = 0); void AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID);private:
    BOOL SetTrueColorToolBar(UINT uToolBarType,
                         UINT uToolBar,
         int  nBtnWidth);// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CTrueColorToolBar)
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual ~CTrueColorToolBar(); // Generated message map functions
    protected:
    //{{AFX_MSG(CTrueColorToolBar)
    afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    };///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // TRUECOLORTOOLBAR_H_
      

  3.   

    /***=========================================================================
    ====                                                                     ====
    ====                          D C U t i l i t y                          ====
    ====                                                                     ====
    =============================================================================
    ====                                                                     ====
    ====    File name           :  TrueColorToolBar.cpp                      ====
    ====    Project name        :  Tester                                    ====
    ====    Project number      :  ---                                       ====
    ====    Creation date       :  13/1/2003                                 ====
    ====    Author(s)           :  Dany Cantin                               ====
    ====                                                                     ====
    ====                  Copyright ?DCUtility  2003                        ====
    ====                                                                     ====
    =============================================================================
    ===========================================================================*/#include "stdafx.h"
    #include "TrueColorToolBar.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CTrueColorToolBarCTrueColorToolBar::CTrueColorToolBar()
    {
    m_bDropDown = FALSE;
    }CTrueColorToolBar::~CTrueColorToolBar()
    {
    }
    BEGIN_MESSAGE_MAP(CTrueColorToolBar, CToolBar)
    //{{AFX_MSG_MAP(CTrueColorToolBar)
    ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CTrueColorToolBar message handlers
    BOOL CTrueColorToolBar::LoadTrueColorToolBar(int  nBtnWidth,
     UINT uToolBar,
     UINT uToolBarHot,
     UINT uToolBarDisabled)
    {
    if (!SetTrueColorToolBar(TB_SETIMAGELIST, uToolBar, nBtnWidth))
    return FALSE;

    if (uToolBarHot) {
    if (!SetTrueColorToolBar(TB_SETHOTIMAGELIST, uToolBarHot, nBtnWidth))
    return FALSE;
    } if (uToolBarDisabled) {
    if (!SetTrueColorToolBar(TB_SETDISABLEDIMAGELIST, uToolBarDisabled, nBtnWidth))
    return FALSE;
    } return TRUE;
    }
    BOOL CTrueColorToolBar::SetTrueColorToolBar(UINT uToolBarType, 
                  UINT uToolBar,
        int  nBtnWidth)
    {
    CImageList cImageList;
    CBitmap cBitmap;
    BITMAP bmBitmap;

    if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uToolBar),
      IMAGE_BITMAP, 0, 0,
      LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
        !cBitmap.GetBitmap(&bmBitmap))
    return FALSE; CSize cSize(bmBitmap.bmWidth, bmBitmap.bmHeight); 
    int nNbBtn = cSize.cx/nBtnWidth;
    RGBTRIPLE* rgb = (RGBTRIPLE*)(bmBitmap.bmBits);
    COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);

    if (!cImageList.Create(nBtnWidth, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 0))
    return FALSE;

    if (cImageList.Add(&cBitmap, rgbMask) == -1)
    return FALSE; SendMessage(uToolBarType, 0, (LPARAM)cImageList.m_hImageList);
    cImageList.Detach(); 
    cBitmap.Detach();

    return TRUE;
    }void CTrueColorToolBar::AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID)
    {
    if (!m_bDropDown) {
    GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);
    m_bDropDown = TRUE;
    } SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN); stDropDownInfo DropDownInfo;
    DropDownInfo.pParent = pParent;
    DropDownInfo.uButtonID = uButtonID;
    DropDownInfo.uMenuID = uMenuID;
    m_lstDropDownButton.Add(DropDownInfo);
    }void CTrueColorToolBar::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
    {
    for (int i = 0; i < m_lstDropDownButton.GetSize(); i++) {

    stDropDownInfo DropDownInfo = m_lstDropDownButton.GetAt(i); if (DropDownInfo.uButtonID == UINT(pnmtb->iItem)) { CMenu menu;
    menu.LoadMenu(DropDownInfo.uMenuID);
    CMenu* pPopup = menu.GetSubMenu(0);

    CRect rc;
    SendMessage(TB_GETRECT, (WPARAM)pnmtb->iItem, (LPARAM)&rc);
    ClientToScreen(&rc);

    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
                       rc.left, rc.bottom, DropDownInfo.pParent, &rc);
    break;
    }
    }
    }