|
|
/*****************************************************************************
* * diqchk.c * * Wrappers that turn a listview into a checked listbox. * *****************************************************************************/
#include "diquick.h"
HIMAGELIST g_himlState;
#pragma BEGIN_CONST_DATA
/*****************************************************************************
* * Checklist_Init * * One-time initialization. * *****************************************************************************/
INT_PTR EXTERNAL Checklist_Init(void) { g_himlState = ImageList_LoadImage(g_hinst, MAKEINTRESOURCE(IDB_CHECK), 0, 2, RGB(0xFF, 0x00, 0xFF), IMAGE_BITMAP, 0);
return (INT_PTR)g_himlState; }
/*****************************************************************************
* * Checklist_Term * * One-time shutdown * *****************************************************************************/
void EXTERNAL Checklist_Term(void) { if (g_himlState) { ImageList_Destroy(g_himlState); } }
/*****************************************************************************
* * Checklist_OnInitDialog * * Initialize a single checklist control. * *****************************************************************************/
void EXTERNAL Checklist_OnInitDialog(HWND hwnd, BOOL fReadOnly) { ListView_SetImageList(hwnd, g_himlState, LVSIL_STATE); if (fReadOnly) { SetProp(hwnd, propReadOnly, LongToHandle((LONG)fReadOnly) ); ListView_SetBkColor(hwnd, GetSysColor(COLOR_3DFACE)); ListView_SetTextBkColor(hwnd, GetSysColor(COLOR_3DFACE)); } }
/*****************************************************************************
* * Checklist_AddString * * Add a string and maybe a checkbox. * *****************************************************************************/
int EXTERNAL Checklist_AddString(HWND hwnd, UINT ids, BOOL fCheck) { TCHAR tsz[256]; LV_ITEM lvi;
LoadString(g_hinst, ids, tsz, cA(tsz));
lvi.mask = LVIF_TEXT | LVIF_STATE; lvi.iSubItem = 0; lvi.pszText = tsz; lvi.state = INDEXTOSTATEIMAGEMASK(fCheck ? 2 : 1); lvi.stateMask = LVIS_STATEIMAGEMASK; lvi.iItem = ListView_GetItemCount(hwnd);
return ListView_InsertItem(hwnd, &lvi); }
/*****************************************************************************
* * Checklist_InitFinish * * Wind up the initialization. * *****************************************************************************/
void EXTERNAL Checklist_InitFinish(HWND hwnd) { RECT rc; LV_COLUMN col; int icol;
/*
* Add the one and only column. */ GetClientRect(hwnd, &rc); col.mask = LVCF_WIDTH; col.cx = 10; icol = ListView_InsertColumn(hwnd, 0, &col);
ListView_SetColumnWidth(hwnd, icol, LVSCW_AUTOSIZE); }
/*****************************************************************************
* * Checklist_OnDestroy * * Clean up a checklist. * *****************************************************************************/
void EXTERNAL Checklist_OnDestroy(HWND hwnd) {
/*
* Don't remove unless it's already there. * This avoids a RIP. */
if (GetProp(hwnd, propReadOnly)) { RemoveProp(hwnd, propReadOnly); } }
/*****************************************************************************
* * Checklist_InitFlags * * Add a bunch of strings corresponding to flag bits. * *****************************************************************************/
void EXTERNAL Checklist_InitFlags(HWND hdlg, int idc, DWORD fl, PCHECKLISTFLAG rgclf, UINT cclf) { HWND hwndList = GetDlgItem(hdlg, idc); UINT iclf;
Checklist_OnInitDialog(hwndList, TRUE); for (iclf = 0; iclf < cclf; iclf++) { Checklist_AddString(hwndList, rgclf[iclf].ids, fl & rgclf[iclf].flMask); } Checklist_InitFinish(hwndList); }
|