FooButton

这篇文章介绍了FooButton, a 轻量级的所有者绘制按钮类,它为我提供了很好的服务 年又是;虽然有很多其他优秀的按钮类 CodeProject,我想我应该把这个值得信赖的朋友加到这一堆中,希望 有人可能会发现它同样有用。 foobutton可以让你使用香草 CButton作为: 标准按钮 带有下拉指示器的按钮 多按钮(如IE的“返回”和“下一步”按钮) checkbutton 超链接 响应鼠标单击的静态文本控件 复选框 单选按钮支持也提供了: 位图(目前只有16色) 左对齐、居中和多行标题 彩色字幕 渐变阴影按钮背景 弹出菜单 热跟踪 可选的焦点矩形和“默认按钮”指示器 分组checkbuttons 如何使用FooButton 首先,关联一个标准的按钮控件(例如:IDC_FOO_BUTTON) 在您与对象实例的对话框中。 隐藏,复制代码/ / / / / / / / / / / / / / / MyDialog.h # include“FooButton.h” … FooButton m_fooButton; 隐藏,复制代码/ / / / / / / / / / / / / / / / / MyDialog.cpp 空白CMyDialog: DoDataExchange (CDataExchange * pDX) { CDialog: DoDataExchange (pDX); / / {{AFX_DATA_MAP (CMyDialog) DDX_Control (pDX IDC_FOO_BUTTON m_fooButton); / /}} AFX_DATA_MAP } 然后,初始化对话框的OnInitDialog()方法中的实例以适应 你的需求又是;在本例中,按钮被设置为显示位图和a 下拉的指标。 隐藏,复制代码//初始化FooButton m_fooButton。setBitmapId (IDB_FOO_BUTTON); m_fooButton。setType (FooButton:类型::pushButtonDropDown); ,,,, API 方法(),,MethodPurpose  setType()获取和设置按钮的type , getTextStyle (), setTextStyle()获取和设置按钮的文本style , getTextColor (), setTextColor()获取和设置按钮的文本color , getFocusStyle (), setFocusStyle()获取和设置按钮的焦点的style , getGradient (), setGradient()获取和设置按钮的梯度property , getBitmapId (), setBitmapId()获取和设置按钮的(可选)的位图 id  displayPopupMenu()显示一个弹出菜单下的按钮isChecked(), check()获取和设置一个复选按钮的检查状态isMultiClicked(), clearMultiClick()获取和重置一个多按钮的多次点击 state  addToGroup(), removeFromGroup()为按钮添加/删除一个复选按钮 group  reset()释放所有按钮使用的存储空间 groups , 使用FooButton作为一个检查按钮,你可以自由地改变的任何属性 按钮在运行时。这段代码将按钮转换为 检查按钮并检查它。检查()和使用 isChecked()用于设置和检索按钮的已检查状态。 隐藏,复制代码//使它成为一个检查按钮,并检查它 m_fooButton。setType (FooButton:类型::checkButton); m_fooButton。检查(真正的); 断言(m_fooButton.isChecked ());/ /测试 ,,,,,, 按钮和检查按钮可以设置为显示 通过调用setGradient(). 这 如果按钮不是按钮或检查按钮,则方法无效。 隐藏,复制代码//使用渐变阴影背景 m_fooButton。setGradient(真正的); ,,,, 按钮组你可以让一堆复选按钮正常运行 作为互斥单选按钮,将它们添加到按钮组中。一个 按钮组只是一个命名的按钮集合。FooButton 自动处理组创建、成员和清除。 隐藏,复制代码//使“大小”复选按钮互斥 m_btnSmall。addToGroup (_T (" foo ")); m_btnMedium。addToGroup (_T (" foo ")); m_btnLarge。addToGroup (_T (" foo ")); m_btnXLarge。addToGroup (_T (" foo ")); ,,,, 显示一个弹出菜单显示一个弹出菜单来响应一个按钮 点击,调用displayPopupMenu()只你可以调用这个方法 任何类型的FooButton。 隐藏,复制Codevoid CMyDialog: OnFooButton () { CMenu菜单; 菜单。LoadMenu (IDR_POPUP_MENU); CMenu* pPopupMenu =菜单。GetSubMenu (0); int nResult = m_fooButtondisplayPopupMenu (pPopupMenu); if (0 != nResult) PostMessage (WM_COMMAND nResult); } ,,,,,, multi-pushbutton一个multi-pushbutton表现为两个按钮合二为一, 类似于IE的“后退”和“下一步”按钮。当用户单击 按钮的下拉区域,FooButton设置其“多次点击” 属性为true又是;您可以通过调用来查询此属性 isMultiClicked()只不管用户是否点击 按钮的主或下拉区域,将发送一个标准通知给 父母只要清除按钮的多单击属性,请调用 clearMultiClick()。 隐藏,复制Codevoid CMyDialog: OnFooButton () { 如果(m_fooButton.isMultiClicked ()) { 如果单击下拉区域,则显示菜单 CMenu菜单; 菜单。LoadMenu (IDR_POPUP_MENU); CMenu* pPopupMenu =菜单。GetSubMenu (0); int nResult = m_fooButtondisplayPopupMenu (pPopupMenu); if (0 != nResult) PostMessage (WM_COMMAND nResult); //记住要清除按钮的多点击属性! m_fooButton.clearMultiClick (); 其他}{ //否则执行默认操作 PostMessage (WM_COMMAND IDC_DEFAULT_ACTION); } } ,,,,,, 复选框和单选按钮,你可以做一个FooButton 属性显示为标准复选框或单选按钮 FooButton:类型::复选框和FooButton:类型:收音机 类型只;当然,这只在您还想要显示时才真正有用 位图或添加菜单支持按钮。 隐藏,复制代码//显示为复选框和单选按钮 m_fooButton1。setType (FooButton::类型::复选框); m_fooButton2。setType (FooButton::类型::无线电); ,,,,,, 超链接按钮是一个普通的按钮 显示自己为超链接。您可以导航到URL或执行任何操作 按钮处理程序中的其他操作。 隐藏,复制代码//显示为超链接 m_fooButton。setType (FooButton:类型::hyperink); ,,,, 文本颜色你可以在任何时候改变按钮文本的颜色 调用setTextColor()只超链接按钮的文字是 总是用C_HyperlinkColor呈现,禁用按钮的是 总是以标准蚀刻格式呈现。 隐藏,复制代码//用红色绘制标题 m_fooButton。setTextColor (RGB (192, 0,0)); ,,,, 默认情况下,页脚按钮不显示 焦点矩形只调用setFocusStyle () ::normalFocus使按钮显示a 焦点矩形。 隐藏,复制代码//允许焦点矩形显示 m_fooButton。setFocusStyle (FooButton::重点::normalFocus); ,,,,,, 启用默认页脚按钮 显示它的标准黑色边框,调用setFocusStyle() FooButton:重点::defaultFocus。 隐藏,复制代码//允许显示焦点矩形和默认指示器 m_fooButton。setFocusStyle (FooButton::重点::defaultFocus); ,,,,,, 渲染禁用位图使用标准的MFC EnableWindow() API来启用和禁用按钮。 FooButton使用它的原始位图来渲染一个被禁用的版本。 隐藏,Codem_fooButton副本。EnableWindow(真正的);/ /启用按钮 m_fooButton。EnableWindow(假);/ /关闭按钮 ,,,,,, 确认 绘制位图透明的Zafir Anjum 绘制位图与灰色的3D效果 Jean-Edouard Lachand-Robert 超链接由Chris Maunder控制 一个梯度静态控制由Irek Zielinski 感谢那些报告错误、确定解决方案并提出建议的人 功能! 修订历史 2006年10月7日 缺陷修正:m_hMsimg32在析构函数中应该被设置为NULL。 (谢谢,c .年轻!) 缺陷修正:DisabledBlt()中的内存泄漏。 (谢谢,柯拉Valli !) 2005年3月6日 缺陷修正:添加了COLOR_HOTLIGHT的定义 在较旧的系统上启用编译。 2005年3月5 增强:增加了对渐变阴影按钮的支持。 缺陷修正:在对话框调用中重用组名将会 导致FooButton::removeFromGroup()崩溃。 2005年2月19日 增强:增加了对彩色字幕的支持。 增强:取消呼叫需求 当您的应用程序终止时,reset()。 增强:现在使用标准的Win2000/XP超级链接光标。 增强:如果没有,代码现在就会被断言 从按钮控件子类化。 缺陷修正:所有对Invalidate()的调用现在都进行验证 窗口句柄,允许FooButton被安全销毁的时候 点击。 修正了在默认状态下呈现逻辑的错误 2004年7月17日 增加了对复选框和单选按钮的支持 修正了在默认状态下呈现逻辑的错误 2004年7月11日 优化修复了“未引用标识符”编译器警告 暴露的焦点矩形和默认状态模式 增加了对按钮组的支持 2004年7月4日增加了多按钮和超链接样式。 2004.07提交CodeProject。 1998年9月12日初始版本。 本文转载于:http://www.diyabc.com/frontweb/news896.html

原文地址:https://www.cnblogs.com/Dincat/p/13456163.html