弹出式菜单按钮2

样式:



实现代码如下:


#if !defined(AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_)
#define AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CoolBtn.h : header file
//


/////////////////////////////////////////////////////////////////////////////
// CCoolBtn window




class CCoolBtn : public CButton
{
// Construction
public:
CCoolBtn();
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
BOOL SetButtonImage(UINT nResourceId, COLORREF crMask);
BOOL AddMenuItem(UINT nMenuId,const CString strMenu, UINT nFlags);
BOOL EnableMenuItem(UINT nMenuId,const CString strMenu, BOOL nEnable);
BOOL RemoveMenuItem(UINT nMenuId,const CString strMenu, UINT nMenuFlags);
void AddImage( int nIndex, CBitmap& bmpEnabled, CBitmap& bmpDisabled );
void ChangeMenuFlags(UINT nMenuId, UINT nMenuFlags);
void SetDefaultButton(BOOL bDefault);


// Attributes
protected:
  CMenu        m_menu;
  CBitmap      m_btnImage;
  CImageList   m_IL;
  BOOL         m_bPushed;
  BOOL         m_bMenuPushed;
  BOOL         m_bMenuLoaded;
  BOOL         m_bDefaultBtn;
  BOOL         m_bLoaded;
  BITMAP       m_bm;
  CWnd*        m_pParentWnd;
  COLORREF   m_crMask;
  HBITMAP   m_hbmpDisabled;




// Operations
public:
protected:
  void DrawArrow(CDC* pDC,CPoint ArrowTip);
  BOOL HitMenuBtn(CPoint point);


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCoolBtn)
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL


// Implementation
public:
virtual ~CCoolBtn();


// Generated message map functions
protected:
//{{AFX_MSG(CCoolBtn)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnSysColorChange();
//}}AFX_MSG


DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.


#endif // !defined(AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_)



#if !defined(AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_)
#define AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CoolBtn.h : header file
//


/////////////////////////////////////////////////////////////////////////////
// CCoolBtn window




class CCoolBtn : public CButton
{
// Construction
public:
CCoolBtn();
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
BOOL SetButtonImage(UINT nResourceId, COLORREF crMask);
BOOL AddMenuItem(UINT nMenuId,const CString strMenu, UINT nFlags);
BOOL EnableMenuItem(UINT nMenuId,const CString strMenu, BOOL nEnable);
BOOL RemoveMenuItem(UINT nMenuId,const CString strMenu, UINT nMenuFlags);
void AddImage( int nIndex, CBitmap& bmpEnabled, CBitmap& bmpDisabled );
void ChangeMenuFlags(UINT nMenuId, UINT nMenuFlags);
void SetDefaultButton(BOOL bDefault);


// Attributes
protected:
  CMenu        m_menu;
  CBitmap      m_btnImage;
  CImageList   m_IL;
  BOOL         m_bPushed;
  BOOL         m_bMenuPushed;
  BOOL         m_bMenuLoaded;
  BOOL         m_bDefaultBtn;
  BOOL         m_bLoaded;
  BITMAP       m_bm;
  CWnd*        m_pParentWnd;
  COLORREF   m_crMask;
  HBITMAP   m_hbmpDisabled;




// Operations
public:
protected:
  void DrawArrow(CDC* pDC,CPoint ArrowTip);
  BOOL HitMenuBtn(CPoint point);


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCoolBtn)
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL


// Implementation
public:
virtual ~CCoolBtn();


// Generated message map functions
protected:
//{{AFX_MSG(CCoolBtn)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnSysColorChange();
//}}AFX_MSG


DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.


#endif // !defined(AFX_COOLBTN_H__3A90681F_CE5F_11D3_808C_005004D6CF90__INCLUDED_)



示例 :


//  在父窗口单击按钮项:

// CXXXDlg.h
afx_msg void OnFileOpen();
afx_msg void OnFileOpenReadOnly();


    CCoolBtn  m_btn;


// CXXXDlg.cpp
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
////
ON_COMMAND(ID_OPENFILE, OnFileOpen)
ON_COMMAND(ID_OPENFILE_READ, OnFileOpenReadOnly)
//////////////////////////////////////////////////
END_MESSAGE_MAP()



//  初始化

CRect rc;  
  GetClientRect(rc);

m_btn.Create("&Open", WS_TABSTOP | WS_CHILD|WS_VISIBLE,CRect(5,5,5+100,5+26),this,IDC_FILE);
  m_btn.SetButtonImage(IDC_FILE, RGB(255,0,255));
  m_btn.AddMenuItem(ID_OPENFILE,"&Open",0);
  m_btn.AddMenuItem(-1,"",MF_SEPARATOR);
  m_btn.AddMenuItem(ID_OPENFILE_READ,"Open &Read Only",0);
  m_btn.AddMenuItem(3,"Open as a &Copy...",MF_DISABLED|MF_GRAYED);


// 使能状态设置

m_btn.EnableWindow(TRUE);

m_btn.EnableWindow(FALSE);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值