MFC位图按钮

摘要:
前景是一个用户定义的单色位图(字形),透明地绘制在按钮的背景上。在对话框的OnInitDialog中,添加以下代码:复制代码//custombitmapbuttondemodlp.cpp:定义文件m_ctrlCaptionFrame.CreateCaptionFrame;创建标题框架之后,添加您需要的按钮。要添加标题按钮,请在对话框的OnInitDialog中调用AddCaptionButton:HideCopyCode//CustomCaptionButtonDemoDlg.cpp:定义文件m_ctrlCaptionFrame.AddCaptionButton;0150年m_ctrlCaptionFrame.AddCaptionButton;*pBn1=m_ctrlCaptionFrame.GetCaptionButtonPtr;如果{CBitmapbmpGlyph1;bmpGlyph1.LoadBitmap;pBn1→SetGlyphBitmap;双击关闭窗口,右击显示弹出菜单”));}CCustomBitmapButton*pBn2=m_ctrlCaptionFrame.GetCaptionButtonPtr;如果{CBitmapbmpGlyph2;bmpGlyph2.LoadBitmap;pBn2→SetGlyphBitmap;;}从对话框类的标题按钮处理WM_NOTIFY消息。创建位图按钮并将其附加到CCustomBitmapButton对象的实例。setglyphbitmap指定字形位图将显示在按钮上。enablewindow启用或禁用按钮。

