热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WTL对话框增加工具条

其实很简单,就一句话。因为CreateSimpleToolBarCtrl是一个静态函数HWNDhWndToolBarCFrameWindowImplBase<CWi

其实很简单,就一句话。因为CreateSimpleToolBarCtrl是一个静态函数


HWND hWndToolBar = CFrameWindowImplBase::CreateSimpleToolBarCtrl(m_hWnd, IDR_TOOLBAR_GENERAL, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE_EX);


样式如下,工具条,可以带下拉菜单


具体步骤:


1.包含文件.h

#include "toolbarhelper.h"	//http://www.codeproject.com/Articles/16737/WTL-Toolbar-Helper
//由于要用到一些扩展特性,比如增加按钮文字,增加按钮下拉菜单等等

class CMyToolBarDlg : public CDialogImpl,
                     public CToolBarHelper	//加了toobarhelper.h
{
public:

	//其他省略.....

	HWND m_hMyToolBar;		//菜单条hWnd

	//下面三个是由于toolbarhelper需要用到,所以必须添加
	CCommandBarCtrl m_CmdBar;
	
	void OnToolBarCombo(HWND hWndCombo, UINT nID, int nSel, LPCTSTR lpszText, DWORD dwItemData);	//CToolBarHelper
	void PrepareToolBarMenu(UINT nMenuID, HMENU hMenu);	//CToolBarHelper
	//两个函数可以是空函数,但必须有

	BEGIN_MSG_MAP(CMyToolBarDlg)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		CHAIN_MSG_MAP(CToolBarHelper)	//链接到toolbarHelper,否则没下拉菜单
	END_MSG_MAP()

};


2.cpp文件,主要是OnInitDialog函数


LRESULT CMyToolBarDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	RECT rect;
	SIZE size;

	//直接调用atlframe.h的静态函数
	m_hMyToolBar = CFrameWindowImplBase::CreateSimpleToolBarCtrl(m_hWnd, IDR_TOOLBAR_GENERAL, TRUE, ATL_SIMPLE_TOOLBAR_PANE_STYLE_EX);

	//建立一个空的菜单
	m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);

	//绑定操作菜单条
	CToolBarCtrl tBar(m_hMyToolBar);

	//先定位,因为CreateSimpleToolBarCtrl把工具条放在一个100x100大小的地方。

	tBar.GetButtonSize(size);
	GetClientRect(&rect);
	rect.bottom=rect.top+size.cy;
	tBar.MoveWindow(&rect);

	//设置工具条的文字,和下拉菜单,具体参照toolbarhelper文章

	AddToolbarButtonText(m_hMyToolBar, ID_IMPORT_IMGS,_T("照片导入"));
	AddToolbarButtonText(m_hMyToolBar, ID_BTN_AUTOALIGN,_T("智能排版"));
	AddToolbarButtonText(m_hMyToolBar, ID_VIEW_PREV,_T("前翻"));
	AddToolbarButtonText(m_hMyToolBar, ID_VIEW_NEXT,_T("后翻"));
	AddToolbarButtonText(m_hMyToolBar, ID_VIEW_FULLSCREEN,_T("全屏"));
	AddToolbarButtonText(m_hMyToolBar, ID_EDIT_UNDO,_T("撤消"));
	AddToolbarButtonText(m_hMyToolBar, ID_EDIT_REDO,_T("重做"));

	AddToolbarButtonText(m_hMyToolBar, ID_VIEW_RESETLAYOUT,_T("重置工作区"));
	AddToolbarButtonText(m_hMyToolBar, ID_FILE_ADDPAGE,_T("加页"));
	AddToolbarButtonText(m_hMyToolBar, ID_FILE_FINISHORDER,_T("完成"));
	AddToolbarButtonText(m_hMyToolBar, ID_VIEW_CHANGE_COMBOX,_T("视角"));
	AddToolbarButtonText(m_hMyToolBar, ID_FILE_LOGIN,_T("登录"));
	AddToolbarButtonText(m_hMyToolBar, ID_BUTTON_TASK,_T("当前任务"));


	//添加下拉菜单
	AddToolBarDropDownMenu(m_hMyToolBar, ID_IMPORT_IMGS, IDR_VIEWLAYOUTMENU);


	CenterWindow(GetParent());
	return TRUE;
}


3.下拉菜单以及工具条,均可以在资源编辑器中编辑调整。

4.如果要调整工具条位置、大小等,一定要加上 CCS_NOPARENTALIGN 属性,否则无法调整宽度。CCS_NODIVIDER 则可以去掉顶端的那根横线。

4.以上测试,在VC6/WTL8编译通过


参照:

WTL_TOOLHELPER: http://www.codeproject.com/Articles/16737/WTL-Toolbar-Helper

RT_TOOLBAR 自定义资源格式介绍:http://www.microsoft.com/msj/0198/coolmenu.aspx

工具条资源读取方法: http://blog.csdn.net/wsjeep/article/details/1656246





推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • 详解Android  自定义UI模板设计_由浅入深
    学习安卓已有一些日子,前段时间整理了不少笔记,但是发现笔记不变分享与携带。今天开始整理博客,全当是与大家分享交流与自身学习理解的过程吧。结合最近在做的一个新闻类app及学习中的问题,一点一点整理一下, ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
author-avatar
吴秋仪6_913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有