{S0}目录表
0; 简介
近日,一个客户要求为他的WTL项目中的Outlook 2003风格的导航栏。没有找到一个适合在WTL控制在CodeProject上,我决定创建一个。我希望你觉得这是为自己的项目非常有用的控制,信贷适当的归属,将不胜感激。
的Outlook 2003的导航栏是相当于一个选项卡式窗口系统变化一次的意见。它可以容纳任意数量的"标签",虽然它的工作原理最好的一个比较平庸的数额。
这个项目要求:WTL的7.5或更高版本。atlgdix.h从。
GDI从Microsoft。该功能
Outlook风格的视图之间切换 - 展望妥善处理工具提示,窗口大小调整,粘分离器,等我试图实现这些功能的细节的巨大数量,以及他们在一些情况下,改善。
雪佛龙菜单 - Outlook的版本一样,有一个人字形菜单命令栏上(它是,但是,没有主题... ...这可能是在未来的版本中添加)。它不适合命令栏上,或作为一个大按钮的按钮被放置在下方的导航窗格选项。
导航窗格选项 - 导航窗格选项对话框允许您交换和灭活按钮从您的看法,以定制你的布局,你最喜欢什么。导航窗格选项已全面投入使用(除热键系统的工作原理,就像所有其他的Windows列表框的同类... ...这不是一件好事),悬停和适当的选择。其列表视图自定义,并且可以在ChecklistView.h访问。
主题支持 - 这项计划已基本主题支持。这里不多说,除了它的变化的基础上的Windows主题,您可能会发现有用到您的程序申请额外养眼。这其中大部分是从罗杰Headrick的主题化代码同化。如何使用它必要的代码
这段代码是把你所有的状态栏,并更新了布局。首先,我们需要得到客户端RECT,设置的参数创建窗口之前,必须设置,然后创建window.RECT ClientRect;GetClientRect(AMP; ClientRect);/ /设置按钮的参数。您必须设置/ /这些之前创建navwindow。/ /如果你不,不要期望它的工作;)/ /按钮的高度是高度/ /大按钮和命令栏m_navwindow.SetButtonHeight(31);/ /小按钮的宽度是宽度/ /命令栏上的小按钮。m_navwindow.SetSmallButtonWidth(24);/ /砸在我们的控制。m_hWndClient = m_navwindow.Create(m_hWnd,ClientRect
; Lquot; Nav_Mainquot;,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
然后,我们设置按钮,开始大跌眼镜(这样你就不能掩盖重要的东西)从顶部的距离。这可以设置在程序的任何地方,它总是默认为0,如果没有设置(事实上,你可以编辑标签的按钮,使设置弹出什么看法显示不同的)。下面的for循环是定义的窗口和其HWNDs的卡式按钮/ /设置从客户端顶部的距离/ /矩形的按钮启动弹出窗口。/ /如果没有设置或设置为0,按钮会弹出回/ /窗口顶部的按钮时过去推。m_navwindow.SetPopBack(150);/ /对于榜样的缘故,所有的按钮只有一个采样窗口。/ /如果你想为每个按钮的不同窗口(你可能),/ /你会希望有一个不同的线路,为您的主机中的每个窗口和类。/ /由于这些例如,下面的两行/ /循环被删除,换成任何你想要的。button_view.resize(9);button_view_top.resize(9);(为size_t view_increment = 0; view_increment LT; &
#160;button_view.size(); view_increment){ button_view [view_increment]。创建(m_navwindow,rcDefault, &
#160; NULL,WS_CHILD | WS_VISIBLE |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN); button_view_top [view_increment]。创建(
m_navwindow.m_HorizontalSplitter,rcDefault,
160; NULL,WS_CHILD | WS_VISIBLE | &
#160; WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
; STD:wostringstream vertical_caption; vertical_caption LT,LT; Lquot;垂直quot; LT,LT; view_increment; button_view [view_increment] window_caption = vertical_caption.str(); button_view [view_increment] is_horizontal = FALSE; STD:wostringstream horizontal_caption;
horizontal_caption LT,LT; Lquot水平quot; LT,LT; view_increment; button_view_top [view_increment]。window_caption =
; horizontal_caption.str();
button_view_top [view_increment] is_horizontal = TRUE; button_view_top [view_increment]。pop_back_amount = m_navwindow.m_HorizontalSplitter.pop_back_y;}/ /不要删除任何过去这里... ...它包含/ /其余所需的参数;)
然后我们设置按钮的字体,然后,最重要的是,创建它们。第一个参数按钮的标题,的第二个图像的路径作为一个大按钮使用的第三图像路径作为命令栏上的按钮使用,以及过去两年,分别,是的,以HWNDs的什么会出现上对面竖线右侧什么会出现在整个单杠顶偏。
然后,我们设置了垂直分离器分离器的位置所选择的宽度,默认的按钮,我们希望看到什么... ...与AddButtonWithView命令栏显示其他五个顶部添加一个值为5的手段,我们将看到的第一个四个按钮。对于一个备用的例子,如果你SetDefaultButtons(4),你会看到持有其他6 / /设置按钮字体命令栏上的三个大按钮。m_navwindow.SetButtonFont(Lquot; Arialquot;,8,FontStyleBold);/ /添加我们所有的按钮,我们的按钮查看。/ /使用for循环,如果你有/ /必要的字符串数组。m_navwindow.AddButtonWithView(Lquot; Printquot;
160;Lquot; RolloutIcons \ \ Print_2.tifquot;
Lquot; RolloutIcons \ \ Print_2_Small.tifquot;
0; button_view [0],button_view_top [0]);m_navwindow.AddButtonWithView(Lquot; Addquot;
Lquot; RolloutIcons \ \ Add_2.tifquot;
160; Lquot; RolloutIcons \ \ Add_2_Small.tifquot; button_view [1],button_view_top [1]);m_navwindow.AddButtonWithView(Lquot; Editquot;
0; Lquot; RolloutIcons \ \ Edit_2.tifquot; Lquot; RolloutIcons \ \ Edit_2_Small.tifquot; button_view [2],button_view_top [2]);m_navwindow.AddButtonWithView(Lquot; Deletequot; Lquot; RolloutIcons \ \ Delete_2.tifquot; Lquot; RolloutIcons \ \ Delete_2_Small.tifquot;
; button_view [3],button_view_top [3]);m_navwindow.AddButtonWithView(Lquot; Searchquot; &
#160; Lquot; RolloutIcons \ \ Search_2.tifquot; &
#160; Lquot; RolloutIcons \ \ Search_2_Small.tifquot; button_view [4],button_view_top [4]);m_navwindow.AddButtonWithView(Lquot; Backquot;
60; Lquot; RolloutIcons \ \ Back_2.tifquot; Lquot; RolloutIcons \ \ Back_2_Small.tifquot; button_view [5],button_view_top [5]);m_navwindow.AddButtonWithView(Lquot; Forwardquot; Lquot; RolloutIcons \ \ Forward_2.tifquot; Lquot; RolloutIcons \ \ Forward_2_Small.tifquot;
; button_view [6],button_view_top [6]);m_navwindow.AddButtonWithView(Lquot; Savequot;
; Lquot; RolloutIcons \ \ Save_2.tifquot;
; Lquot; RolloutIcons \ \ Save_2_Small.tifquot;
; button_view [7],button_view_top [7]);m_navwindow.AddButtonWithView(Lquot; Exitquot;
; Lquot; RolloutIcons \ \ Exit_2.tifquot;
; Lquot; RolloutIcons \ \ Exit_2_Small.tifquot; button_view [8],button_view_top [8]);/ /设置,这是地方的垂直/ /分配器将位于你的窗口。m_navwindow.SetSplitterPos(242);/ /设置这是1比更高的按钮/ /你要初步显示。如果没有,在所有/ /把1。如果连命令栏,把0。m_navwindow.SetDefaultButtons(5);杂记如果你没有设置默认的按钮,它会默认为0。如果你不指定一个较大的图像路径,只会有按钮上的文本,它将与左侧的按钮视图对齐。如果你不指定一个较小的图像路径,按钮仍然会显示命令栏上的,但他们不会被人眼可见的,不移动鼠标。
ButtonView_Tabbed是作为一个垂直分割处理。图标将不会被涂上了吧,如果规模太小。指出,虽然有些是可选的,有些是绝对必要的程序有几件。位于ButtonView项目和所需物品过滤器/文件夹的绝对必要的代码。 ButtonView卡式版本有实际使用中,正好说明了如何使用我的代码(通过继承和一些必要的压倒一切的的),并增加新的功能,如果你想。但是,如果您选择使用不同的类,实施ButtonView模板,你必须提供水平和垂直分割的支持,否则的ButtonView是行不通的。如果你想的不作为标签的按钮列表,只是开放的意见,而不是功能,覆盖功能的onSelect。它需要一个整数参数,而0是最上面的一个,它是按钮的ID。然后,您可以检查和运行基于我的各种功能。文档
下面是函数的文档,你可以使用从ButtonView_Tabbed。还有其他的功能,但他们服务的内部功能。这些都是你会使用的。AddButtonWithView(STD::wstring的标题,性病:wstring的的ImagePath,性病:wstring的imagepath_small right_side的HWND的HWND top_side) - 底部的"清单"按钮添加一个按钮。标题是不言自明的,并到该按钮的工具提示进行时,在命令栏上的;的ImagePath和imagepath_small是不言自明的,和right_side和top_side的,将出现在右边和上面的按钮视图的窗口句柄。AddButton(STD::wstring的标题,性病:wstring的的ImagePath,性病:wstring的imagepath_small) - ButtonView的核心功能。 AddButtonWithView相同,但不添加意见。 AddButtonWithView呼吁这个问题,然后将在自己的线。SetButtonFont(STD::wstring的类型,Gdiplus:实际规模,诠释风格) - 设置按钮的风格(类型是字体,大小的字体大小,风格是大胆的添加按钮,如) 。SetDefaultButtons(int i)以 - 设置的数量(I - 1,命令栏被认为是在此设置下的按钮)按钮,你会看到窗口启动时。SetPopBack(INT pop_back_amount) - 设置在像素的距离从客户端窗口的顶部。默认为0,客户端窗口的顶部,如果没有设置。SetButtonHeight(int i)以 - 设置像素高度的大按钮和命令栏。SetSmallButtonWidth(int i)以 - 设置命令栏上的按钮的像素宽度。雪佛龙公司始终保持在24个像素宽。的onSelect(int i)以 - ButtonView的核心功能。一个按钮被选中时调用的函数。目的地,这是空白的,是要在每一个类,它使用ButtonView模板重写。如果您设置ButtonView的button_is_selected等于i的参数,您将收到选定的选项卡上的"打印"按钮效果。如果没有,然后按一下按钮,将只是想点击一个正常的按钮... ...它会闪烁,当你点击它,然后恢复正常释放后。Swap_Buttons(INT,INT十) - ButtonView的核心功能。它是已修改时的导航窗格的选项,在这里我是老的按钮和j是新的按钮,即所谓的功能。这是故意留下空白,默认情况下,作为必要的交换是事前。你应该重写此方法并添加必要的行交换的职能和意见和按钮的东西。 ButtonView_Tabbed覆盖和替换代码开关按钮。积分
我想他的颜色主题的代码,特里德纳姆他的管理单元分离器关闭屏幕绘图(无闪烁的按钮或我的样本EXE和它的样本窗口),罗杰Headrick感谢他atlgdix.h Viksoe ,最后,Firefox和供应的图标,我是能够改变和适应我的示例程序。我也想感谢的人,我忘了感谢名称。历史版本1.0 - 导航侧边栏公布!