介绍 CCustomBitmapButton是一个派生自CWnd类的MFC控件。这个按钮有两个部分:一个背景和一个前景。如果WinXP和XP操作系统启用了主题,背景是一个位图加载从当前活跃的主题资源文件(我使用类似的技术来画CCustomTabCtrl滚动按钮的控制),否则“DrawFrameControl”功能是用来绘制按钮背景。前景是一个用户定义的单色位图(字形),透明地绘制在按钮的背景上。 支持功能: 标准或XP主题视图 12种预定义的背景样式 用户定义前景(位图符号) 支持按钮状态:“正常”、“热”、“按下”和“禁用” 按钮可以在标题栏区域创建 对话框、SDI和MDI对标题按钮的支持 无闪烁的画 内置的工具提示 使用的代码 要将CCustomBitmapButton类集成到您的应用程序中作为标题框架,请遵循以下步骤: 添加ThemeUtil。h, ThemeUtil。cpp, CustomBitmapButton。h, CustomBitmapButton。cpp、Tmschema.h和Schemadef.h添加到您的项目中。 在适当的头文件中包括CustomBitmapButton.h—通常是使用类CCustomBitmapButton的对话框头。隐藏,复制代码// CustomBitmapButtonDemoDlg.h:头文件 # include“CustomBitmapButton.h” 在对话框头部声明类型为CCustomBitmapButton的m_ctrlCaptionFrame对象。 隐藏,复制代码// CustomBitmapButtonDemoDlg.h:头文件 类CCustomBitmapButtonDemoDlg: CDialog { …… 私人: CCustomBitmapButton m_ctrlCaptionFrame; }; 创建标题框架。 在对话框的OnInitDialog中,添加以下代码:复制代码// custombitmapbuttondemodlp .cpp:定义文件 m_ctrlCaptionFrame.CreateCaptionFrame(这个,IDR_MAINFRAME); 创建标题框架之后,添加您需要的按钮。 要添加标题按钮,请在对话框的OnInitDialog中调用AddCaptionButton:HideCopy Code// CustomCaptionButtonDemoDlg.cpp:定义文件 m_ctrlCaptionFrame.AddCaptionButton(绘图用的矩形类(0,0,0,0),1, CBNBKGNDSTYLE_CLOSE、假); 0150年m_ctrlCaptionFrame.AddCaptionButton(绘图用的矩形类(0,0),2, CBNBKGNDSTYLE_CAPTION,真正的); * pBn1 = m_ctrlCaptionFrame.GetCaptionButtonPtr(1); 如果(pBn1) { CBitmap bmpGlyph1; bmpGlyph1.LoadBitmap (IDB_GLYPH1); pBn1→SetGlyphBitmap (bmpGlyph1); 双击关闭窗口, 右击显示弹出菜单”)); } CCustomBitmapButton* pBn2 = m_ctrlCaptionFrame.GetCaptionButtonPtr(2); 如果(pBn2) { CBitmap bmpGlyph2; bmpGlyph2.LoadBitmap (IDB_GLYPH2); pBn2→SetGlyphBitmap (bmpGlyph2); (_T(" Andrzej Markowski的文章")); } 从对话框类的标题按钮处理WM_NOTIFY消息。当用户点击一个按钮时,按钮发送通知消息(NM_CLICK, NM_RCLICK, NM_DBLCLK, NM_RDBLCLK)到它的父窗口。如果您想做些什么来响应,请处理这些消息。 隐藏,复制代码// custombitmapbuttondemodlp .cpp:定义文件 BEGIN_MESSAGE_MAP (CCustomBitmapButtonDemoDlg CDialog) / / {{AFX_MSG_MAP (CCustomBitmapButtonDemoDlg) ON_NOTIFY (NM_DBLCLK 1 OnBnDblClickedCaptionbn1) ON_NOTIFY (NM_RCLICK 1 OnBnRClickedCaptionbn1) ON_NOTIFY (NM_CLICK 2 OnBnClickedCaptionbn2) / /}} AFX_MSG_MAP END_MESSAGE_MAP () … 空白CCustomBitmapButtonDemoDlg:: OnBnDblClickedCaptionbn1 (NMHDR * pNotifyStruct, LRESULT * result) { CPoint pt; :: GetCursorPos(及pt); PostMessage (WM_SYSCOMMAND SC_CLOSE MAKEWORD (pt.x pt.y)); } … 不要忘记破坏标题框架,否则将导致内存泄漏。隐藏,复制代码// custombitmapbuttondemodlp .cpp:定义文件 空白CCustomBitmapButtonDemoDlg: OnDestroy () { m_ctrlCaptionFrame.DestroyCaptionFrame (); CDialog: OnDestroy (); } CCustomBitmapButton类成员 建筑/破坏 属性 操作 通知消息 错误代码 建筑/破坏 构造一个CCustomBitmapButton对象。创建位图按钮并将其附加到CCustomBitmapButton对象的实例。createcaptionframecreated一个标题框架。摧毁字幕帧。 属性 getcaptionbuttonptreves获取标题按钮的指针。改变按钮的工具提示文本。GetBkStyleRetrieves关于按钮控件背景样式的信息。SetBkStyleChanges改变按钮的背景样式。获取前面用SetGlyphBitmap设置的字形位图的句柄。setglyphbitmap指定字形位图将显示在按钮上。enablewindow启用或禁用按钮。 操作 addcaptionbuttoninsert一个新的按钮在标题栏。 CCustomBitmapButton: CCustomBitmapButton CCustomBitmapButton (); 讲话 调用这个函数来构造一个CCustomBitmapButton对象。 CCustomBitmapButton::创建 创建(DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nID); 返回值 如果对象初始化成功,则为TRUE,否则为FALSE。 参数 指定按钮的样式。 指定按钮的大小和位置。它可以是一个CRect对象,也可以是一个RECT结构。 指定按钮的父窗口。 nID—指定按钮ID。 讲话 创建一个位图按钮,并将其附加到CCustomBitmapButton对象的实例。 CCustomBitmapButton: CreateCaptionFrame (CWnd* pCaptionWnd, int nIDIcon); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 指定标题栏所有者窗口。 指定标题图标资源ID。 讲话 创建标题框架。 CCustomBitmapButton: DestroyCaptionFrame int DestroyCaptionFrame (); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 讲话 破坏标题框。 CCustomBitmapButton: GetCaptionButtonPtr GetCaptionButtonPtr(int nButtonID)常量; 返回值 如果成功,指针指向CCustomBitmapButton对象,否则为空。 参数 nButtonID -标题按钮的ID。 讲话 调用此函数检索指向标题按钮的指针。 CCustomBitmapButton: SetTooltipText int SetTooltipText(CString sText); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 指向包含新工具提示文本的字符串对象的指针。 讲话 这个函数改变按钮的工具提示文本。 CCustomBitmapButton: GetBkStyle int GetBkStyle (); 返回值 返回这个CCustomBitmapButton对象的按钮背景样式。 讲话 调用此函数检索关于按钮控件背景样式的信息。 CCustomBitmapButton: SetBkStyle int nBkStyle; 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 nBkStyle -指定按钮的背景样式。 支持背景样式: 框架按钮 CBNBKGNDSTYLE_CLOSE CBNBKGNDSTYLE_MDI 组合框-组合框下拉按钮 CBNBKGNDSTYLE_SPINUP -旋转按钮 CBNBKGNDSTYLE_SPINDN CBNBKGNDSTYLE_SPINUPHOR CBNBKGNDSTYLE_SPINDNHOR 滚动条按钮 CBNBKGNDSTYLE_SCROLLDOWN CBNBKGNDSTYLE_SCROLLLEFT CBNBKGNDSTYLE_SCROLLRIGHT 讲话 更改按钮的背景样式。 CCustomBitmapButton: GetGlyphBitmap HBITMAP GetGlyphBitmap (); 返回值 位图的句柄。如果之前没有指定位图,则为空。 讲话 调用此成员函数获得与按钮关联的字形位图的句柄。 CCustomBitmapButton: SetGlyphBitmap int SetGlyphBitmap(HBITMAP hBmpGlyph); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 位图的句柄。 讲话 调用此成员函数将一个新的符号位图与按钮关联。 CCustomBitmapButton: EnableWindow int EnableWindow(BOOL bEnable = TRUE); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 bEnable -指定给定的窗口是启用还是禁用。如果该参数为真,则窗口将被启用。如果此参数为FALSE,则该窗口将被禁用。 讲话 调用此函数来启用或禁用按钮控件。 CCustomBitmapButton: AddCaptionButton int AddCaptionButton(LPCRECT lpRect, UINT nID, int nBkStyle, BOOL fUserDefWidth); 返回值 如果成功则为CBNERRR_NOERROR,否则为CBNERRR_ERRORCODE。 参数 如果fUserDefWidth为真,则指定按钮宽度,否则忽略。 nID—指定按钮ID。 nBkStyle -指定按钮的背景样式。 fUserDefWidth -如果为真-用户定义按钮宽度。 讲话 调用此函数在现有的标题栏中插入一个新按钮。 通知消息 按钮控件支持以下通知代码: 用户单击控件中的鼠标左键。 用户单击控件中的鼠标右键。 NM_DBLCLK -用户双击控件中的鼠标左键。 NM_RDBLCLK -用户双击控件中的鼠标右键。 错误代码 按钮控制功能可以返回以下错误: CBNERRR_NOERROR -操作成功。 CBNERR_OUTOFMEMORY -函数调用失败,因为没有足够的可用内存。 CBNERR_INCORRECTPARAMETER -函数调用失败,因为指定了不正确的函数参数。 CBNERR_INCORRECTBUTTONSTYLE -函数调用失败,因为指定了不正确的按钮样式。 CBNERR_INCORRECTFRAMESTYLE -函数调用失败,因为没有指定WS_CAPTION样式。 CBNERR_INCORRECTFUNCCALL -不正确的函数调用(例如:ob. settooltiptext(…),其中ob是标题框架对象的实例)。 CBNERR_CREATEBUTTONFAILED—因为创建按钮控件失败,所以函数调用失败。 CBNERR_CREATETOOLTIPCTRLFAILED -由于工具提示控件创建失败,导致函数调用失败。 CBNERR_COPYIMAGEFAILED -由于字形图像复制失败,函数调用失败。 CBNERR_SETWINDOWLONGFAILED -调用函数SetWindowLong failed。 CBNERR_FRAMEALREADYCREATED -函数调用失败,因为标题框架已经创建。 CBNERR_FRAMENOTCREATED -函数调用失败,因为没有创建标题框架。 本文转载于:http://www.diyabc.com/frontweb/news515.html

