工具条位图文件的编辑中遇到的奇怪问题

qiek 2005-06-11 05:57:31
在原有位图文件(res\mytoolbar.bmp)的基础上编辑,这个位图文件是别人源程序中的。我想修改一下,去掉了几个命令。同时在VC中编辑ToolBar下的IDR_MAINFRAME,使它们一一对应,但一编译发现,程序toolbar中图标的背景色都变了,难看死了。这种问题不知是什么原因。(在工具条是真彩色32位位图的情况下,我经常发现有此类问题),难道是画图程序在编辑bmp时,丢失了某些原有位图文件中的信息?我又试了试PhotoShop同样有此问题,
...全文
87 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
artmouse 2005-06-15
我说的替代文件是进res目录直接替换掉
  • 打赏
  • 举报
回复
artmouse 2005-06-15
toolbar是难处理一些,但是也不是没有办法
我遇到的是和你一样的问题
我总结的方法
1,先在vc厘米建个toolbar
2,查看这个toolbar的文件,用你的新的文件替代这个文件
3,然后进rc文件,看看你就明白了,按你的要求改动一下,

IDR_TOOLBAR_LARGE BITMAP DISCARDABLE "res\\toolbar_large.bmp"

IDR_TOOLBAR_LARGE TOOLBAR DISCARDABLE 32, 32
BEGIN
BUTTON ID_SYSTEM_LOGIN
BUTTON ID_SYSTEM_LOGOUT
BUTTON ID_ROOMMANAGE_GUIDE
BUTTON ID_BUTTON32806
BUTTON ID_OPERATE_MANAGE
BUTTON ID_INTERESTRATE_MANAGER
BUTTON ID_DISCOUNT_MANAGE
BUTTON ID_PRINT
BUTTON ID_APP_ABOUT
END
  • 打赏
  • 举报
回复
qrlvls 2005-06-12
VC 本身的工具栏编辑器只支持 16 位,即便你 Paste 一张进去最后还是被转换成 16 色了
  • 打赏
  • 举报
回复
Hendy_So 2005-06-11
VC的资源编辑器只支持最高256色位图,要支持高于256的工具条,下面是转的一篇文章:

如何实现24位色工具条

作者/NorthTibet
大家知道IE的工具条都是多彩的,本文介绍如何在自己的应用程序里实现24位色工具条。

第一步:
在mainframe.h文件中声明成员变量:

CToolBar m_hotToolBar;
在 CMainFrame::OnCreate() 中创建工具条,假设你已经创建了一个ToolBar资源和两个工具条位图(Bitmap)资源:IDB_TOOLBAR_COLD 和 IDB_TOOLBAR_HOT,前者表示的是常态按钮,而后者表示的是鼠标移到上面时的状态按钮。用下面的代码创建工具条: if (!m_hotToolBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_hotToolBar.LoadToolBar(IDR_HOTBAR))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

第二步:

在CMainFrame::OnCreate()中还要添加如下代码,它们实现对位图资源的存取: // Set up hot bar image lists.
CImageList imageList;
CBitmap bitmap;

// Create and set the normal toolbar image list.
bitmap.LoadBitmap(IDB_TOOLBAR_COLD);
imageList.Create(21, 20, ILC_COLORDDB|ILC_MASK, 13, 1);
imageList.Add(&bitmap, RGB(255,0,255));
m_hotToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
imageList.Detach();
bitmap.Detach();

// Create and set the hot toolbar image list.
bitmap.LoadBitmap(IDB_TOOLBAR_HOT);
imageList.Create(21, 20, ILC_COLORDDB|ILC_MASK, 13, 1);
imageList.Add(&bitmap, RGB(255,0,255));
m_hotToolBar.SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
imageList.Detach();
bitmap.Detach();

第三步:

添加24位色工具条按钮的消息处理函数,这个工具条有五个按钮,如图一。那么在mainframe.h中加入消息处理函数声明: afx_msg void OnBack();
afx_msg void OnForward();
afx_msg void OnStop();
afx_msg void OnRefresh();
afx_msg void OnHome();
在mainframe.cpp中添加消息处理代码:
消息映射 ON_COMMAND(ID_BACK, OnBack)
ON_COMMAND(ID_FORWARD, OnForward)
ON_COMMAND(ID_STOP, OnStop)
ON_COMMAND(ID_REFRESH, OnRefresh)
ON_COMMAND(ID_HOME, OnHome)
消息映射函数代码,为简单起见,这些函数没有做任何事情。
void CMainFrame::OnBack() {}
void CMainFrame::OnForward() {}
void CMainFrame::OnStop() {}
void CMainFrame::OnRefresh() {}
void CMainFrame::OnHome() {}
编译程序并运行。
  • 打赏
  • 举报
回复
发帖
界面

1.5w+

社区成员

VC/MFC 界面
社区管理员
  • 界面
加入社区
帖子事件
创建了帖子
2005-06-11 05:57
社区公告
暂无公告