//----------------------------------------------------------------------------- // File: flexlistbox.h // // Desc: Implements a list box control that can display a list of text strings, // each can be selected by mouse. The class CFlexListBox is derived from // CFlexWnd. It is used by the class CFlexComboBox when it needs to // expand to show the list of choices. // // Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #ifndef __FLEXLISTBOX_H__ #define __FLEXLISTBOX_H__ #include "flexscrollbar.h" #define FLBF_INTEGRALHEIGHT 0x00000001 #define FLBF_DEFAULT (FLBF_INTEGRALHEIGHT) enum { FLBN_SEL, FLBN_FINALSEL, FLBN_CANCEL }; struct FLEXLISTBOXCREATESTRUCT { DWORD dwSize; DWORD dwFlags; HWND hWndParent; HWND hWndNotify; BOOL bVisible; RECT rect; HFONT hFont; COLORREF rgbText, rgbBk, rgbSelText, rgbSelBk, rgbFill, rgbLine; int nSBWidth; }; struct FLEXLISTBOXITEM { FLEXLISTBOXITEM() : pszText(NULL), nID(-1), pData(NULL), bSelected(FALSE) {} FLEXLISTBOXITEM(const FLEXLISTBOXITEM &i) {nID = i.nID; pData = i.pData; bSelected = i.bSelected; SetText(i.GetText());} ~FLEXLISTBOXITEM() {cleartext();} void SetText(LPCTSTR str) {cleartext(); pszText = _tcsdup(str);} LPCTSTR GetText() const {return pszText;} int nID; void *pData; BOOL bSelected; private: void cleartext() {if (pszText) free(pszText); pszText = NULL;} LPTSTR pszText; // allocated }; class CFlexListBox : public CFlexWnd { public: CFlexListBox(); ~CFlexListBox(); // creation BOOL Create(FLEXLISTBOXCREATESTRUCT *); BOOL CreateForSingleSel(FLEXLISTBOXCREATESTRUCT *); // cosmetics void SetFont(HFONT hFont); void SetColors(COLORREF text, COLORREF bk, COLORREF seltext, COLORREF selbk, COLORREF fill, COLORREF line); // setup int AddString(LPCTSTR); // returns index // interaction void SelectAndShowSingleItem(int i, BOOL bScroll = TRUE); void SetSel(int i) {SelectAndShowSingleItem(i, FALSE);} void StartSel(); LPCTSTR GetSelText(); int GetSel(); protected: virtual void OnPaint(HDC hDC); virtual LRESULT WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); virtual void OnWheel(POINT point, WPARAM wParam); private: HWND m_hWndNotify; CArray m_ItemArray; COLORREF m_rgbText, m_rgbBk, m_rgbSelText, m_rgbSelBk, m_rgbFill, m_rgbLine; HFONT m_hFont; int m_nSBWidth; int m_nTextHeight; DWORD m_dwFlags; int m_nSelItem; int m_nTopIndex; void Calc(); void SetVertSB(BOOL); void SetVertSB(); void SetSBValues(); void InternalPaint(HDC hDC); void Notify(int code); POINT m_point; BOOL m_bOpenClick; // True when user click the combobox to open the listbox. False after that button up msg is processed. BOOL m_bCapture; BOOL m_bDragging; CFlexScrollBar m_VertSB; BOOL m_bVertSB; }; CFlexListBox *CreateFlexListBox(FLEXLISTBOXCREATESTRUCT *pcs); #endif //__FLEXLISTBOX_H__