【问题标题】:Toolbar - Depth Color for Icons工具栏 - 图标的深度颜色
【发布时间】:2012-12-24 20:01:12
【问题描述】:

我想制作一个大工具栏,支持比 Visual Studio 中的默认颜色深度更多的图标。我正在使用 Visual Studio 2005,工具栏位于 CDialog 上。

我使用了找到的代码:here 但没有用。

int CSalariesForm::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;

    HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
        MAKEINTRESOURCE(IDR_MAINFRAME1), IMAGE_BITMAP,
        0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);

    CBitmap bm;
    bm.Attach(hBitmap);


    CImageList m_imagelist;
    m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
    m_imagelist.Add(&bm, (CBitmap*) NULL);

    cToolBar.Create(this);
    cToolBar.GetToolBarCtrl().SetImageList(&m_imagelist);

    cToolBar.ShowWindow(SW_SHOW);
    cToolBar.SetBarStyle(CBRS_TOOLTIPS | CBRS_FLOATING | CBRS_ALIGN_TOP | CBRS_FLYBY);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    return 0;
}

当我调用对话框时,没有显示工具栏。代码是什么?

谢谢

【问题讨论】:

    标签: visual-c++ mfc visual-studio-2005 toolbar


    【解决方案1】:

    将图像列表分配给工具栏不会创建任何工具栏按钮。此外,您的图像列表应该是类成员,而不是局部变量。

    // header file
    private:
        CImageList m_imagelist;
        CToolBar   m_toolbar;
    
    // source file
    enum { width = 20, height = 20 }; // width and height of one button image
    
    m_toolbar.Create(this);
    
    // create the image list
    m_imagelist.Attach(
        ImageList_LoadImage(
            AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), width, 4, 
            CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_LOADTRANSPARENT )
    );
    
    // set button and image sizes (copied from CToolBar::LoadToolBar)
    m_toolbar.SetSizes(CSize(width+7,height+7), CSize(width,height));
    
    // set image list
    m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);
    
    // define command ids for each button
    const UINT cmdIds[] = { 
        IDOK,
        0,        // separator
        IDCANCEL,
    };
    
    // assign ids to the toolbar
    m_toolbar.SetButtons(cmdIds, sizeof(cmdIds)/sizeof(UINT));
    
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    

    IDB_BITMAP1 是一个 40x20 24 位彩色位图(两个 20x20 按钮)。如果您需要对按钮的创建进行更多控制,可以改用CToolBarCtrl::SetButtons()。有关加载图像列表的更多详细信息,请参阅ImageList_LoadImage

    【讨论】:

    • 谢谢,效果很好。一个小问题,当光标在工具栏的按钮上时,如何向工具栏添加工具提示?谢谢
    • 好的,我找到了,覆盖 OnNotify() ;)
    • @Blood-HaZaRd 或者您可以处理专门用于工具提示的TTN_NEEDTEXT。如果添加与命令 ID 匹配的字符串表条目,则只需 CString::LoadString 即可获取文本。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2019-03-11
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多