做过toolbar(工具栏)请进

jinlsg 2009-04-20 10:14:11
各位大哥:
最近自己想做一个比较完美的工具栏,就想IE浏览器和foxmail的工具栏似的,能设置大图标,小图标两种模式,还能设置文字在工具栏的右边和下边,还能设置某个按纽可以带下拉箭头等。在网上找了不少资料,但没有完美的实现我要的功能。主要是在调整各种模式的时候,比如:当从文字在右边显示调整到下边显示的时候,就出现了按纽显示不全的问题。等等,总之问题不少。在网上找了很多资料都没有解决,好象是主要重写CToolBar的CalcDynamicLayout、CalcFixedLayout、CalcLayout、SizeToolBar、CalcSize、WrapToolBar等函数。各位有做过这方面工作的,请给点意见呀,最后有源码,分可以加!
...全文
235 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinlsg 2009-06-11
  • 打赏
  • 举报
回复
把文字加在右边比较简单,只要设置TBSTYLE_LIST属性就可以了.
DavidHsing 2009-05-08
  • 打赏
  • 举报
回复
俺觉得 BCG 的挺好
yunxiang_myx 2009-05-07
  • 打赏
  • 举报
回复
LZ 有没有研究过如何在工具栏的图标右侧加文本标签?
有研究的话,能不能分享下,这几天,我也在研究这个,
但是只会把文本加到下面,
右侧不会。
snowwood 2009-04-24
  • 打赏
  • 举报
回复
还是不要用CToolBar了,建议用CDialogBar
使用CDialogBar就像用CDialog一样方便
路人乙2019 2009-04-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/sunny3106/archive/2007/08/19/1750591.aspx
http://www.codeproject.com/KB/toolbars/sizablerebar.aspx
zhuweiping2003 2009-04-23
  • 打赏
  • 举报
回复
所谓 灵感~
wonaixiaogang 2009-04-23
  • 打赏
  • 举报
回复
感觉,美化的办法是自己在工具栏上直接自己画图。
就是重写OnPaint()函数,只不过一些细节问题需要照顾到。
类似于这样:

void CPaintToolBar::OnPaint()
{
CToolBar::OnPaint();
this->Invalidate(FALSE);
CPaintDC dc(this);
}

在OnPaint()中,先调用基类OnPaint();
再无效整个区域。
再在自己的类中得到DC,然后再绘制。
原因:
CPaintDC 在构造函数里调用了BeginPaint,在析构函数里EndPaint。
其中 BeginPaint 得到客户区DC以及需要重绘的范围,并将全部区域有效化(不再重绘)。
并发送WM_ERASEBKGND消息。
EndPaint 释放DC ,通知系统客户区已经被重新绘制。不然系统会不断发送WM_PAINT消息。
因此,CPaintDC dc(this);用在前面时,整个区域全部有效,
此时再调用基类的OnPaint(),并不会绘制任何图像。
wonaixiaogang 2009-04-23
  • 打赏
  • 举报
回复
我发现,老天爷在欺负我,我不发帖送分问别人时,百度上搜100遍也搜不到。
一发贴,嘿,不是在百度搜到了答案,就是问题自己研究出来了。

自问自答:

添加工具栏上的分隔线
注意:工具栏一定要具有TBSTYLE_FLAT风格(使用CreatEx),分割线才会显示,不然只会增加间隔而没有线。
1.创建时添加
CToolBar::SetButtons(),其中lpIDArray参数指定的ID列表数组,只要将分隔栏ID设为ID_SEPARATOR,即可
2.动态设置,使用CToolbar::SetButtonstyle或者 CToolbar::SetButtonInfo把按钮风格设置为TBBS_SEPARATOR
即可。不过原来的按钮改变了
3动态添加
使用 CToolbar::GetToolbarCtrl().InsertButton(nIndex, lpButton ) lpButton 指向的结构TBBUTTON的fsStyle
设置为TBSTYLE_SEP。


楼主你的问题的话,看看这里吧:
http://www.rss88.com/c/163181.html
一个比较牛叉的内容
wenjie0728 2009-04-22
  • 打赏
  • 举报
回复
这方面没做过 正在学习
wonaixiaogang 2009-04-22
  • 打赏
  • 举报
回复
TBSTYLE_SEP
Creates a separator, providing a small gap between button groups. A button that has this style does not receive user input

MSDN上说的这个根本没有用。增加了一个小小的间隔,但是没有那条线啊。真的要自己画么?
wonaixiaogang 2009-04-22
  • 打赏
  • 举报
回复
光你这个工具栏,一个人就要做个20来天。
现在我练工具栏上的分隔线都搞不定,据说要手工画上去。靠。。。
zhuweiping2003 2009-04-21
  • 打赏
  • 举报
回复
学习
jinlsg 2009-04-21
  • 打赏
  • 举报
回复
上边的不一定能完全和完美解决我的问题呀?大家做过的多多参与!
liugang_12026168 2009-04-21
  • 打赏
  • 举报
回复
上边的例子很多了
TianChong 2009-04-21
  • 打赏
  • 举报
回复
上面都说得比较全面了,纯支持吧。
jinlsg 2009-04-21
  • 打赏
  • 举报
回复
自己顶一下,问题一解决发上给分
tian_yang_jian 2009-04-21
  • 打赏
  • 举报
回复
学习了,当顶你一下
irenehan 2009-04-21
  • 打赏
  • 举报
回复
	
for(i = 0; i < nTools; i ++)
{
Toolbars[i]=fgetc(fp);
btn[i+5].iBitmap = 5 + Toolbars[i];
btn[i+5].iString = 5 + Toolbars[i];
btn[i+5].idCommand = ID_Toolbar5 + Toolbars[i];
}
fclose(fp);

m_toolbarCtrl1->AddButtons(nTools, &btn[5]);
jinlsg 2009-04-21
  • 打赏
  • 举报
回复
谢谢大家参与!
xghuzd 2009-04-21
  • 打赏
  • 举报
回复
边顶边学。
加载更多回复(8)

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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