www.pudn.com > mfc资源大全1.rar > button_color_picker.shtml


 
 
    
    
   Controls - Combobox Color Picker 
 
 

Button Color Picker


This article was contributed by Benoit Dufort.

I recently wanted to allow certain color selection in one of my 16 bits projects like Excel offers in it's toolbar. The following code acomplishes exactly that. My projet is a 16 bits application so the exemple is in 16 bits build with MSVC 1.52, but I sure you can recompile it in 32 bits.

Just include the ComboBtn.h and ComboBtn.cpp files in your project and create a control member variable. Here's a preview of the button and the implementation in a toolbar.

Download sample and source 85KB

 
// mainfrm.h : interface of the CMainFrame class 
// 
///////////////////////////////////////////////////////////////////////////// 
#include "combobtn.h" 
 
class CMainFrame : public CMDIFrameWnd 
{ 
	DECLARE_DYNAMIC(CMainFrame) 
public: 
	CMainFrame(); 
 
// Attributes 
public: 
	CButtonCombo m_colorBtn; 
	CButtonCombo m_bitmapBtn; 
 
// Operations 
public: 
 
// Implementation 
public: 
	virtual ~CMainFrame(); 
#ifdef _DEBUG 
	virtual void AssertValid() const; 
	virtual void Dump(CDumpContext& dc) const; 
#endif 
 
protected:  // control bar embedded members 
	CStatusBar  m_wndStatusBar; 
	CToolBar    m_wndToolBar; 
 
// Generated message map functions 
protected: 
	//{{AFX_MSG(CMainFrame) 
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
		// NOTE - the ClassWizard will add and remove member functions here. 
		//    DO NOT EDIT what you see in these blocks of generated code! 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
// in mainfrm.cpp 
 
// toolbar buttons - IDs are command buttons 
static UINT BASED_CODE buttons[] = 
{ 
	// same order as in the bitmap 'toolbar.bmp' 
	ID_FILE_NEW, 
	ID_FILE_OPEN, 
	ID_FILE_SAVE, 
		ID_SEPARATOR, 
	ID_EDIT_CUT, 
	ID_EDIT_COPY, 
	ID_EDIT_PASTE, 
		ID_SEPARATOR, 
		ID_SEPARATOR,	// Color Button 
		ID_SEPARATOR, 
		ID_SEPARATOR,	// Bitmap Button 
		ID_SEPARATOR, 
	ID_FILE_PRINT, 
	ID_APP_ABOUT, 
}; 
 
static UINT BASED_CODE indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_INDICATOR_CAPS, 
	ID_INDICATOR_NUM, 
	ID_INDICATOR_SCRL, 
}; 
 
#define IDC_BTNCOLOR	1000 
#define IDC_BTNBITMAP	1001 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	// TODO: add member initialization code here 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
 
	if (!m_wndToolBar.Create(this) || 
		!m_wndToolBar.LoadBitmap(IDR_MAINFRAME) || 
		!m_wndToolBar.SetButtons(buttons, 
		  sizeof(buttons)/sizeof(UINT))) 
	{ 
		TRACE("Failed to create toolbar\n"); 
		return -1;      // fail to create 
	} 
 
	m_wndToolBar.SetButtonInfo(8, IDC_BTNCOLOR, TBBS_SEPARATOR, 48 ); 
	m_wndToolBar.SetButtonInfo(10, IDC_BTNBITMAP, TBBS_SEPARATOR, 48 ); 
	 
	m_wndToolBar.SetButtonInfo(9, ID_SEPARATOR, TBBS_SEPARATOR, 12 ); 
	m_wndToolBar.SetButtonInfo(11, ID_SEPARATOR, TBBS_SEPARATOR, 12 ); 
	CRect rect; 
	m_wndToolBar.GetItemRect(8, &rect); 
 
	CString sText = "";  
	char buffer[5]; 
	for (int i = 0; i < 72; i++) 
		sText += "Color " + CString(itoa(i, buffer, 10)) + ((i < 71)? ";" : ""); 
 
	m_colorBtn.Create(rect, CSize(8, 6), CSize(16, 15), &m_wndToolBar, IDC_BTNCOLOR); 
//	If you want the text for each color use this line  
//	m_colorBtn.Create(rect, CSize(8, 6), CSize(16, 15), &m_wndToolBar, IDC_BTNCOLOR, sText); 
 
	sText.LoadString(IDS_STRINGCHART);	 
	m_wndToolBar.GetItemRect(10, &rect); 
	m_bitmapBtn.Create(rect, CSize(4, 4), IDB_CHART, 14, &m_wndToolBar, IDC_BTNBITMAP, sText); 
 
	if (!m_wndStatusBar.Create(this) || 
		!m_wndStatusBar.SetIndicators(indicators, 
		  sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE("Failed to create status bar\n"); 
		return -1;      // fail to create 
	} 
 
	return 0; 
} 


Goto HomePage
© 1998 Zafir Anjum 
Contact me: zafir@dsp.com