True bar

真彩bar

 1 /***=========================================================================
 2 ====                                                                     ====
 3 ====                          D C U t i l i t y                          ====
 4 ====                                                                     ====
 5 =============================================================================
 6 ====                                                                     ====
 7 ====    File name           :  TrueColorToolBar.h                        ====
 8 ====    Project name        :  Tester                                    ====
 9 ====    Project number      :  ---                                       ====
10 ====    Creation date       :  13/1/2003                                 ====
11 ====    Author(s)           :  Dany Cantin                               ====
12 ====                                                                     ====
13 ====                  Copyright ?DCUtility  2003                        ====
14 ====                                                                     ====
15 =============================================================================
16 ===========================================================================*/
17 
18 
19 #ifndef TRUECOLORTOOLBAR_H_
20 #define TRUECOLORTOOLBAR_H_
21 
22 #if _MSC_VER > 1000
23 #pragma once
24 #endif // _MSC_VER > 1000
25 
26 
27 #include <afxtempl.h>
28 
29 /////////////////////////////////////////////////////////////////////////////
30 // CTrueColorToolBar
31 
32 class CTrueColorToolBar : public CToolBar
33 {
34 // Construction
35 public:
36     CTrueColorToolBar();
37 
38 // Attributes
39 private:
40     BOOL m_bDropDown;
41 
42     struct stDropDownInfo {
43     public:
44         UINT  uButtonID;
45         UINT  uMenuID;
46         CWnd* pParent;
47     };
48     
49     CArray <stDropDownInfo, stDropDownInfo&> m_lstDropDownButton;
50     
51 // Operations
52 public:
53     BOOL LoadTrueColorToolBar(int  nBtnWidth,
54                               UINT uToolBar,
55                               UINT uToolBarHot        = 0,
56                               UINT uToolBarDisabled = 0);
57 
58     void AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID);
59 
60 private:
61     BOOL SetTrueColorToolBar(UINT uToolBarType,
62                              UINT uToolBar,
63                              int  nBtnWidth);
64 
65 // Overrides
66     // ClassWizard generated virtual function overrides
67     //{{AFX_VIRTUAL(CTrueColorToolBar)
68     //}}AFX_VIRTUAL
69 
70 // Implementation
71 public:
72     virtual ~CTrueColorToolBar();
73 
74     // Generated message map functions
75 protected:
76     //{{AFX_MSG(CTrueColorToolBar)
77     afx_msg void OnToolbarDropDown(NMHDR * pnmh, LRESULT* plRes);
78     //}}AFX_MSG
79 
80     DECLARE_MESSAGE_MAP()
81 };
82 
83 /////////////////////////////////////////////////////////////////////////////
84 
85 //{{AFX_INSERT_LOCATION}}
86 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
87 
88 #endif // TRUECOLORTOOLBAR_H_
View Code
/***=========================================================================
====                                                                     ====
====                          D C U t i l i t y                          ====
====                                                                     ====
=============================================================================
====                                                                     ====
====    File name           :  TrueColorToolBar.cpp                      ====
====    Project name        :  Tester                                    ====
====    Project number      :  ---                                       ====
====    Creation date       :  13/1/2003                                 ====
====    Author(s)           :  Dany Cantin                               ====
====                                                                     ====
====                  Copyright ?DCUtility  2003                        ====
====                                                                     ====
=============================================================================
===========================================================================*/

#include "stdafx.h"
#include "TrueColorToolBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; 
#endif 

/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar

CTrueColorToolBar::CTrueColorToolBar()
{
	m_bDropDown = FALSE;
}

CTrueColorToolBar::~CTrueColorToolBar()
{
}


BEGIN_MESSAGE_MAP(CTrueColorToolBar, CToolBar)
	//{{AFX_MSG_MAP(CTrueColorToolBar)
	ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar message handlers
BOOL CTrueColorToolBar::LoadTrueColorToolBar(int  nBtnWidth,
											 UINT uToolBar,
											 UINT uToolBarHot,
											 UINT uToolBarDisabled)
{
	if (!SetTrueColorToolBar(TB_SETIMAGELIST, uToolBar, nBtnWidth))
		return FALSE;
	
	if (uToolBarHot) {
		if (!SetTrueColorToolBar(TB_SETHOTIMAGELIST, uToolBarHot, nBtnWidth))
			return FALSE;
	}

	if (uToolBarDisabled) {
		if (!SetTrueColorToolBar(TB_SETDISABLEDIMAGELIST, uToolBarDisabled, nBtnWidth))
			return FALSE;
	}

	return TRUE;
}


BOOL CTrueColorToolBar::SetTrueColorToolBar(UINT uToolBarType, 
							     	        UINT uToolBar,
										    int  nBtnWidth)
{
	CImageList	cImageList;
	CBitmap		cBitmap;
	BITMAP		bmBitmap;
	
	if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uToolBar),
								  IMAGE_BITMAP, 0, 0,
								  LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
	    !cBitmap.GetBitmap(&bmBitmap))
		return FALSE;

	CSize		cSize(bmBitmap.bmWidth, bmBitmap.bmHeight); 
	int			nNbBtn	= cSize.cx/nBtnWidth;
	RGBTRIPLE*	rgb		= (RGBTRIPLE*)(bmBitmap.bmBits);
	COLORREF	rgbMask	= RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
	
	if (!cImageList.Create(nBtnWidth, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 0))
		return FALSE;
	
	if (cImageList.Add(&cBitmap, rgbMask) == -1)
		return FALSE;

	SendMessage(uToolBarType, 0, (LPARAM)cImageList.m_hImageList);
	cImageList.Detach(); 
	cBitmap.Detach();
	
	return TRUE;
}

void CTrueColorToolBar::AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID)
{
	if (!m_bDropDown) {
		GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);
		m_bDropDown = TRUE;
	}

	SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN);

	stDropDownInfo DropDownInfo;
	DropDownInfo.pParent	= pParent;
	DropDownInfo.uButtonID	= uButtonID;
	DropDownInfo.uMenuID	= uMenuID;
	m_lstDropDownButton.Add(DropDownInfo);
}

void CTrueColorToolBar::OnToolbarDropDown(NMHDR * pnmtb, LRESULT *plr)
{
      NMTOOLBARA * pnmtbb=(NMTOOLBARA *)pnmtb;
	for (int i = 0; i < m_lstDropDownButton.GetSize(); i++) {
		
		stDropDownInfo DropDownInfo = m_lstDropDownButton.GetAt(i);

		if (DropDownInfo.uButtonID == UINT(pnmtbb->iItem)) {

			CMenu menu;
			menu.LoadMenu(DropDownInfo.uMenuID);
			CMenu* pPopup = menu.GetSubMenu(0);
			
			CRect rc;
			SendMessage(TB_GETRECT, (WPARAM)pnmtbb->iItem, (LPARAM)&rc);
			ClientToScreen(&rc);
			
			pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
				                   rc.left, rc.bottom, DropDownInfo.pParent, &rc);
			break;
		}
	}
}  

在toorbar中制作 更改属性

在头文件中加入#include "TrueColorToolBar.h"
CTrueColorToolBar m_ToolBar;
                                                                                                                                                                                                                                  

posted on 2015-06-25 09:50  yifi  阅读(272)  评论(0编辑  收藏  举报

导航