我在工具条中加入32x32的真彩图标,怎么执行后颜色就失真了,掉了不少,有没办法让加载上的图标不失真,图标我是COPY到工具条上的

解决方案 »

  1.   

    CToolBar        m_TB;                  //工具条变量
    CImageList     m_TBIL;    //工具条image list VERIFY(m_TB.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) &&
    m_TB.LoadToolBar(IDR_MAINFRAME)); HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP, 0,0, // cx,cy
    LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
    CBitmap bmp;
    bmp.Attach(hbm); // Create image list and set in toolbar.
    // Must use ILC_COLOR8 for 256-color images!
    m_TBIL.Create(43, 34, ILC_COLOR32, 13, 15);
    m_TBIL.Add(&bmp, (CBitmap*)NULL);
    m_TB.GetToolBarCtrl().SetImageList(&m_TBIL);
      

  2.   

    关键是你的 CImageList, 创建时要指定如下 ILC_COLOR16,ILC_COLOR24, ILC_COLOR32 标志之一。 
      

  3.   

    void CMainFrame::CreateToolBar()
    {
    m_wndToolBar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

    //创建图形列表
    /* CImageList img; img.Create(IDB_BITMAP1, 32, 0, RGB(255, 0, 255));
    m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
    img.Detach(); img.Create(IDB_BITMAP1, 32, 0, RGB(255, 0, 255));
    m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
    img.Detach();
    */
    m_ilTB.Create(32, 32, TRUE | ILC_COLOR32, 4, 0);
    HICON hIcon = NULL; hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON2), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON4), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON5), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON6), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
    MAKEINTRESOURCE(IDI_ICON7), IMAGE_ICON, 32, 32, 0);
    m_ilTB.Add(hIcon);
    m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilTB); //设置工具条按钮宽度最小、最大值
    m_wndToolBar.GetToolBarCtrl().SetButtonWidth(60, 90);//设置每个按钮的高度和宽度
    m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
    m_wndToolBar.SetButtons(NULL, 7);//按钮个数  // 创建每个按钮
    CString str;
    str="启动服务";
    m_wndToolBar.SetButtonInfo(0, ID_SERVER_START, TBSTYLE_BUTTON, 0);
    m_wndToolBar.SetButtonText(0, str);
    m_wndToolBar.SetButtonInfo(1, ID_SERVER_CLOSE, TBSTYLE_BUTTON, 1);
    str="关闭服务";
    m_wndToolBar.SetButtonText(1, str); m_wndToolBar.SetButtonInfo(2, ID_ADD_GAME, TBSTYLE_BUTTON, 2); 
    str="游戏管理"; 
    m_wndToolBar.SetButtonText(2, str); m_wndToolBar.SetButtonInfo(3, ID_MANAGE, TBSTYLE_BUTTON, 3);
    str="网管管理";
    m_wndToolBar.SetButtonText(3, str); m_wndToolBar.SetButtonInfo(4, ID_REGISTER, TBSTYLE_BUTTON, 4);
    str="软件注册";
    m_wndToolBar.SetButtonText(4, str); m_wndToolBar.SetButtonInfo(5, ID_SYSTEM, TBSTYLE_BUTTON, 5);
    str="系统设置";
    m_wndToolBar.SetButtonText(5, str); m_wndToolBar.SetButtonInfo(6, ID_APP_EXIT, TBSTYLE_BUTTON, 6);
    str="退出系统";
    m_wndToolBar.SetButtonText(6, str); 
    CRect rectToolBar;
    //获取工具条按钮大小
    m_wndToolBar.GetItemRect(0, &rectToolBar);
    //设置工具条的按钮大小和图标大小
    m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(32,32)); 
    }
    然后在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
    }
    */