免责声明:文章转载自《MFC位图按钮》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring bean的初始化及销毁关于Client_Abort_Exception异常的分析和解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入浅出MFC学习笔记 消息

本章将会对MFC的消息映射和命令传递机制做深入探讨。 MFC规定了消息传递的路线,消息会按照这个路线传递下去,找不到归宿的话就交给DefWindowProc。 在产生窗口之前,如果我们在创建窗口时指定的窗口类为NULL时,MFC会自动注册五个默认的窗口类,每个窗口类有自己的窗口函数。不同窗口得到的消息应该交由不同的窗口函数来处理。所谓的命令传递机制是为了让...

基于Redis的Spring cache 缓存介绍

Cache API及默认提供的实现 Spring提供的核心Cache接口:  package org.springframework.cache; public interface Cache { String getName(); //缓存的名字 Object getNativeCache(); //得到底层使用的缓...

Libevent:2设置

Libevent有一些整个进程共享的全局设置。这些设置会影响到整个的库。因此必须在调用Libevent其他函数之前进行设置,否则,LIbevent就会陷入不一致的状态。 一:Libevent中的日志信息 Libevent可以记录内部的error和warning信息,而且如果在编译时设置的话,它还可以记录debug消息。默认情况下,这些信息都会写到stde...

React入门

1.JSX语法 JSX语法就是,可以在js文件中插入html片段,是react自创的一种语法 JSX语法会被Babel等转码工具进行转码,得到正常的js代码再执行。 注意: 1.所有的html标签必须是闭合的 2.再jsx语法中,只能有一个根标签 2.组件 组件是react中核心概念,一个网页,可以被拆分成一个个组件。 react中自定义组件四个步骤: /...

WSGI详解

WSGI接口 了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求; 服务器收到请求,生成一个HTML文档; 服务器把HTML文档作为HTTP响应的Body发送给浏览器; 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。 所以,最简单的Web应用就是先把HTML用文件保存好,用...

Matlab子函数定义稍微转载一下

Matlab子函数定义 (2010-12-21 11:42:47)标签:matlab子函数定义嵌套函数分类:matlab学习 在matlab的函数定义中,如果函数如果函数较长或较多,往往可以将各函数分别写在多个.m文件中,但有时函数可能很短,就几行,可能希望将多个函数定义放在同一个.m文件中,这里就存在一个子函数的定义问题。 在matlab中一个.m文件中...