www.pudn.com > mu_explorer.rar > CJFlatComboBox.h


// CJFlatComboBox.h : header file 
// Copyright © 1998-1999 CodeJock.com, All Rights Reserved. 
// See ReadMe.txt for TERMS OF USE. 
// 
///////////////////////////////////////////////////////////////////////////// 
/**************************************************************************** 
 * 
 * $Date: 10/30/99 6:01p $ 
 * $Revision: 17 $ 
 * $Archive: /CodeJock/Include/CJFlatComboBox.h $ 
 * 
 * $History: CJFlatComboBox.h $ 
 *  
 * *****************  Version 17  ***************** 
 * User: Kirk Stowell Date: 10/30/99   Time: 6:01p 
 * Updated in $/CodeJock/Include 
 * Overrode OnEraseBkgnd(...) and re-wrote OnPaint() to handle flicker 
 * free drawing. 
 *  
 * *****************  Version 16  ***************** 
 * User: Kirk Stowell Date: 10/30/99   Time: 2:24p 
 * Updated in $/CodeJock/Include 
 * Added COLORREF members to class to eliminate continuous calls to 
 * GetSysColor(...). Overrode OnSysColorChange() to re-initialize COLORREF 
 * variables.  
 *  
 * *****************  Version 15  ***************** 
 * User: Kirk Stowell Date: 10/26/99   Time: 10:39p 
 * Updated in $/CodeJock/Include 
 * Made class methods virtual for inheritance purposes. 
 *  
 * *****************  Version 14  ***************** 
 * User: Kirk Stowell Date: 8/31/99    Time: 1:11a 
 * Updated in $/CodeJockey/Include 
 * Updated copyright and contact information. 
 *  
 * *****************  Version 13  ***************** 
 * User: Kirk Stowell Date: 7/25/99    Time: 10:00p 
 * Updated in $/CodeJockey/Include 
 *  
 * *****************  Version 12  ***************** 
 * User: Kirk Stowell Date: 7/25/99    Time: 12:42a 
 * Updated in $/CodeJockey/Include 
 *  
 * *****************  Version 11  ***************** 
 * User: Kirk Stowell Date: 6/23/99    Time: 12:33a 
 * Updated in $/CodeJockey/Include 
 *  
 * *****************  Version 10  ***************** 
 * User: Kirk Stowell Date: 7/18/99    Time: 10:17p 
 * Updated in $/CodeJockey/Include 
 * Cleaned up inline functions, and import/export macro so that class will 
 * be imported when linked to, and exported at compile time. 
 *  
 * *****************  Version 9  ***************** 
 * User: Kirk Stowell Date: 5/17/99    Time: 9:24p 
 * Updated in $/CodeJockey/Include 
 * Gilberto Botaro [seafox@techno.com.br] - Added code for auto 
 * completion. 
 *  
 * *****************  Version 8  ***************** 
 * User: Kirk Stowell Date: 5/03/99    Time: 10:44p 
 * Updated in $/CodeJockey/Include 
 * Fixed code ommisions. 
 *  
 * *****************  Version 7  ***************** 
 * User: Kirk Stowell Date: 5/03/99    Time: 8:42p 
 * Updated in $/CodeJockey/Include 
 * Danilo Lax [Danilo_Lax@www2.alpeng.com] - The control is painted flat 
 * when the mouse leaves the box, even if the control has the focus, now 
 * checking for the focus in OnTimer(. 
 *  
 * Removed, unhandled msgs are processed by 
 * CComboBox::PreTranslateMessage(pMsg). Used reflected msgs 
 * BN_GETFOCUS/CBN_KILLFOCUS instead of WM_GETFOCUS/WM_KILLFOCUS. 
 *  
 * ::GetFocus() doesn't return CFlatComboBox::m_hWnd, even if the control 
 * has the focus (don't know why, maybe ::GetFocus() only returns the 
 * handle to the EditField part of the ComboBox), used flag m_bHasFocus 
 * instead. 
 *  
 * *****************  Version 6  ***************** 
 * User: Kirk Stowell Date: 4/03/99    Time: 4:26p 
 * Updated in $/CodeJockey/Include 
 * Added comments and cleaned up code. 
 *  
 * *****************  Version 5  ***************** 
 * User: Kirk Stowell Date: 1/22/99    Time: 4:26p 
 * Updated in $/CodeJockey/Include 
 * Fixed accelerator problem reported by YOSH YAMASHITA 
 * (yosh@muj.biglobe.ne.jp) with Matt Weagle's solution of overloading 
 * PreTranslateMessage(). 
 *  
 * *****************  Version 4  ***************** 
 * User: Kirk Stowell Date: 1/02/99    Time: 4:25p 
 * Updated in $/CodeJockey/Include 
 * Renamed class from CJComboBox to CCJFlatComboBox, changed DRAWSTATE to 
 * enum, removed method Offset(), and replaced with a direct call to 
 * ::GetSystemMetrics(). 
 *  
 * *****************  Version 3  ***************** 
 * User: Kirk Stowell Date: 11/02/98   Time: 4:24p 
 * Updated in $/CodeJockey/Include 
 * Added OnSetFocus(), OnKillFocus() and modified OnPaint() so the control 
 * remains beveled until it actually looses focus - (Vachik 
 * Hovhannissian). 
 *  
 * *****************  Version 2  ***************** 
 * User: Kirk Stowell Date: 10/05/98   Time: 4:24p 
 * Updated in $/CodeJockey/Include 
 * Fixed offset bug to use GetSystemMetrics(), instead of hard coded 
 * values - 
 * Todd Brannam (tbrannam@msn.com). 
 *  
 * *****************  Version 1  ***************** 
 * User: Kirk Stowell Date: 10/02/98   Time: 4:23p 
 * Created in $/CodeJockey/Include 
 * First release version. 
 * 
 ***************************************************************************/ 
