• MFC位图按钮


    介绍 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

  • 相关阅读:
    201671010145 20162017 《Java程序设计》java的继承中什么叫方法覆盖,是如何实现的?
    201671010145 20162017《Java程序设计》Java接口的功能
    Java与C语言的区别
    201671010145 201620173《Java程序设计》Java中类与对象的区别
    Java 加密算法
    Java 基础
    Java 新建线程时使用线程池处理
    sublime text 3安装
    C语言的基本数据类型
    有点跑题的随笔
  • 原文地址:https://www.cnblogs.com/Dincat/p/13450881.html
Copyright © 2020-2023  润新知