工具栏改变背景色

新建dialog对话框程序。在资源视图中添加一个toolbar(代码中为IDR_TOOLBAR_MAIN)),在资源视图中添加一个bmp(代码中为IDB_BITMAP_Toobar_background)图片作为背景.

在.h文件中添加:

private:
    CToolBar    m_toolBar;
    CReBar        m_reBar;

在.cpp文件的OnInitDialog中添加以下代码:

if (m_toolBar.CreateEx(this,TBSTYLE_FLAT | TBSTYLE_TRANSPARENT))
    {
        //m_toolBar.LoadBitmap(m_nIDBitmap);
        //m_toolBar.SetButtons(m_lpaIDToolBar, m_cIDToolBar);
        m_toolBar.LoadToolBar(IDR_TOOLBAR_MAIN);
    }
    m_toolBar.ModifyStyle(0,TBSTYLE_TRANSPARENT);//设置工具栏背景色透明
    m_toolBar.ShowWindow(SW_SHOW);
    m_reBar.Create(this);
    m_reBar.AddBar(&m_toolBar, RGB(255,0,0), RGB(0,255,0),_T(""), RBBS_GRIPPERALWAYS| RBBS_CHILDEDGE);
    m_reBar.RedrawWindow();

    REBARBANDINFO    info;
    CRect            rectToolBar;

    m_toolBar.GetItemRect(0, &rectToolBar);
    ZeroMemory(&info, sizeof(info));
    info.cbSize=sizeof(info);
    info.fMask=RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
    info.fStyle = RBBS_GRIPPERALWAYS;
    info.cxMinChild = rectToolBar.Width();
    info.cyMinChild = rectToolBar.Height();
    info.cx = info.cxIdeal = rectToolBar.Width() * 10;
    info.hwndChild=(HWND)m_toolBar;
    info.hbmBack = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_Toobar_background));//加载位图
    m_reBar.GetReBarCtrl().SetBandInfo(0,&info);

    CRect rcClientStart;
    CRect rcClientNow;

    GetClientRect(rcClientStart);
    //将重绘工具栏和状态栏后剩余的客户区空间放到rcClientNow中
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
        0, reposQuery, rcClientNow);

    // Now move all the controls so they are in the same relative
    // position within the remaining client area as they would be
    // with no control bars.
    CPoint ptOffset(rcClientNow.left - rcClientStart.left,
        rcClientNow.top - rcClientStart.top);

    CRect  rcChild;
    CWnd* pwndChild = GetWindow(GW_CHILD);
    while (pwndChild)
    {
        pwndChild->GetWindowRect(rcChild);
        ScreenToClient(rcChild);
        rcChild.OffsetRect(ptOffset);
        pwndChild->MoveWindow(rcChild, FALSE);
        pwndChild = pwndChild->GetNextWindow();
    }

    // Adjust the dialog window dimensions
    CRect rcWindow;
    GetWindowRect(rcWindow);
    rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
    rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
    MoveWindow(rcWindow, FALSE);

    // And position the control bars
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
 
 
运行程序即可.
原文地址:https://www.cnblogs.com/frkang/p/3088056.html