-
Notifications
You must be signed in to change notification settings - Fork 0
/
CJFlatComboBox.h
executable file
·190 lines (170 loc) · 6.75 KB
/
CJFlatComboBox.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// CJFlatComboBox.h : header file
//
// Copyright © 1998-99 Kirk W. Stowell
// mailto:kstowell@codejockeys.com
// http://www.codejockeys.com/kstowell/
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name and all copyright
// notices remains intact. If the source code in this file is used in
// any commercial application then a statement along the lines of
// "Portions Copyright © 1998 Kirk Stowell" must be included in
// the startup banner, "About" box or printed documentation. An email
// letting me know that you are using it would be nice as well. That's
// not much to ask considering the amount of work that went into this.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage/loss of business that
// this product may cause.
//
// Expect bugs!
//
// Please use and enjoy, and let me know of any bugs/mods/improvements
// that you have found/implemented and I will fix/incorporate them into
// this file.
//
/////////////////////////////////////////////////////////////////////////////
/****************************************************************************
*
* $Date: 5/17/99 9:24p $
* $Revision: 9 $
* $Archive: /CodeJockey/Include/CJFlatComboBox.h $
*
* $History: CJFlatComboBox.h $
*
* ***************** 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
// CCJComboBox 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:
int m_nOffset; // offset used during paint.
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_clrBtnHilite; // set to the system color COLOR_BTNHILIGHT
COLORREF m_clrBtnShadow; // set to the system color COLOR_BTNSHADOW
COLORREF m_clrBtnFace; // set to the system color COLOR_BTNFACE
// enum used to determine the state the combo box should be
//
enum STATE { normal = 1, raised = 2, pressed = 3 };
public:
// Call this member function to enable auto completion.
//
void EnableAutoCompletion(BOOL bEnable=TRUE);
protected:
// this member function is called by the combo box whenever a paint
// operation should occur.
//
void DrawCombo(STATE eState, COLORREF clrTopLeft, COLORREF clrBottomRight);
// 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
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// Inline Functions
/////////////////////////////////////////////////////////////////////////////
inline void CCJFlatComboBox::EnableAutoCompletion(BOOL bEnable/*=TRUE*/)
{ ASSERT(::IsWindow(m_hWnd)); m_bAutoComp = bEnable; }
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // __CJCOMBOBOX_H__