如何在工具栏上添加平面下拉控件

效果图如下:

使用过WordXP的人都知道,她的界面可谓是耳目一新。尤其是她的菜单和工具条可真是酷。网上也有很多很多的人都在模仿着她,包括很多的软件公司的产品。她的出现,使得软件界刮起了一陈XP界面时尚风。废话就不再多话了,言归正题,下面我就将实现的步骤一步步地告诉给你。

第一步:新建一个单文档项目

第二步:到资源编辑器中,新增一个工具项。里面没内容的,资源就命名为ID_TOOL_ZOOM吧。呵呵,新增一个工具项与我的下拉控件有什么关系呀?当然有关系,因为一会那个下拉控件就是在这个位置上显示出来的。

第三步:派生新类,从CToolBar派生,类名就叫CMainToolBar。怎样派生,我只提示你一下,菜单Insert->New Class…。在Class Type中选Generic Class,如果不选的话…你试试吧。

第四步:由于我们要有一个下拉框,所以呢得在CMainToolBar中声明一个CComboBox对象,声明如下:

public:
CComboBox m_wndZoom;

第五步:用新类代替旧类。替换之前,得将新类的声明文件包含进来,在MainFrm.h文件上,加上这句#include "MainToolBar.h"。然找到 CToolBar m_wndToolBar;用CMainToolBar 代替CToolBar。

第六步:在CMainFrm的OnCreate函数最后(当然是return 0之前了),添加下面的代码:

int index = 0;
RECT rect;
//找到指定的工具项
while(m_wndToolBar.GetItemID(index)!=ID_TOOL_ZOOM)
   index++;
//设置指定工具项的宽度并获取新的区域 80是宽度
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_SEPARATOR, 80);
m_wndToolBar.GetItemRect(index, &rect);
//设置位置
rect.top+=2;
rect.bottom += 200;
// 创建并显示控件
if(!m_wndToolBar.m_wndZoom.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL| CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect,
&m_wndToolBar, ID_TOOL_ZOOM))
{ 
 TRACE0("Failed to create combo-box\n");
    return FALSE;
}
m_wndToolBar.m_wndZoom.ShowWindow(SW_SHOW);
//填充内容
m_wndToolBar.m_wndZoom.AddString("25%");
m_wndToolBar.m_wndZoom.AddString("50%");
m_wndToolBar.m_wndZoom.AddString("75%");
m_wndToolBar.m_wndZoom.AddString("100%");
m_wndToolBar.m_wndZoom.AddString("125%");
m_wndToolBar.m_wndZoom.AddString("150%");
m_wndToolBar.m_wndZoom.AddString("175%");
m_wndToolBar.m_wndZoom.AddString("200%");
//选择默认项
m_wndToolBar.m_wndZoom.SetCurSel(3);

添加好了,运行一遍看看。呵,真的可以。不过,还存在着三个问题还需解决,一:工具条不够高。二:下列框不是平面控件。三:如何处理消息。下面我在一一解决:

问题一:工具条不够高

解决特别容易,进入资源管理器,打开工具。随便找个工具项,设置其Height属性为20。这样工具条就增高了。

问题二:下列框不是平面控件 这个也容易解决,用别人的类就行了。我在这用的是Kirk Stowell的CFlatComboBox。示例程序已经包含这个类进来了。用ProjectàAdd to ProjectàFile…将FlatComboBox.h和FlatComboBox.Cpp文件添加进工程中。然后到MainToolBar.h中将CFlatComboBox类包含进来,当然是用#include "FlatComboBox.h"。最后用CFlatComboBox类代替CComboBox 类。 重新编译,运行一遍看看,是不是平面了?

问题三:如何处理消息 是啊,到现在为至。这控件只能看,不能用,有什么意义呢。所以我们还得处理他的消息,让他有活可干。我们不能指望着ClassWizard能帮上我们什么忙,因为ClassWizard上看不到这个消息,所以一切都得靠我们自己。 在CMainFrm类上,我们要在protected里添加afx_msg void OnSelectZoomed();函数。然后转到MainFrm.cpp文件上,找到BEGIN_MESSAGE_MAP,增加一句ON_CBN_SELENDOK(ID_TOOL_ZOOM, OnSelectZoomed)。然后呢,当然就是要实现它的处理函数了,处理函数如下:

void CMainFrame::OnSelectZoomed()
{
//获取到内容并MSGBOX显示出来
  CString strContent;
  m_wndToolBar.m_wndZoom.GetWindowText(strContent);
  AfxMessageBox(strContent);  //弹出选择的内容
}

小功告成,然后又是编译、运行。看看界面,确实是平面的、有控控件的工具条。

作者注:很久没写作文了,这是我出社会后写的第一篇作文,写的不好请多多包涵!

我的Email是lijf971@21cn.com 有什么好东西希望能发个给我

