对话框只有客户区,自绘的,界面如下
整个工具栏的创建等等如下代码
CImageList img; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP))
{
TRACE0("未能创建工具栏\n");
return -1;      // 未能创建
} // 设置工具栏按钮最小宽度(只关心宽度)
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(120, 160); img.Create(18, 18, ILC_COLOR32|ILC_MASK, 2, 2);
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_BAIDU));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_360));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SOGOU));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SOSO));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_GOOGLE)); m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach(); img.Create(16, 16, ILC_COLOR32|ILC_MASK, 2, 2);
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_BAIDU));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_360));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SOGOU));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SOSO));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON_GOOGLE)); m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach(); // 六个按钮为每个按钮设置消息和文字
m_wndToolBar.SetButtons(NULL, 5); m_wndToolBar.SetButtonInfo(0, 1236, TBSTYLE_BUTTON, 0);
m_wndToolBar.SetButtonText(0, _T("百度一下")); m_wndToolBar.SetButtonInfo(1, 1236, TBSTYLE_BUTTON, 1);
m_wndToolBar.SetButtonText(1, _T("奇虎搜索")); m_wndToolBar.SetButtonInfo(2, 1236, TBSTYLE_BUTTON, 2);
m_wndToolBar.SetButtonText(2, _T("狗狗搜索")); m_wndToolBar.SetButtonInfo(3, 1236, TBSTYLE_BUTTON, 3);
m_wndToolBar.SetButtonText(3, _T("腾讯搜搜")); m_wndToolBar.SetButtonInfo(4, 1236, TBSTYLE_BUTTON, 4);
m_wndToolBar.SetButtonText(4, _T("谷歌搜索")); //m_wndToolBar.SetButtonInfo(5, 1234, TBBS_SEPARATOR, 0); CRect rectToolBar;
m_wndToolBar.GetItemRect(0, &rectToolBar); // 关乎文字的位置
m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(85,1)); m_wndToolBar.MoveWindow(CRect(CPoint(50, 50), CSize(800, 100)));现在发现的不足是,工具栏出来的时候并没有按照我绘的背景画背景(这是肯定的),我想让统一点,给工具栏也设置下背景。百度一下,真心没有发现好文章我自己做过继承CToolbar类重载 OnEraseBkgnd(),像我画对话框一样,没有成功我也知道好像 CRebar 把CToolBar放进去,设置CRebar的背景,这样好像是可行了,但是不是太了解CRebar,加了之后好像 Rebar上面下面有两条黑线,各种不想要的效果,还不如就简单些,看CToolbar 自己行不?上面说的是个人测试,可能是错的,我怎样给我的CToolBar加上背景图片,简单点,只用一种颜色也行...在线等哦CToolBarCReBar对话框背景颜色

解决方案 »

  1.   


    谢谢了,你有什么方法没有,求指点一二我用了CReBar 效果是这样的,直接看图
    如果有那个朋友可以告诉,CRebar 的背景图片如何用小位图拉伸,还有两条灰线如何去掉,用CRebar也不错
    我CRebar是参考网上的代码,这样写的
    REBARBANDINFO rbbi;
    rbbi.cbSize = sizeof(rbbi);    
    rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
    rbbi.cxMinChild = rectToolBar.Width();
    rbbi.cyMinChild = rectToolBar.Height();
    rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_SKIN_BITMAP));
    rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 10;
    m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
      

  2.   

    用OnEraseBkgnd刷背景,然后在OnCustomdraw 的 case CDDS_ITEMPREPAIT 里*pResult = CDRF_SKIPDEFAULT就可以了,OnCustomdraw怎么用,可以自己查一下。OnEraseBkgnd是可以改变背景的,只不过是Toolbar的背景,不是Toolbar上面按钮的背景,由于上面的按钮都是最大化的,Toolbar的背景基本完全被挡住了,用了也看不到。所以要在OnCustomdraw里面把刷按钮底色屏蔽掉*pResult = CDRF_SKIPDEFAULT,这样按钮就只画Bitmap图,而没有默认底色了。当然前题还有你按钮的Bitmap本身不能有底色,有了还是一样挡住Toolbar的背景。
      

  3.   


    你好,谢谢你的回答,我刚才有点事追问晚了你说的道理我可以明白,你说的那个OnCustomdraw函数我也尝试着加了,但是进不了Case语句呀都,我本人水平不高,在我的CToolBarEx类(继承类)和对话框类都尝试了
    void CToolBarEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
    {
    LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR; switch(lplvcd->nmcd.dwDrawStage)
    {
    case CDDS_ITEMPREPAINT:
    *pResult = CDRF_SKIPDEFAULT;
    break; default:
    *pResult = CDRF_DODEFAULT;
    }
    }代码参照这个  http://bbs.csdn.net/topics/30365585   2楼的回复
      

  4.   

    UP UP UP 今天一直困到这个问题了
      

  5.   

    这么复杂 ? if (!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS) ||
    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
    AfxMessageBox("Failed to create toolbar\n");
    return -1; // fail to create
    }
    // change tb back color
    HBRUSH newBr=CreateSolidBrush(RGB(212,122,212));
    SetClassLong(m_wndToolBar.m_hWnd,GCL_HBRBACKGROUND,(long)newBr);

    要是 背景图 ,
    CreatePatternBrush
      

  6.   

    Up 一个,ToolBar 也是一个窗口
      

  7.   


    我试了,好像不起作用,还是像上次一样我的代码已经写的比较多了,导致没有生效
    你建的工程是不是真的改变了背景色呀?要求是对话框,用CToolbar,最好也加载ICon按钮如果是这样的话,示例工程还是像以前一样直接发我参考一下吧,我对比下看看我那里出问题了,谢谢,[email protected]一旦解决问题直接结帖呀!
      

  8.   

    vc6 xp sp2
    建的工程是对话框 真的改变了背景色。
      

  9.   


    我没有收到邮件呀?你发你的示例工程没有?问题是我弄不出来呀呵呵,我真心想在只有对话框的情况下改变背景色我现在为了要背景色,用了我二楼的方法,CRebar上面有灰线,下面让我用 webBrowser 控件遮盖住了,这不是长久之计呀真心求方法...
      

  10.   


    我的问题怎么大家都不帮助一下呢?难道新人在论坛就这么不受关注?我出的分也不低呀?大哥你下班了没有呀,这个问题我一直没有解决呢,[email protected]
      

  11.   

    那个 exe 执行不了 ? 那 就 重编译看看。
      

  12.   

    问题自己下狠心解决了,上面的朋友可能对我有帮助遗憾的是不是直接帮助,我发了一篇文章记录了解决办法,碰到我这样问题的可以移步去看下:http://blog.csdn.net/panshiqu/article/details/10499805