返回首页


概述
本文实现TabedReBar控制类似CReBar显示通过标签控制酒吧。 TabedReBar控制的主要建议是减少通过收集在一个TabedReBar酒吧的大型机窗口的空间。 TabedReBar添加每个栏(工具栏,状态栏,DialogBar等)是由制表符分隔。类CBHTabedReBar
CBHTabedReBar是从CControlBar派生,并包含以下的方法和数据成员:Methodsvoid DrawGripper(CDC * PDC); / /绘制左侧的控制griper BOOL AddBar(CControlBar * pBar,LPCTSTR pszText = NULL); / /添加酒吧TabedReBarCTabCtrlamp; GetTabCtrl()const的; / /访问的标签控制/ / {{AFX_MSG(CBHTabedReBar)AFX_MSG INT的OnCreate(LPCREATESTRUCT lpCreateStruct);AFX_MSG无效OnTabSelChange(NMHDR * pNMHDR,LRESULT * pResult);AFX_MSG无效OnWindowPosChanged(WINDOWPOS * lpwndpos);AFX_MSG无效OnLButtonDown(UINT nFlags,口岸系统点);AFX_MSG无效OnLButtonDblClk(UINT nFlags,口岸系统点);/ /}} AFX_MSG/ / {{AFX_VIRTUAL(CBHTabedReBar)虚拟无效OnUpdateCmdUI(CFrameWnd的pTarget,布尔bDisableIfNoHndler);虚拟BOOL创建(的CWnd * pParentWnd,  0; DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP & #160; UINT的NID = AFX_IDW_TABED_REBAR);虚拟CSIZE CalcFixedLayout(bStretch布尔,布尔bHorz);虚拟无效DoPaint(CDC * PDC); / /重写虚拟成员/ / {{AFX_VIRTUALMembersint m_nToobBarHeight; / /"选项卡的高度INT m_nActiveTab; / /当前激活的标签CRECT m_rectClient; / /正确的标签控制分栏列表LT TCB_ITEM *,TCB_ITEM * GT; m_Bars; / /派生的控件栏中的清单的CTabCtrl m_tabctrl; / /标签控制实施
CBHTabedReBar类支持对接(从现在开始,底部)和浮动功能。上定义相同的方式为您定义CReBar CBHTabedReBar类的对象。
为MainFrm.h,声明变量CBHTabedReBar:CBHTabedReBar m_wndTabedReBar;
在MainFrm.cpp,后在OnCreate消息成员的创建工具栏,DialogBar等,添加类似下面的代码:INT的CMainFrame::OnCreate中(LPCREATESTRUCT lpCreateStruct){//................/ /这里是标准的创建代码/ /创建代码CBHTabedReBar控制m_wndTabedReBar.Create(本);m_wndTabedReBar.SetWindowText("Tabed ReBarquot;);m_wndTabedReBar.SetBarStyle(m_wndToolBar.GetBarStyle()| &# 160; CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); / /添加酒吧TabedReBar控制m_wndTabedReBar.AddBar(安培; m_wndToolBar1,"标准Toolbarquot;);m_wndTabedReBar.AddBar(AMP; m_wndExplererToolBar,"探险家Toolbarquot ;);//选项卡控件添加图标m_images.Create(IDB_TABIMAGES,16,1,RGB(255,0,255)); m_wndTabedReBar.GetTabCtrl()SetImageList(AMP; m_images);}更新历史记录1.0.0.109年6月5。 2004年,第一个发行版本。

回答

评论会员:Elaaber 时间:2011/12/02

Thanx为很好的控制。它工作正常,为VC8。但在VC9(VS2008的)"TCN_SELCHANGE"通知消息无法处理。
是否有办法做到这一点。Thanx
他一直由该公司一名男子被称为
评论会员:kerfall 时间:2011/12/02
有同样的问题在VC10
。你必须改变IDC_TABED_REBAR BHTabedReBar.h
值 最初的0x75107和它的出界。
尝试在IDC的RESOURCE.H(1000和32771之间)在正常范围内的东西,它应该工作了。

更明智的是在resource.h IDC_TABED_REBAR避免两种资源使用相同的ID
评论会员:兰博林 时间:2011/12/02
!你帮了我这么多,我想用一个新的位图,但我不kown的需要的bitmap.Maybe你能告诉我!谢谢
评论会员:!pyrokar 时间:2011/12/02
良好的工作,感谢
你帮了我非常!
评论会员:BahrudinHrnjica 时间:2011/12/02
为评论的感谢
评论会员:WooTao 时间:2011/12/02
!非常感谢您
评论会员:Schniddel 时间:2011/12/02
您好

ICH发现了一个坏的错误。如果工具栏是浮动的,一些相关的文档/视图的按钮,这是desiabled。但如果工具栏是停靠,使再次

为什么呢?
有任何解决方案在那里?

THX
评论会员:BahrudinHrnjica 时间:2011/12/02
我看到错误,我会很快修复。问题是在消息路由。螺纹钢是浮动的,当消息避免钢筋的控制,而唯一的消息是在CWinApp类定义是启用。

thanx

评论会员:Schniddel 时间:2011/12/02
请让我知道,雅是如何固定的问题。这将是你真好!

感谢
托斯顿
评论会员:BahrudinHrnjica 时间:2011/12/02
你可以固定的问题,如果你定义CWinApp类的钢筋按钮的事件,那么你将得到启用工具栏按钮时,钢筋控制在浮动模式
例如:

在CWinApp类的声明(头文件)申报

AFX_MSG无效OnGoBack()
(ceresponding cpp文件)

BEGIN_MESSAGE_MAP(CTabedReBarExampleApp,CWinApp的)
/ / {{AFX_MSG_MAP(CTabedReBarExampleApp)
.................................{ BR}ON_COMMAND(ID_GO_BACK,OnGoBack)
END_MESSAGE_MAP()

/ /定义消息的成员
无效CTabedReBarExampleApp:OnGoBack()
{
/ / TODO:添加您的命令处理程序代码
}

关于
评论会员:Schniddel 时间:2011/12/02
我已经做到了像雅同样的方式。但不是在CWinApp。我把我的CView类。因为,我需要它。但是,这并不

关于
评论会员:Schniddel 时间:2011/12/02
多数民众赞成冷源,但我有一个问题。标签钢筋是作为我的主窗口。但我想,标签螺纹钢与X = 200 Y = 100

我该怎么办?

感谢您在先进
评论会员:BahrudinHrnjica 时间:2011/12/02
标签螺纹钢的大小与加载它的最大的图标的大小决心。如果加载的所有16x16像素的图标,选项卡式钢筋(16个选项卡的高度)像素的高度,宽度将作为主窗口相同。其原因是,工具栏和钢筋大型机窗口的客户窗口。 200像素的宽度无关,导致钢筋涵盖了所有在底部的空间,或MainWindow的这个高度之上。
如果你想,钢筋时,将有具体的大小浮动模式,邹家华,可以设置在CalcFixedLayout和CalcDynamicLayout成员。
的问候。
评论会员:armentage 时间:2011/12/02
这样的UI控件都是无用的和混乱。
Windows工具栏系统,其自定义和所有的,更优雅和强大的解决方案提供了比这个硬盘上的眼睛和房地产的形式给出。
早在90年代中期,许多基于Java的集成开发环境(从来没有什么比IDE中使用Java AWT书面),使用标签式工具栏。他们总是一片狼藉catastrophy。

评论会员:BahrudinHrnjica 时间:2011/12/02
感谢您的评论,
但你是compleatly错的。
看起来像的3D Studio Max,Maya中,vEdit2,德尔福等的最新应用都卡式的工具栏。


评论会员:armentage 时间:2011/12/02
有趣的是,您的应用程序名称是IDE的或在人,谁也不能应付变化(艺术家)
使用90年代中期设计的应用程序
是什么让你认为德尔福,MAYA,3DSMAX或vEdit2(一切)具有良好的思想UI的?

是否MSOFFICE(可以说是最好的设计和最深思熟虑的不断应用程序)选项卡式工具栏?关于网络浏览器如何?即使最疯狂的Mozilla主题创建这样的用户界面。你将很难找到在这可憎的UNIX用户界面工具箱的发生危险的世界。

Adobe还附带了一些熟练的用户界面,特别是在赛场上的图形设计。显示我在他们目前的应用程序的任何标签的工具栏。 Illustrator的? Photoshop的?杂技演员?你会发现在他们的工具窗口的标签上,而不是他们的工具栏

评论会员:J摩根 时间:2011/12/02
标签式工具栏我不能像MS Office或Adobe的大公司常见。但我必须同意它的用处。我知道很多用户喜欢他们的工具栏的功能,但不喜欢杂乱的10 - 15日在他们的屏幕,其中一次。一个标签式工具栏是一个很好的解决这个。旧的解决方案,飞奏。没有太大的不同概念。

J摩根
评论会员:BahrudinHrnjica 时间:2011/12/02
嘿,如果你不喜欢,不使用它... 它是免费的,没有人foced你读这篇文章。所以... ... sayin的uggly,它的足够多的的,你没有攻击作者的文章... ...只是说,如果你有一些教育方面的doit ...该死的!

评论会员:armentage 时间:2011/12/02
我同意你的!
评论会员:BahrudinHrnjica 时间:2011/12/02
我有一个很好的理由,公然反对不好控制,所以人们不使实际使用他们的应用程序的错误

如果人们不采取指出它控制不好,从一个角度的可用性点的时间,我们还是使用propperty张标签在标签和编码到每一个页面的确认按钮。我们还是会切割- N -粘贴使用Unix风格的鼠标按钮。我们仍然可以使用一个提示和一个确定按钮的对话框。

评论会员:埃德K 时间:2011/12/02
我很厌倦了你的评论。你所谈论的可用性,为什么不谈论我的代码。你有充分的理由,我有太多。所以,如果你有一些关于代码的注释,我会尽量回答。
评论会员:a_b_pathak 时间:2011/12/02
如果你需要使用它!
伟大的工作Bahrudin。

谢谢您!



〜"观看您的想法,他们成为你的话观看你的话,他们成为你的行动
。注意你的行动;他们成为你的习惯。注意你的习惯;他们成为你的性格
注意你的性格;它成为你的命运"
- 弗兰克奥特洛
评论会员:SpanKie 时间:2011/12/02
嘿,现在连微软Office 2007年开始使用一种新的工具栏系统(称为色带)使用制表符!
评论会员:游客 时间:2011/12/02
曲棍球|叶,新的色带是一个制表工具栏设计..天赋当然!然而却是一个标签式工具栏。