CMFCToolBar到底应该怎么用……

洗洗睡去 2010-08-11 07:20:41
折腾了一天 IDE的资源里始终导入不了画好的外部的BMP,仅仅是24位的图而已 不知道微软为什么这么2 搞什么只支持8位色的 .
然后一堆 LoadToolBar LoadBitMap 还设计到CImageList 之类的 疯了
想问下
1 是不是要准备2份位图 hot 和cold的各一
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?自己画的话 很好分配的
...全文
1183 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜗牛的信仰 2010-09-15
  • 打赏
  • 举报
回复
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a9962311-c09d-4397-b7e9-4f8a0b337f07
洗洗睡去 2010-08-13
  • 打赏
  • 举报
回复
哎 不管了 反正我准备用CMFCRibbonCategory这个类玩了 MS的视频里 也是用Iconworkshop替换原有BMP的
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
CSize(32,32),CSize(32,32)按照我的写,调试进去要大于 +7 +6,改成CSize(40,40),CSize(32,32)试试~
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
我是这样写的
if (!m_wndMyToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndMyToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("未能创建自定义工具栏\n");
return -1; // 未能创建
}
m_wndMyToolBar.CleanUpImages();
m_MyImages.SetImageSize(CSize(32,32),FALSE);
bool b;
b = m_MyImages.Load(_T(".\\IDB_TOOLBAR_HOT.bmp"));

m_wndMyToolBar.SetSizes(CSize(32,32),CSize(32,32));
m_wndMyToolBar.SetUserImages(&m_MyImages);

UINT IDArray[] ={ID_FILE_NEW, ID_FILE_OPEN};
m_wndMyToolBar.SetButtons(IDArray,2);


不过DEBUG的时候会断在
_AFXWIN_INLINE void CDC::FillRect(LPCRECT lpRect, CBrush* pBrush)
{ ASSERT(m_hDC != NULL); ::FillRect(m_hDC, lpRect, (HBRUSH)pBrush->GetSafeHandle()); }
这里
不知道什么原因?
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
tornado兄 你的是用CToolBar吧
我在试CMFCToolBar 有差别 在尝试
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
好 吃完饭试试 嘿嘿
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
我okle

MainFrame的OnCreate里

if (!toolBar.Create(this) ||
!toolBar.LoadToolBar(IDR_TOOLBAR1))
{

}

toolBar.SetSizes( CSize(40,40),CSize(32,32)); //设置大小
UINT IDArray[] ={ID_FILE_NEW, ID_FILE_NEW,ID_FILE_NEW}; //按钮ID,我直接用现成的
toolBar.SetButtons(IDArray, 3);     //三个按钮


bmp.LoadBitmap(IDB_BITMAP1);

toolBar.SetBitmap(bmp); //设置Toolbar图片

.h里加CToolBar toolBar; CBitmap bmp;就可以了,图片ID自己搞定吧
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
我是新加的工具条 所以要新建一个
奋斗小青年 2010-08-12
  • 打赏
  • 举报
回复
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
我也再做一遍试试~
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
不用新建吧,用默认的就可以,随便找个色彩绚丽的大图加载进去就成~
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
谢谢楼上
是不是这个意思
先用ide里的新建工具栏 随便画点图案 然后进资源里 更改名字 就是我要的位图了
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
最好一边问一边做,效果比较好~
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sunnyloves 的回复:]

一起载入的的话 怎么分配这3个位图的ID呢 响应事件需要ID的呀
[/Quote]

位图的id跟button的id是不同的,你查下CToolBar::SetButtons,原来也有人问,还做了个大图标的例子
hongya6088 2010-08-12
  • 打赏
  • 举报
回复
1、一般不用,除非你要做特别的效果
2、加载24色的位图,可以使用手动替换,打开.rc文件,找到资源类似
/////////////////////////////////////////////////////////////////////////////
//
// BMP
//

IDR_PNG_TOOLBAR BMP "res\\Toolbar.bmp"

将res\\Toolbar.bmp替换为24色的bmp文件,重新编译。然后使用CImageList加载它,可以指定图片的大小为32*32,CImageList会自定分割,可以根据图片的索引来使用。
3、记得是在工具栏上添加按钮时会有个参数是按钮的ID,记不太清楚了,lz可以试一下看看有没有参数ID。
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
一起载入的的话 怎么分配这3个位图的ID呢 响应事件需要ID的呀
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sunnyloves 的回复:]

楼上,
1 Hot和cold就是工具条在enable disable两种状态下的位图
2 256的可以导入 不过只能是16×16的
3 用SetImageList的话 是不是每次载入都要按32×32的载入 而不是一起32×96 的载入?
[/Quote]

1.disable的时候没用过,巨难看默认的
2.可以自己设置工具栏图标大小,SetSizes
3.可以一起载入,imagelist会按照你给的大小截断载入
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
楼上,
1 Hot和cold就是工具条在enable disable两种状态下的位图
2 256的可以导入 不过只能是16×16的
3 用SetImageList的话 是不是每次载入都要按32×32的载入 而不是一起32×96 的载入?
m_tornado 2010-08-12
  • 打赏
  • 举报
回复
1 是不是要准备2份位图 hot 和cold的各一
2 导入不了资源怎么办
3 自己画的位图 怎么区分toolbar上每个按钮的ID? 比如 3个按钮每个是32×32的位图 总共32×96 那怎么给每个按钮分配ID?

1.hot和cold??不明白
2.256色导入不了位图么?不能吧,实在不行用LoadImage从外部导入液可以的
3.自己画位图的话用SetImageList,传递参数是CImageList,mfc里有一个是SetButtonInfo可以很方便的设置图片
至于参数int iImage则是根据你CImageList载入图片的顺序了,如果是A,B,C载入,0对应A,1对应B,其它类似~
洗洗睡去 2010-08-12
  • 打赏
  • 举报
回复
其实sp1带的例子有详细的代码 我就是不知道 例子里资源下的toolbar 是自己画的 还是导入的? 肯定不可能自己画嘛
加载更多回复(13)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