189 lines
4.6 KiB
C
189 lines
4.6 KiB
C
//*********************************************************************
|
|
//* Microsoft Windows **
|
|
//* Copyright(c) Microsoft Corp., 1993 **
|
|
//*********************************************************************
|
|
|
|
#include "admincfg.h"
|
|
|
|
BOOL OnSelection(HWND hwndParent,HWND hwndList,NM_LISTVIEW *pnlv);
|
|
BOOL OnDoubleClick(HWND hwndParent,HWND hwndList);
|
|
extern HIMAGELIST hImageListSmall,hImageListLarge;
|
|
|
|
BOOL OnListNotify(HWND hwndParent,HWND hwndList,NM_LISTVIEW *pnlv)
|
|
{
|
|
switch (pnlv->hdr.code) {
|
|
|
|
case LVN_ITEMCHANGED:
|
|
|
|
return OnSelection(hwndParent,hwndList,pnlv);
|
|
|
|
return FALSE;
|
|
break;
|
|
|
|
case LVN_KEYDOWN:
|
|
|
|
switch (((LV_KEYDOWN *) pnlv)->wVKey) {
|
|
case VK_RETURN:
|
|
OnProperties(hwndParent,hwndList);
|
|
return FALSE;
|
|
break;
|
|
|
|
case VK_DELETE:
|
|
if ((dwAppState & AS_CANREMOVE) &&
|
|
(dwAppState & AS_POLICYFILE))
|
|
OnRemove(hwndParent,hwndList);
|
|
return FALSE;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case NM_DBLCLK:
|
|
|
|
OnDoubleClick(hwndParent,hwndList);
|
|
|
|
return FALSE;
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL OnDoubleClick(HWND hwndParent,HWND hwndList)
|
|
{
|
|
HGLOBAL hUser;
|
|
LV_HITTESTINFO ht;
|
|
|
|
GetCursorPos(&ht.pt);
|
|
ScreenToClient(hwndList,&ht.pt);
|
|
|
|
if (ListView_HitTest(hwndList,&ht)<0) return FALSE;
|
|
|
|
if (!(hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,ht.iItem))))
|
|
return FALSE;
|
|
|
|
DoPolicyDlg(hwndParent,hUser);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL OnProperties(HWND hwndParent,HWND hwndList)
|
|
{
|
|
HGLOBAL hUser;
|
|
int iItem;
|
|
|
|
iItem = ListView_GetNextItem(hwndList,-1,LVNI_SELECTED);
|
|
if (iItem<0)
|
|
return FALSE;
|
|
|
|
if (!(hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,iItem))))
|
|
return FALSE;
|
|
|
|
DoPolicyDlg(hwndParent,hUser);
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CreateListControl
|
|
|
|
SYNOPSIS: Creates list control for main window
|
|
|
|
********************************************************************/
|
|
HWND CreateListControl(HWND hWnd)
|
|
{
|
|
HWND hwndList;
|
|
LV_COLUMN lvc;
|
|
int iRet;
|
|
|
|
if (!(hwndList = CreateWindowEx(WS_EX_CLIENTEDGE,
|
|
szLISTVIEW,szNull,WS_CHILD | WS_VISIBLE | LVS_REPORT |
|
|
LVS_SORTASCENDING | LVS_SHAREIMAGELISTS,
|
|
0,0,0,0,hWnd,NULL,ghInst,NULL)))
|
|
return NULL;
|
|
|
|
lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
lvc.cx = 150;
|
|
lvc.pszText = LoadSz(IDS_COLUMNTITLE,szSmallBuf,ARRAYSIZE(szSmallBuf));
|
|
lvc.cchTextMax = lstrlen(lvc.pszText) + 1;
|
|
lvc.iSubItem = 0;
|
|
iRet=ListView_InsertColumn(hwndList,0,&lvc);
|
|
|
|
ListView_SetImageList(hwndList,hImageListSmall,LVSIL_SMALL);
|
|
ListView_SetImageList(hwndList,hImageListLarge,LVSIL_NORMAL);
|
|
|
|
return hwndList;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: DestroyListControl
|
|
|
|
SYNOPSIS: Destroys main window list control
|
|
|
|
********************************************************************/
|
|
VOID DestroyListControl(HWND hwndList)
|
|
{
|
|
if (hwndList) {
|
|
DestroyWindow(hwndList);
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: UpdateListControlPlacement
|
|
|
|
SYNOPSIS: Fits list control to fill client area in app window,
|
|
making room for toolbar/status bar as appropriate
|
|
|
|
NOTES: Called in response to WM_SIZE
|
|
|
|
********************************************************************/
|
|
VOID UpdateListControlPlacement(HWND hwndApp,HWND hwndList)
|
|
{
|
|
RECT rcClient;
|
|
UINT yHeight,yStart=0;
|
|
// LV_COLUMN lvc;
|
|
|
|
if (!hwndList) return;
|
|
|
|
GetClientRect(hwndApp,&rcClient);
|
|
yHeight = rcClient.bottom-rcClient.top;
|
|
|
|
if (ViewInfo.fToolbar) {
|
|
yStart = ViewInfo.dyToolbar + 1;
|
|
yHeight -= (ViewInfo.dyToolbar + 1);
|
|
}
|
|
if (ViewInfo.fStatusBar) {
|
|
yHeight -= (ViewInfo.dyStatusBar + 1);
|
|
}
|
|
|
|
SetWindowPos(hwndList,NULL,0,yStart,rcClient.right,
|
|
yHeight,SWP_NOZORDER);
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: OnSelection
|
|
|
|
SYNOPSIS: Selection notification handler for list control in
|
|
app window
|
|
|
|
********************************************************************/
|
|
BOOL OnSelection(HWND hwndParent,HWND hwndList,NM_LISTVIEW *pnlv)
|
|
{
|
|
// if item is selected, make sure "remove" menu item is enabled
|
|
if ((pnlv->uNewState & TVIS_SELECTED))
|
|
dwAppState |= AS_CANREMOVE;
|
|
else dwAppState &= ~AS_CANREMOVE;
|
|
|
|
// reenable menu items on every selection change, because copy/paste
|
|
// menu items depend on how many & which items are selected
|
|
EnableMenuItems(hwndParent,dwAppState);
|
|
|
|
return FALSE;
|
|
}
|