static void SetAllContactIcons(MCONTACT hItem, HWND hwndList, CMsnProto* proto) { if (hItem == NULL) hItem = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_ROOT, 0); while (hItem) { MCONTACT hItemN = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXT, (LPARAM)hItem); if (IsHContactGroup(hItem)) { MCONTACT hItemT = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); if (hItemT) SetAllContactIcons(hItemT, hwndList, proto); } else if (IsHContactContact(hItem)) SetContactIcons(hItem, hwndList, proto); hItem = hItemN; } }
INT_PTR CALLBACK DlgProcMsnServLists(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); HIMAGELIST hIml = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK | ILC_COLOR32, 5, 5); HICON hIcon = LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT); ImageList_AddIcon(hIml, hIcon); Skin_ReleaseIcon(hIcon); hIcon = LoadIconEx("list_lc"); ImageList_AddIcon(hIml, hIcon); SendDlgItemMessage(hwndDlg, IDC_ICON_LC, STM_SETICON, (WPARAM)hIcon, 0); hIcon = LoadIconEx("list_fl"); ImageList_AddIcon(hIml, hIcon); SendDlgItemMessage(hwndDlg, IDC_ICON_FL, STM_SETICON, (WPARAM)hIcon, 0); hIcon = LoadIconEx("list_al"); ImageList_AddIcon(hIml, hIcon); SendDlgItemMessage(hwndDlg, IDC_ICON_AL, STM_SETICON, (WPARAM)hIcon, 0); hIcon = LoadIconEx("list_bl"); ImageList_AddIcon(hIml, hIcon); SendDlgItemMessage(hwndDlg, IDC_ICON_BL, STM_SETICON, (WPARAM)hIcon, 0); hIcon = LoadIconEx("list_rl"); ImageList_AddIcon(hIml, hIcon); SendDlgItemMessage(hwndDlg, IDC_ICON_RL, STM_SETICON, (WPARAM)hIcon, 0); HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST); SendMessage(hwndList, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); SendMessage(hwndList, CLM_SETEXTRACOLUMNS, 5, 0); ResetListOptions(hwndList); EnableWindow(hwndList, ((CMsnProto*)lParam)->msnLoggedIn); } return TRUE; // case WM_SETFOCUS: // SetFocus(GetDlgItem(hwndDlg ,IDC_LIST)); // break; case WM_COMMAND: if (LOWORD(wParam) == IDC_LISTREFRESH) { HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST); SendMessage(hwndList, CLM_AUTOREBUILD, 0, 0); CMsnProto* proto = (CMsnProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); EnableWindow(hwndList, proto->msnLoggedIn); } break; case WM_NOTIFY: { CMsnProto* proto = (CMsnProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); NMCLISTCONTROL* nmc = (NMCLISTCONTROL*)lParam; if (nmc->hdr.idFrom == 0 && nmc->hdr.code == (unsigned)PSN_APPLY) { HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST); SaveSettings(NULL, hwndList, proto); SendMessage(hwndList, CLM_AUTOREBUILD, 0, 0); EnableWindow(hwndList, proto->msnLoggedIn); } else if (nmc->hdr.idFrom == IDC_LIST) { switch (nmc->hdr.code) { case CLN_NEWCONTACT: if ((nmc->flags & (CLNF_ISGROUP | CLNF_ISINFO)) == 0) SetContactIcons(nmc->hItem, nmc->hdr.hwndFrom, proto); break; case CLN_LISTREBUILT: AddPrivacyListEntries(nmc->hdr.hwndFrom, proto); SetAllContactIcons(NULL, nmc->hdr.hwndFrom, proto); break; case CLN_OPTIONSCHANGED: ResetListOptions(nmc->hdr.hwndFrom); break; case NM_CLICK: HANDLE hItem; DWORD hitFlags; int iImage; // Make sure we have an extra column, also we can't change RL list if (nmc->iColumn == -1 || nmc->iColumn == 4) break; // Find clicked item hItem = (HANDLE)SendMessage(nmc->hdr.hwndFrom, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nmc->pt.x,nmc->pt.y)); // Nothing was clicked if (hItem == NULL || !(IsHContactContact(hItem) || IsHContactInfo(hItem))) break; // It was not our extended icon if (!(hitFlags & CLCHT_ONITEMEXTRA)) break; // Get image in clicked column (0=none, 1=LL, 2=FL, 3=AL, 4=BL, 5=RL) iImage = SendMessage(nmc->hdr.hwndFrom, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nmc->iColumn, 0)); iImage = iImage ? 0 : nmc->iColumn + 1; SendMessage(nmc->hdr.hwndFrom, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nmc->iColumn, iImage)); if (iImage && SendMessage(nmc->hdr.hwndFrom, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nmc->iColumn ^ 1, 0)) != EMPTY_EXTRA_ICON) if (nmc->iColumn == 2 || nmc->iColumn == 3) SendMessage(nmc->hdr.hwndFrom, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nmc->iColumn ^ 1, 0)); // Activate Apply button SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } } } break; case WM_DESTROY: HIMAGELIST hIml=(HIMAGELIST)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_GETEXTRAIMAGELIST,0,0); ImageList_Destroy(hIml); ReleaseIconEx("list_fl"); ReleaseIconEx("list_al"); ReleaseIconEx("list_bl"); ReleaseIconEx("list_rl"); break; } return FALSE; }