今天用MFC做了一个Document-View结构程序,想添加一个自己的24位位图按钮的工具栏,在CMainFrame::OnCreate()中编辑如下代码:        if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
}

HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_TOOLBAR), // 512*128像素,上面有4个按钮
IMAGE_BITMAP,
                                        0,
        0,
                                        LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
CBitmap bm;
bm.Attach(hbm);  m_ilToolBar.Create(128, 128, ILC_COLOR24, 4, 0);
m_ilToolBar.Add(&bm,(CBitmap*)NULL); m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);
其中红色部分是我写的。
运行结果十分失望,工具栏只显示出了一窄条,而且只有两个按钮,这是咋回事呀?
另外工具栏上按钮的ID怎么动态制定?
按钮之间的间隔怎么设?

解决方案 »

  1.   

    CToolBarCtrl::SetImageList
    CToolBarCtrl::AddBitmap
    CToolBarCtrl::AddButtonsAddButtons的时候TBBUTTON的idCommand就相当于按钮的ID。
    按钮间隔应该是不能设置的。要么就到codeprject上找自绘的toolbar
      

  2.   

    CImageList m_ImageList;
    m_ImageList.Create(MAKEINTRESOURCE(IDB_IMAGES), 16, 1, RGB(255,255,255));//把一副位图分割成多份资源IDB_IMAGES就是位图资源
    16表示位图资源中,每多少个像素宽度为单位分割出一幅图.最后的RGB颜色是指定在这个位图资源中,那种颜色是透明的.
    这个类的Create重载有很多形式,看MSDN吧;
    BOOL Create(
       int cx,
       int cy,
       UINT nFlags,
       int nInitial,
       int nGrow 
    );
    BOOL Create(
       UINT nBitmapID,
       int cx,
       int nGrow,
       COLORREF crMask 
    );
    BOOL Create(
       LPCTSTR lpszBitmapID,
       int cx,
       int nGrow,
       COLORREF crMask 
    );
    BOOL Create(
       CImageList& imagelist1,
       int nImage1,
       CImageList& imagelist2,
       int nImage2,
       int dx,
       int dy 
    );
    BOOL Create(
       CImageList* pImageList 
    );