Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygengroupprops.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS User Manager Control Panel 00004 * FILE: dll/cpl/usrmgr/groupprops.c 00005 * PURPOSE: Group property sheet 00006 * 00007 * PROGRAMMERS: Eric Kohl 00008 */ 00009 00010 #include "usrmgr.h" 00011 00012 typedef struct _GENERAL_GROUP_DATA 00013 { 00014 TCHAR szGroupName[1]; 00015 } GENERAL_GROUP_DATA, *PGENERAL_GROUP_DATA; 00016 00017 00018 static VOID 00019 GetTextSid(PSID pSid, 00020 LPTSTR pTextSid) 00021 { 00022 PSID_IDENTIFIER_AUTHORITY psia; 00023 DWORD dwSubAuthorities; 00024 DWORD dwSidRev = SID_REVISION; 00025 DWORD dwCounter; 00026 DWORD dwSidSize; 00027 00028 psia = GetSidIdentifierAuthority(pSid); 00029 00030 dwSubAuthorities = *GetSidSubAuthorityCount(pSid); 00031 00032 dwSidSize = wsprintf(pTextSid, TEXT("S-%lu-"), dwSidRev); 00033 00034 if ((psia->Value[0] != 0) || (psia->Value[1] != 0)) 00035 { 00036 dwSidSize += wsprintf(pTextSid + lstrlen(pTextSid), 00037 TEXT("0x%02hx%02hx%02hx%02hx%02hx%02hx"), 00038 (USHORT)psia->Value[0], 00039 (USHORT)psia->Value[1], 00040 (USHORT)psia->Value[2], 00041 (USHORT)psia->Value[3], 00042 (USHORT)psia->Value[4], 00043 (USHORT)psia->Value[5]); 00044 } 00045 else 00046 { 00047 dwSidSize += wsprintf(pTextSid + lstrlen(pTextSid), 00048 TEXT("%lu"), 00049 (ULONG)(psia->Value[5]) + 00050 (ULONG)(psia->Value[4] << 8) + 00051 (ULONG)(psia->Value[3] << 16) + 00052 (ULONG)(psia->Value[2] << 24)); 00053 } 00054 00055 for (dwCounter = 0 ; dwCounter < dwSubAuthorities ; dwCounter++) 00056 { 00057 dwSidSize += wsprintf(pTextSid + dwSidSize, TEXT("-%lu"), 00058 *GetSidSubAuthority(pSid, dwCounter)); 00059 } 00060 } 00061 00062 00063 static VOID 00064 InitGroupMembersList(HWND hwndDlg, 00065 PGENERAL_GROUP_DATA pGroupData) 00066 { 00067 HWND hwndLV; 00068 LV_COLUMN column; 00069 RECT rect; 00070 TCHAR szStr[32]; 00071 HIMAGELIST hImgList; 00072 HICON hIcon; 00073 00074 NET_API_STATUS netStatus; 00075 PUSER_INFO_20 pUserBuffer; 00076 DWORD entriesread; 00077 DWORD totalentries; 00078 DWORD resume_handle = 0; 00079 DWORD i; 00080 LV_ITEM lvi; 00081 INT iItem; 00082 00083 hwndLV = GetDlgItem(hwndDlg, IDC_USER_ADD_MEMBERSHIP_LIST); 00084 GetClientRect(hwndLV, &rect); 00085 00086 hImgList = ImageList_Create(16,16,ILC_COLOR8 | ILC_MASK,5,5); 00087 hIcon = LoadImage(hApplet,MAKEINTRESOURCE(IDI_GROUP),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); 00088 ImageList_AddIcon(hImgList,hIcon); 00089 DestroyIcon(hIcon); 00090 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); 00091 ImageList_AddIcon(hImgList, hIcon); 00092 DestroyIcon(hIcon); 00093 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_LOCKED_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); 00094 ImageList_AddIcon(hImgList, hIcon); 00095 DestroyIcon(hIcon); 00096 00097 (void)ListView_SetImageList(hwndLV, hImgList, LVSIL_SMALL); 00098 (void)ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_FULLROWSELECT); 00099 00100 memset(&column, 0x00, sizeof(column)); 00101 column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT; 00102 column.fmt = LVCFMT_LEFT; 00103 column.cx = (INT)((rect.right - rect.left) * 0.40); 00104 column.iSubItem = 0; 00105 LoadString(hApplet, IDS_NAME, szStr, sizeof(szStr) / sizeof(szStr[0])); 00106 column.pszText = szStr; 00107 (void)ListView_InsertColumn(hwndLV, 0, &column); 00108 00109 column.cx = (INT)((rect.right - rect.left) * 0.60); 00110 column.iSubItem = 1; 00111 LoadString(hApplet, IDS_DESCRIPTION, szStr, sizeof(szStr) / sizeof(szStr[0])); 00112 column.pszText = szStr; 00113 (void)ListView_InsertColumn(hwndLV, 1, &column); 00114 00115 /* TODO: Enumerate global groups and add them to the list! */ 00116 00117 for (;;) 00118 { 00119 netStatus = NetUserEnum(NULL, 20, FILTER_NORMAL_ACCOUNT, 00120 (LPBYTE*)&pUserBuffer, 00121 1024, &entriesread, 00122 &totalentries, &resume_handle); 00123 if (netStatus != NERR_Success && netStatus != ERROR_MORE_DATA) 00124 break; 00125 00126 for (i = 0; i < entriesread; i++) 00127 { 00128 memset(&lvi, 0x00, sizeof(lvi)); 00129 lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; 00130 lvi.pszText = pUserBuffer[i].usri20_name; 00131 lvi.state = 0; 00132 lvi.iImage = (pUserBuffer[i].usri20_flags & UF_ACCOUNTDISABLE) ? 2 : 1; 00133 iItem = ListView_InsertItem(hwndLV, &lvi); 00134 00135 ListView_SetItemText(hwndLV, iItem, 1, 00136 pUserBuffer[i].usri20_full_name); 00137 00138 ListView_SetItemText(hwndLV, iItem, 2, 00139 pUserBuffer[i].usri20_comment); 00140 } 00141 00142 NetApiBufferFree(pUserBuffer); 00143 00144 /* No more data left */ 00145 if (netStatus != ERROR_MORE_DATA) 00146 break; 00147 } 00148 } 00149 00150 00151 static BOOL 00152 AddSelectedUsersToGroup(HWND hwndDlg, 00153 PGENERAL_GROUP_DATA pGroupData) 00154 { 00155 HWND hwndLV; 00156 INT nSelectedItems; 00157 INT nItem; 00158 TCHAR szUserName[UNLEN]; 00159 BOOL bResult = FALSE; 00160 LOCALGROUP_MEMBERS_INFO_3 memberInfo; 00161 NET_API_STATUS status; 00162 00163 hwndLV = GetDlgItem(hwndDlg, IDC_USER_ADD_MEMBERSHIP_LIST); 00164 00165 nSelectedItems = ListView_GetSelectedCount(hwndLV); 00166 if (nSelectedItems > 0) 00167 { 00168 nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); 00169 while (nItem != -1) 00170 { 00171 /* Get the new user name */ 00172 ListView_GetItemText(hwndLV, 00173 nItem, 0, 00174 szUserName, 00175 UNLEN); 00176 00177 DebugPrintf(_TEXT("Selected user: %s"), szUserName); 00178 00179 memberInfo.lgrmi3_domainandname = szUserName; 00180 00181 status = NetLocalGroupAddMembers(NULL, pGroupData->szGroupName, 3, 00182 (LPBYTE)&memberInfo, 1); 00183 if (status != NERR_Success && status != ERROR_MEMBER_IN_ALIAS) 00184 { 00185 TCHAR szText[256]; 00186 wsprintf(szText, TEXT("Error: %u"), status); 00187 MessageBox(NULL, szText, TEXT("NetLocalGroupAddMembers"), MB_ICONERROR | MB_OK); 00188 } 00189 else 00190 { 00191 bResult = TRUE; 00192 } 00193 00194 nItem = ListView_GetNextItem(hwndLV, nItem, LVNI_SELECTED); 00195 } 00196 } 00197 00198 return bResult; 00199 } 00200 00201 00202 INT_PTR CALLBACK 00203 AddUsersToGroupDlgProc(HWND hwndDlg, 00204 UINT uMsg, 00205 WPARAM wParam, 00206 LPARAM lParam) 00207 { 00208 PGENERAL_GROUP_DATA pGroupData; 00209 00210 UNREFERENCED_PARAMETER(wParam); 00211 00212 pGroupData = (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00213 00214 switch (uMsg) 00215 { 00216 case WM_INITDIALOG: 00217 pGroupData = (PGENERAL_GROUP_DATA)lParam; 00218 SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData); 00219 InitGroupMembersList(hwndDlg, pGroupData); 00220 break; 00221 00222 case WM_COMMAND: 00223 switch (LOWORD(wParam)) 00224 { 00225 case IDOK: 00226 if (AddSelectedUsersToGroup(hwndDlg, pGroupData)) 00227 EndDialog(hwndDlg, IDOK); 00228 else 00229 EndDialog(hwndDlg, IDCANCEL); 00230 break; 00231 00232 case IDCANCEL: 00233 EndDialog(hwndDlg, IDCANCEL); 00234 break; 00235 } 00236 break; 00237 00238 default: 00239 return FALSE; 00240 } 00241 00242 return TRUE; 00243 } 00244 00245 00246 static VOID 00247 AddUsersToGroup(HWND hwndDlg, 00248 PGENERAL_GROUP_DATA pGroupData) 00249 { 00250 HWND hwndLV; 00251 // NET_API_STATUS status; 00252 PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL; 00253 DWORD dwRead; 00254 DWORD dwTotal; 00255 DWORD_PTR resumeHandle = 0; 00256 DWORD i; 00257 LV_ITEM lvi; 00258 TCHAR szGroupName[256]; 00259 00260 if (DialogBoxParam(hApplet, 00261 MAKEINTRESOURCE(IDD_USER_ADD_MEMBERSHIP), 00262 hwndDlg, 00263 AddUsersToGroupDlgProc, 00264 (LPARAM)pGroupData) == IDOK) 00265 { 00266 hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS); 00267 00268 (void)ListView_DeleteAllItems(hwndLV); 00269 00270 // DebugPrintf(_T("Removed all users from the list!")); 00271 00272 /* Set group members */ 00273 NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo, 00274 MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, 00275 &resumeHandle); 00276 00277 for (i = 0; i < dwRead; i++) 00278 { 00279 ZeroMemory(&lvi, sizeof(lvi)); 00280 lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; 00281 lvi.pszText = membersInfo[i].lgrmi1_name; 00282 lvi.state = 0; 00283 lvi.iImage = (membersInfo[i].lgrmi1_sidusage == SidTypeGroup || 00284 membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) ? 1 : 0; 00285 00286 if (membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) 00287 { 00288 TCHAR szSid[256]; 00289 00290 GetTextSid(membersInfo[i].lgrmi1_sid, szSid); 00291 00292 wsprintf(szGroupName, 00293 TEXT("%s (%s)"), 00294 membersInfo[i].lgrmi1_name, 00295 szSid); 00296 00297 lvi.pszText = szGroupName; 00298 } 00299 00300 00301 (void)ListView_InsertItem(hwndLV, &lvi); 00302 } 00303 00304 NetApiBufferFree(membersInfo); 00305 } 00306 } 00307 00308 00309 static VOID 00310 RemoveUserFromGroup(HWND hwndDlg, 00311 PGENERAL_GROUP_DATA pGroupData) 00312 { 00313 TCHAR szUserName[UNLEN]; 00314 TCHAR szText[256]; 00315 LOCALGROUP_MEMBERS_INFO_3 memberInfo; 00316 HWND hwndLV; 00317 INT nItem; 00318 NET_API_STATUS status; 00319 00320 hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS); 00321 nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); 00322 if (nItem == -1) 00323 return; 00324 00325 /* Get the new user name */ 00326 ListView_GetItemText(hwndLV, 00327 nItem, 0, 00328 szUserName, 00329 UNLEN); 00330 00331 /* Display a warning message because the remove operation cannot be reverted */ 00332 wsprintf(szText, TEXT("Do you really want to remove the user \"%s\" from the group \"%s\"?"), 00333 szUserName, pGroupData->szGroupName); 00334 if (MessageBox(NULL, szText, TEXT("User Accounts"), MB_ICONWARNING | MB_YESNO) == IDNO) 00335 return; 00336 00337 memberInfo.lgrmi3_domainandname = szUserName; 00338 00339 status = NetLocalGroupDelMembers(NULL, pGroupData->szGroupName, 00340 3, (LPBYTE)&memberInfo, 1); 00341 if (status != NERR_Success) 00342 { 00343 TCHAR szText[256]; 00344 wsprintf(szText, TEXT("Error: %u"), status); 00345 MessageBox(NULL, szText, TEXT("NetLocalGroupDelMembers"), MB_ICONERROR | MB_OK); 00346 return; 00347 } 00348 00349 (void)ListView_DeleteItem(hwndLV, nItem); 00350 00351 if (ListView_GetItemCount(hwndLV) == 0) 00352 EnableWindow(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_REMOVE), FALSE); 00353 } 00354 00355 00356 static BOOL 00357 OnNotify(HWND hwndDlg, 00358 PGENERAL_GROUP_DATA pGroupData, 00359 LPARAM lParam) 00360 { 00361 LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam; 00362 00363 switch (((LPNMHDR)lParam)->idFrom) 00364 { 00365 case IDC_GROUP_GENERAL_MEMBERS: 00366 switch (((LPNMHDR)lParam)->code) 00367 { 00368 case NM_CLICK: 00369 EnableWindow(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_REMOVE), (lpnmlv->iItem != -1)); 00370 break; 00371 00372 case LVN_KEYDOWN: 00373 if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE) 00374 { 00375 RemoveUserFromGroup(hwndDlg, pGroupData); 00376 } 00377 break; 00378 00379 } 00380 break; 00381 } 00382 00383 return FALSE; 00384 } 00385 00386 00387 static VOID 00388 GetGeneralGroupData(HWND hwndDlg, 00389 PGENERAL_GROUP_DATA pGroupData) 00390 { 00391 PLOCALGROUP_INFO_1 groupInfo = NULL; 00392 PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL; 00393 DWORD dwRead; 00394 DWORD dwTotal; 00395 DWORD_PTR resumeHandle = 0; 00396 DWORD i; 00397 LV_ITEM lvi; 00398 HWND hwndLV; 00399 LV_COLUMN column; 00400 RECT rect; 00401 HIMAGELIST hImgList; 00402 HICON hIcon; 00403 TCHAR szGroupName[256]; 00404 00405 00406 hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS); 00407 00408 /* Create the image list */ 00409 hImgList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 5, 5); 00410 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_GROUP), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); 00411 ImageList_AddIcon(hImgList, hIcon); 00412 DestroyIcon(hIcon); 00413 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); 00414 ImageList_AddIcon(hImgList, hIcon); 00415 DestroyIcon(hIcon); 00416 00417 (void)ListView_SetImageList(hwndLV, hImgList, LVSIL_SMALL); 00418 00419 /* Set the list column */ 00420 GetClientRect(hwndLV, &rect); 00421 00422 memset(&column, 0x00, sizeof(column)); 00423 column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM; 00424 column.fmt = LVCFMT_LEFT; 00425 column.cx = (INT)(rect.right - rect.left); 00426 column.iSubItem = 0; 00427 (void)ListView_InsertColumn(hwndLV, 0, &column); 00428 00429 /* Set group name */ 00430 SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, pGroupData->szGroupName); 00431 00432 /* Set group description */ 00433 NetLocalGroupGetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&groupInfo); 00434 SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment); 00435 NetApiBufferFree(groupInfo); 00436 00437 /* Set group members */ 00438 NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo, 00439 MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, 00440 &resumeHandle); 00441 00442 for (i = 0; i < dwRead; i++) 00443 { 00444 ZeroMemory(&lvi, sizeof(lvi)); 00445 lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; 00446 lvi.pszText = membersInfo[i].lgrmi1_name; 00447 lvi.state = 0; 00448 if (membersInfo[i].lgrmi1_sidusage == SidTypeGroup || 00449 membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) 00450 { 00451 lvi.iImage = 0; 00452 } 00453 else if (membersInfo[i].lgrmi1_sidusage == SidTypeUser) 00454 { 00455 /* FIXME: handle locked user properly! */ 00456 lvi.iImage = 1; 00457 } 00458 00459 if (membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) 00460 { 00461 TCHAR szSid[256]; 00462 00463 GetTextSid(membersInfo[i].lgrmi1_sid, szSid); 00464 00465 wsprintf(szGroupName, 00466 TEXT("%s (%s)"), 00467 membersInfo[i].lgrmi1_name, 00468 szSid); 00469 00470 lvi.pszText = szGroupName; 00471 } 00472 00473 (void)ListView_InsertItem(hwndLV, &lvi); 00474 } 00475 00476 NetApiBufferFree(membersInfo); 00477 } 00478 00479 00480 static BOOL 00481 SetGeneralGroupData(HWND hwndDlg, 00482 PGENERAL_GROUP_DATA pGroupData) 00483 { 00484 LOCALGROUP_INFO_1 groupInfo; 00485 LPTSTR pszComment = NULL; 00486 INT nLength; 00487 NET_API_STATUS status; 00488 DWORD dwIndex; 00489 00490 /* Get the group description */ 00491 nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION)); 00492 if (nLength == 0) 00493 { 00494 groupInfo.lgrpi1_comment = NULL; 00495 } 00496 else 00497 { 00498 pszComment = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR)); 00499 GetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, pszComment, nLength + 1); 00500 groupInfo.lgrpi1_comment = pszComment; 00501 } 00502 00503 status = NetLocalGroupSetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE)&groupInfo, &dwIndex); 00504 if (status != NERR_Success) 00505 { 00506 DebugPrintf(_T("Status: %lu Index: %lu"), status, dwIndex); 00507 } 00508 00509 if (pszComment) 00510 HeapFree(GetProcessHeap(), 0, pszComment); 00511 00512 return TRUE; 00513 } 00514 00515 00516 INT_PTR CALLBACK 00517 GroupGeneralPageProc(HWND hwndDlg, 00518 UINT uMsg, 00519 WPARAM wParam, 00520 LPARAM lParam) 00521 { 00522 PGENERAL_GROUP_DATA pGroupData; 00523 00524 UNREFERENCED_PARAMETER(lParam); 00525 UNREFERENCED_PARAMETER(wParam); 00526 UNREFERENCED_PARAMETER(hwndDlg); 00527 00528 pGroupData= (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00529 00530 switch (uMsg) 00531 { 00532 case WM_INITDIALOG: 00533 pGroupData = (PGENERAL_GROUP_DATA)HeapAlloc(GetProcessHeap(), 00534 HEAP_ZERO_MEMORY, 00535 sizeof(GENERAL_GROUP_DATA) + 00536 lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR)); 00537 lstrcpy(pGroupData->szGroupName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam); 00538 00539 SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData); 00540 00541 GetGeneralGroupData(hwndDlg, 00542 pGroupData); 00543 break; 00544 00545 case WM_COMMAND: 00546 switch (LOWORD(wParam)) 00547 { 00548 case IDC_GROUP_GENERAL_DESCRIPTION: 00549 if (HIWORD(wParam) == EN_CHANGE) 00550 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00551 break; 00552 00553 case IDC_GROUP_GENERAL_ADD: 00554 AddUsersToGroup(hwndDlg, pGroupData); 00555 break; 00556 00557 case IDC_GROUP_GENERAL_REMOVE: 00558 RemoveUserFromGroup(hwndDlg, pGroupData); 00559 break; 00560 } 00561 break; 00562 00563 case WM_NOTIFY: 00564 if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY) 00565 { 00566 SetGeneralGroupData(hwndDlg, pGroupData); 00567 return TRUE; 00568 } 00569 else 00570 { 00571 return OnNotify(hwndDlg, pGroupData, lParam); 00572 } 00573 break; 00574 00575 case WM_DESTROY: 00576 HeapFree(GetProcessHeap(), 0, pGroupData); 00577 break; 00578 } 00579 00580 return FALSE; 00581 } 00582 00583 00584 static VOID 00585 InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LPTSTR pszGroup) 00586 { 00587 ZeroMemory(psp, sizeof(PROPSHEETPAGE)); 00588 psp->dwSize = sizeof(PROPSHEETPAGE); 00589 psp->dwFlags = PSP_DEFAULT; 00590 psp->hInstance = hApplet; 00591 psp->pszTemplate = MAKEINTRESOURCE(idDlg); 00592 psp->pfnDlgProc = DlgProc; 00593 psp->lParam = (LPARAM)pszGroup; 00594 } 00595 00596 00597 BOOL 00598 GroupProperties(HWND hwndDlg) 00599 { 00600 PROPSHEETPAGE psp[1]; 00601 PROPSHEETHEADER psh; 00602 TCHAR szGroupName[UNLEN]; 00603 INT nItem; 00604 HWND hwndLV; 00605 00606 hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST); 00607 nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); 00608 if (nItem == -1) 00609 return FALSE; 00610 00611 /* Get the new user name */ 00612 ListView_GetItemText(hwndLV, 00613 nItem, 0, 00614 szGroupName, 00615 UNLEN); 00616 00617 ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); 00618 psh.dwSize = sizeof(PROPSHEETHEADER); 00619 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE; 00620 psh.hwndParent = hwndDlg; 00621 psh.hInstance = hApplet; 00622 psh.hIcon = NULL; 00623 psh.pszCaption = szGroupName; 00624 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); 00625 psh.nStartPage = 0; 00626 psh.ppsp = psp; 00627 00628 InitPropSheetPage(&psp[0], IDD_GROUP_GENERAL, (DLGPROC)GroupGeneralPageProc, szGroupName); 00629 00630 return (PropertySheet(&psh) == IDOK); 00631 } Generated on Sat May 26 2012 04:19:48 for ReactOS by
1.7.6.1
|