// test listview control for broken rendering #include "headers.hxx" #include "resource.h" HINSTANCE hResourceModuleHandle = 0; const wchar_t* HELPFILE_NAME = 0; // no context help available const wchar_t* RUNTIME_NAME = L"listtest"; DWORD DEFAULT_LOGGING_OPTIONS = Log::OUTPUT_TYPICAL; void AddIconImage(HIMAGELIST imageList, int iconResID) { LOG_FUNCTION(AddIconImage); ASSERT(imageList); ASSERT(iconResID); if (iconResID && imageList) { HICON icon = 0; HRESULT hr = Win::LoadImage(iconResID, icon); ASSERT(SUCCEEDED(hr)); if (SUCCEEDED(hr)) { Win::ImageList_AddIcon(imageList, icon); // once the icon is added (copied) to the image list, we can // destroy the original. Win::DestroyIcon(icon); } } } static const DWORD HELP_MAP[] = { 0, 0 }; class ListViewDialog : public Dialog { public: ListViewDialog() : Dialog(IDD_LOOK_FOR, HELP_MAP) { } ~ListViewDialog() { } protected: // Dialog overrides virtual void OnInit() { HWND listview = Win::GetDlgItem(hwnd, IDC_LOOK_FOR_LV); // // put listview in checkbox style // ListView_SetExtendedListViewStyleEx( listview, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); //ImageList_Create(16, 16, ILC_COLOR16 | ILC_MASK, 1, 1); HIMAGELIST images = Win::ImageList_Create( 16, // Win::GetSystemMetrics(SM_CXSMICON), 16, // Win::GetSystemMetrics(SM_CYSMICON), ILC_MASK, 1, 1); // the order in which these are added must be the same that the // MemberInfo::Type enum values are listed! AddIconImage(images, IDI_SCOPE_WORKGROUP); AddIconImage(images, IDI_LOCAL_GROUP); AddIconImage(images, IDI_SCOPE_DIRECTORY); AddIconImage(images, IDI_SCOPE_DOMAIN); AddIconImage(images, IDI_DISABLED_USER); AddIconImage(images, IDI_DISABLED_COMPUTER); Win::ListView_SetImageList(listview, images, LVSIL_SMALL); // // Add a single column to the listview // LV_COLUMN lvc; RECT rcLv; GetClientRect(listview, &rcLv); ZeroMemory(&lvc, sizeof lvc); lvc.mask = LVCF_FMT | LVCF_WIDTH; lvc.fmt = LVCFMT_LEFT; lvc.cx = rcLv.right; Win::ListView_InsertColumn(listview, 0, lvc); static PCWSTR itemLabels[] = { L"workgroup", L"Group", L"Directory", L"Domain", L"User", L"Computer", 0 }; LVITEM lvi; int i = 0; PCWSTR* labels = itemLabels; while (*labels) { ZeroMemory(&lvi, sizeof lvi); lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; lvi.pszText = const_cast(*labels); lvi.iImage = i; ++labels; ++i; Win::ListView_InsertItem(listview, lvi); }; // // Make the first item in the listview have the focus // ListView_SetItemState( listview, 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); } private: ListViewDialog(const ListViewDialog&); const ListViewDialog& operator=(const ListViewDialog&); }; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE /* hPrevInstance */ , PSTR /* lpszCmdLine */ , int /* nCmdShow */) { hResourceModuleHandle = hInstance; int exitCode = 0; INITCOMMONCONTROLSEX s_e_x; s_e_x.dwSize = sizeof(s_e_x); s_e_x.dwICC = ICC_ANIMATE_CLASS | ICC_USEREX_CLASSES; BOOL init = ::InitCommonControlsEx(&s_e_x); ASSERT(init); ListViewDialog().ModalExecute(Win::GetDesktopWindow()); return exitCode; }