时间: 2024-10-27 03:53:47

如何在工具栏上添加平面下拉控件的相关文章

toolbar上添加字体下拉框,下拉框中的每个条目都是用字体去显示的

问题描述 toolbar上添加字体下拉框,下拉框中的每个条目都是用字体去显示的 toolbar上添加字体下拉框,下拉框中的每个条目都是用字体去显示的,怎么实现?默认下拉框都是宋体,为什么改变不了?怎么改变下拉框的字体? 解决方案 可以用fontcombo这个控件,也可以自己对下拉条目进行重绘实现. 解决方案二:

Win 10开发输入搜索自动提示下拉控件(AutoSuggestBox)实例

AutoSuggestBox控件与TextBox控件相似,但,AutoSuggestBox控件可以提供一个下拉列表,用户可以从弹出的下拉列表中选择一个项,并把被选项的内容显示在输入框上.就类似于搜索引擎的输入页面. 在使用AutoSuggestBox控件时,要注意它有几个重要事件. a.当下拉列表中的项被选择后,会发生SuggestionChosen事件. b.当在QuerySubmitted的下拉列表中做出选择后,或者单击输入框右边的查找图标(如果有,需自行设置)会提交输入的文本,这时候会发生

构建支持 Ajax 的自动完成和级联式下拉控件

本文介绍如何构建可在业务线应用程序中使用的 Asynchronous JavaScript + XML (Ajax) 控件.这些基于 JSP TagLib 的可配置控件利用 JavaScript Serialized Object Notation (JSON).JavaScript 和 CSS.它们是标准的 JSP Taglib 控件,本文将展示可多么轻松地将其拖放到任意应用程序之中,从而提供更加直观.更具响应性的用户界面. Ajax 和 JSON 是支持新一代 Web 站点的两种关键技术.业

工具条组合combo控件,下拉控件中的显示字体可以自定义么?

问题描述 工具条组合combo控件,下拉控件中的显示字体可以自定义么? 工具条组合combo控件,下拉控件中的显示字体可以自定义么?怎么让字体设置为所显示的文字的字体呢? 解决方案 有一个叫做fontcombo的第三方控件直接就支持了.

winform下拉控件缓存

问题描述 一个winform的下拉控件(例如combox)的绑定数据源可能有十万级别的数据,怎么来做缓存好点?如果在这控件中输入数据然后再去数据库进行模糊匹配的话,可能速度不够快. 解决方案 解决方案二:你想要完成的是什么功能,常规做法是不会绑十万数组在下拉框里的,你让别人怎么选解决方案三:做成autocomplete的功能,到数据库去匹配.缓存就是类似分页读取的效果,解决不了什么问题,不可能让用户去一页一页读取10w条数据解决方案四:用DATAGRID绑定数据吧,然后做个分页,10W的数据要读

asp.net+jquery滚动滚动条加载数据的下拉控件_jquery

这样的需求貌似自己感觉不是很合理,因为数据多了如此下拉无论从人还是机器操作都比较痛苦. 没办法由于需求下来了,只能按需求操作.网上找了很多相关控件都感觉有点庞大,占资源比较多.没办法自己花半天时间弄出个半成品自定义控件,拿出来分享下,如有高手看了请多指点. 需求:AJAX滚动滚动条加载数据的下拉列表 控件名称:Webcombo 所用技术:ASP.NET(C#),jQuery,ASP.NET一般处理文件(.ashx) 下拉列表具体实现:用DIV模拟下拉列表,input和图片模拟下拉框.最终结果如下

Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

  本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力.   首先看一下效果图吧,       原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label用来分别显示进度和进度信息,而Dialog的宽度和高度正是闪屏图片的宽度和高度.然后将闪屏图片贴到Dialog中作为整个窗体的背景,Dialog显示时覆盖闪屏所处的区域.由于Dialog显示时闪屏并没有消失,且Dialog的X.Y及宽高都与闪屏图片一致,因此实际切换时,非常流畅,

js实现无需数据库的县级以上联动行政区域下拉控件_javascript技巧

代码共享url: http://code.google.com/p/region-select-js/ 数据已经更新到中国统计局网站中的2012年的那批数据(制作后未核对); 下拉使用div模拟实现.可以定制样式 支持ie6/ch/ff/op 按照设计,应该可以支持无限级数据树;但是数据并非随需加载,而是全部加载.如果数据达到街道级别,或是包含国外行政区域,会比较大

Html5下拉控件同时支持文本输入和下拉代码

有时候,下拉框不能满足我们的业务需求,还需要同时支持用户输入内容,默认的select标签是不支持用户输入的,下面我说一下原生的select如何支持用户输入,代码如下: <!DOCTYPE html> <html> <head> <title></title> </head> <body> <div style="position:relative;"> <span style=&quo