zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/Dincat/p/13450881.html
Copyright © 2011-2022 走看看