windows-nt/Source/XPSP1/NT/enduser/stuff/hhctrl/clistbox.h

112 lines
4.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// Copyright (C) 1993-1997 Microsoft Corporation. All rights reserved.
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef __CDLGLISTBOX_H__
#define __CDLGLISTBOX_H__
// Header-only classes for coding convenience
class CDlgListBox
{
public:
CDlgListBox() { m_hWnd = NULL; }
CDlgListBox(HWND hwndParent, int id) {
m_hWnd = GetDlgItem(hwndParent, id);
ASSERT_COMMENT(m_hWnd, "Invalid Listbox id");
}
void Initialize(int id) { ASSERT(m_hWnd); m_hWnd = GetDlgItem(GetParent(m_hWnd), id); };
void Initialize(HWND hdlg, int id) { m_hWnd = ::GetDlgItem(hdlg, id); };
INT_PTR SendMessage(UINT msg, WPARAM wParam = 0, LPARAM lParam = 0) const { return ::SendMessage(m_hWnd, msg, wParam, lParam); };
void Enable(BOOL fEnable = TRUE) const { EnableWindow(m_hWnd, fEnable); };
INT_PTR GetText(PSTR psz, int cchMax = MAX_PATH, int index = -1) const { return SendMessage(LB_GETTEXT,
(index == -1) ? GetCurSel() : index, (LPARAM) psz); };
INT_PTR GetTextLength(int index = -1) const { return SendMessage(LB_GETTEXTLEN,
(index == -1) ? GetCurSel() : index); };
INT_PTR GetCount() const { return SendMessage(LB_GETCOUNT); };
void ResetContent() const { SendMessage(LB_RESETCONTENT); };
void Reset() const { SendMessage(LB_RESETCONTENT); };
INT_PTR AddString(PCSTR psz) const { return SendMessage(LB_ADDSTRING, 0, (LPARAM) psz); };
INT_PTR InsertString(int index, PCSTR psz) const { return SendMessage(LB_INSERTSTRING, index, (LPARAM) psz); };
INT_PTR DeleteString(int index) const { return SendMessage(LB_DELETESTRING, index); };
void RemoveListItem(); // removes currently selected item
INT_PTR GetItemRect(RECT* prc, int index = -1) const { return SendMessage(LB_GETITEMRECT,
((index == -1) ? GetCurSel() : index), (LPARAM) prc); };
INT_PTR GetItemData(int index) const { return SendMessage(LB_GETITEMDATA, index); };
INT_PTR SetItemData(int index, int data) const { return SendMessage(LB_SETITEMDATA, index, data); };
INT_PTR GetCurSel() const {
// works on single selection listbox only
ASSERT(!(GetWindowLong(m_hWnd, GWL_STYLE) & LBS_MULTIPLESEL));
return SendMessage(LB_GETCURSEL); };
INT_PTR SetCurSel(int index = 0) const {
// works on single selection listbox only
ASSERT(!(GetWindowLong(m_hWnd, GWL_STYLE) & LBS_MULTIPLESEL));
return SendMessage(LB_SETCURSEL, index); };
INT_PTR GetTopIndex(void) const { return SendMessage(LB_GETTOPINDEX); };
void SetTopIndex(int index) const { (void) SendMessage(LB_SETTOPINDEX, (WPARAM) index); };
// For multi-select list boxes
INT_PTR GetSel(int index) const {
// works on multiple selection listbox only
ASSERT((GetWindowLong(m_hWnd, GWL_STYLE) & LBS_MULTIPLESEL));
return SendMessage(LB_GETSEL, index); };
void SetSel(int index, BOOL fSelect = TRUE) const {
// works on multiple selection listbox only
ASSERT((GetWindowLong(m_hWnd, GWL_STYLE) & LBS_MULTIPLESEL));
(void) SendMessage(LB_SETSEL, fSelect, MAKELPARAM(index, 0)); };
INT_PTR FindString(PCSTR pszString, int iStart = -1) const { return SendMessage(LB_FINDSTRING, iStart, (LPARAM) pszString); };
INT_PTR SelectString(PCSTR pszString, int iStart = -1) const {
// works on single selection listbox only
ASSERT(!(GetWindowLong(m_hWnd, GWL_STYLE) & LBS_MULTIPLESEL));
return SendMessage(LB_SELECTSTRING, iStart, (LPARAM) pszString); };
void Invalidate(BOOL bErase = TRUE) { InvalidateRect(m_hWnd, NULL, bErase); }
void DisableRedraw(void) { SendMessage(WM_SETREDRAW, FALSE); }
void EnableRedraw(void) { SendMessage(WM_SETREDRAW, TRUE); }
HWND m_hWnd;
operator HWND() const
{ return m_hWnd; }
};
class CDlgCheckListBox : public CDlgListBox
{
public:
CDlgCheckListBox();
~CDlgCheckListBox();
BOOL IsItemChecked(int nIndex) const;
void CheckItem(int nIndex, BOOL fChecked = TRUE);
void ToggleItem(int nIndex);
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
int GetCheckRect(int nIndex, RECT* prc);
void InvalidateItem(int nIndex, BOOL fRedraw = FALSE);
int ItemHeight(void);
void DrawCheck(HDC hdc, RECT* prc, BOOL fChecked);
void OnSelChange(void);
int m_xMargin;
int m_yMargin;
int m_cxDlgFrame;
int m_cxCheck;
int m_cyCheck;
int m_iLastSel;
HBITMAP m_hbmpCheck;
};
#endif // __CDLGLISTBOX_H__