|
|
//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1993 **
//*********************************************************************
#include "admincfg.h"
HGLOBAL AllocateUser(TCHAR * szName,DWORD dwType); HGLOBAL hClipboardUser = NULL;
BOOL OnCopy(HWND hwndApp,HWND hwndList) { int iSel; HGLOBAL hUser; USERDATA * pUserData; DWORD dwType;
// make sure we can copy... shouldn't get called otherwise, but safety first
if (!CanCopy(hwndList)) return FALSE;
iSel = ListView_GetNextItem(hwndList,-1,LVNI_SELECTED); if (iSel < 0) return FALSE;
hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,iSel));
if (!hUser || !(pUserData = (USERDATA *) GlobalLock(hUser))) return FALSE; dwType = (pUserData->hdr.dwType & UT_MASK); GlobalUnlock(hUser);
// free clipboard user if already allocated
if (hClipboardUser) { GlobalFree(hClipboardUser); hClipboardUser = NULL; }
// allocate a clipboard user handle
hClipboardUser = AllocateUser(TEXT(""),dwType); if (!hClipboardUser) { MsgBox(hwndApp,IDS_ErrOUTOFMEMORY,MB_ICONEXCLAMATION,MB_OK); return FALSE; }
if (!CopyUser(hUser,hClipboardUser)) { MsgBox(hwndApp,IDS_ErrOUTOFMEMORY,MB_ICONEXCLAMATION,MB_OK); return FALSE; }
EnableMenuItems(hwndApp,dwAppState);
return TRUE; }
BOOL OnPaste(HWND hwndApp,HWND hwndList) { int iItem = -1,iSelItem; DWORD dwClipboardUserType; HGLOBAL hUser; UINT nSelItems=0;
// make sure we can paste... shouldn't get called otherwise, but safety first
if (!CanPaste(hwndList)) return FALSE;
// find out how many items are selected
while ((iItem=ListView_GetNextItem(hwndList,iItem,LVNI_SELECTED)) >=0) { iSelItem = iItem; nSelItems++; } dwClipboardUserType = GetClipboardUserType();
// display appropriate confirmation message depending on whether 1 user,
// 1 computer, or multiple items selected
if (nSelItems == 1) { HGLOBAL hUser; USERDATA *pUserData; UINT uMsg; int nRet; if (!(hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,iSelItem))) || !(pUserData = (USERDATA *) GlobalLock(hUser))) return FALSE;
uMsg = pUserData->hdr.dwType & UT_USER ? IDS_QUERYPASTE_USER : IDS_QUERYPASTE_WORKSTA; nRet=MsgBoxParam(hwndApp,uMsg,pUserData->hdr.szName,MB_ICONQUESTION, MB_YESNO);
GlobalUnlock(hUser);
if (nRet != IDYES) return FALSE; } else { if (MsgBox(hwndApp,IDS_QUERYPASTE_MULTIPLE,MB_ICONQUESTION,MB_YESNO) != IDYES) return FALSE; }
iItem = -1; while ((iItem=ListView_GetNextItem(hwndList,iItem,LVNI_SELECTED)) > -1) { if ((hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,iItem)))) { if (!CopyUser(hClipboardUser,hUser)) { MsgBox(hwndApp,IDS_ErrOUTOFMEMORY,MB_ICONEXCLAMATION,MB_OK); return FALSE; } } }
return TRUE; }
// returns the type of user (user or computer) pasted to the "clipboard"
UINT GetClipboardUserType(VOID) { USERDATA * pUserData; DWORD dwType;
if (!hClipboardUser || !(pUserData = (USERDATA *) GlobalLock(hClipboardUser))) return 0;
dwType = (pUserData->hdr.dwType & UT_MASK); GlobalUnlock(hClipboardUser);
return dwType; }
// returns TRUE if the copy menu item should be enabled. This will
// happen if in policy file mode and exactly one item selected in listview
BOOL CanCopy(HWND hwndList) { int iItem=-1; UINT nCount = 0; if (dwAppState & AS_POLICYFILE) { while ((iItem=ListView_GetNextItem(hwndList,iItem,LVNI_SELECTED)) > -1) nCount ++; }
return (nCount == 1); }
// returns TRUE if the paste menu item should be enabled. This will happen
// if in policy file mode, have a user on the clipboard, there is at least one
// selected item and all the selected items are the same type (user or computer)
// as the item on the clipboard
BOOL CanPaste(HWND hwndList) { int iItem = -1; DWORD dwClipboardUserType; UINT nCount = 0; HGLOBAL hUser; USERDATA * pUserData; BOOL fMatch;
if (!(dwAppState & AS_POLICYFILE) || !(hClipboardUser)) return FALSE;
dwClipboardUserType = GetClipboardUserType(); while ((iItem=ListView_GetNextItem(hwndList,iItem,LVNI_SELECTED)) > -1) { nCount ++; if ((hUser = (HGLOBAL) LongToHandle(ListView_GetItemParm(hwndList,iItem)))) { if (!(pUserData = (USERDATA *) GlobalLock(hUser))) return FALSE;
// is this user the same type as the one on the clipboard?
fMatch = (pUserData->hdr.dwType & dwClipboardUserType); GlobalUnlock(hUser);
if (!fMatch) return FALSE; } }
if (!nCount) return FALSE;
return TRUE; }
|