///////////////////////////////////////////////////////////////////////////// 
 
#ifndef __CJFLATCOMBOBOX_H__ 
#define __CJFLATCOMBOBOX_H__ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
// CCJFlatComboBox is a CComboBox derived class which is simular to 
// the flat combobox as seen in the Microsoft office products. 
class  CCJFlatComboBox : public CComboBox 
{ 
	DECLARE_DYNAMIC(CCJFlatComboBox) 
 
public: 
	 
	// Default constructor 
	// 
	CCJFlatComboBox(); 
 
	// Virtual destructor 
	// 
	virtual ~CCJFlatComboBox(); 
 
protected: 
 
	// enum used to determine the state the combo box should be 
	// 
	enum STATE { NORMAL = 1, RAISED = 2, PRESSED = 3 }; 
 
	BOOL		m_bLBtnDown;		// TRUE if left mouse button is pressed 
	BOOL		m_bPainted;			// used during paint operations 
	BOOL		m_bHasFocus;		// TRUE if control has focus 
	BOOL		m_bAutoComp;		// Used by Autocompleting. 
	COLORREF	m_clrHilite;		// set to ::GetSysColor(COLOR_BTNHIGHLIGHT) 
	COLORREF	m_clrShadow;		// set to ::GetSysColor(COLOR_BTNSHADOW) 
	COLORREF	m_clrNormal;		// set to ::GetSysColor(COLOR_BTNFACE) 
 
public: 
	BOOL IsWin95(); 
 
	// Call this member function to enable auto completion. 
	// 
	virtual void EnableAutoCompletion(BOOL bEnable=TRUE); 
 
	// This member function determines if the mouse is within 
	// the controls rect. 
	// 
	virtual BOOL PointInRect(); 
 
protected: 
 
	// this member function is called by the combo box whenever a paint 
	// operation should occur. 
	// 
	virtual void DrawCombo(STATE eState, COLORREF clrTopLeft, COLORREF clrBottomRight, CDC* pDC=NULL); 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CCJFlatComboBox) 
	public: 
	virtual BOOL PreTranslateMessage(MSG* pMsg); 
	//}}AFX_VIRTUAL 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(CCJFlatComboBox) 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 
	afx_msg void OnTimer(UINT nIDEvent); 
	afx_msg void OnPaint(); 
	afx_msg void OnSetFocus(); 
	afx_msg void OnKillFocus(); 
	afx_msg void OnEditUpdate(); 
	afx_msg void OnSysColorChange(); 
	afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
	//}}AFX_MSG 
 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
//	Inline Functions 
///////////////////////////////////////////////////////////////////////////// 
 
inline void CCJFlatComboBox::EnableAutoCompletion(BOOL bEnable/*=TRUE*/) 
	{ ASSERT(::IsWindow(m_hWnd)); m_bAutoComp = bEnable; } 
 
inline BOOL CCJFlatComboBox::PointInRect() 
	{ ASSERT(::IsWindow(m_hWnd)); CPoint pt; GetCursorPos(&pt); CRect rcItem; GetWindowRect(&rcItem); return rcItem.PtInRect(pt); } 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // __CJCOMBOBOX_H__