virtual int GetRowCount() const = 0;
virtual String GetColumnName(int col) const = 0;
virtual String GetItemText(int row, int col) const = 0;
+ virtual void *GetItemData(int row) const = 0;
virtual int GetBackColor(int row) const = 0;
+ virtual bool IsSelectedItem(int sel) const = 0;
+ virtual int GetNextItem(int sel, bool selected = false, bool reverse = false) const = 0;
+ virtual int GetNextSelectedItem(int sel, bool reverse = false) const = 0;
+ virtual unsigned GetSelectedCount() const = 0;
+ virtual int GetIndent(int row) const = 0;
+ virtual int GetIconIndex(int row) const = 0;
+ virtual int GetIconCount() const = 0;
+ virtual std::string GetIconPNGData(int iconIndex) const = 0;
};
#endif
return nmlvcd.clrTextBk;
}
-
+ bool IsSelectedItem(int sel) const
+ {
+ return !!ListView_GetItemState(m_hwndListCtrl, sel, LVIS_SELECTED);
+ }
+
+ int GetNextItem(int sel, bool selected = false, bool reverse = false) const
+ {
+ return ListView_GetNextItem(m_hwndListCtrl, sel, (selected ? LVNI_SELECTED : 0) | (reverse ? LVNI_ABOVE : 0));
+ }
+
+ int GetNextSelectedItem(int sel, bool reverse = false) const
+ {
+ return ListView_GetNextItem(m_hwndListCtrl, sel, LVNI_SELECTED | (reverse ? LVNI_ABOVE : 0));
+ }
+
+ unsigned GetSelectedCount() const
+ {
+ return ListView_GetSelectedCount(m_hwndListCtrl);
+ }
+
+ int GetIndent(int row) const
+ {
+ LVITEM item = {0};
+ item.mask = LVIF_INDENT;
+ item.iItem = row;
+ ListView_GetItem(m_hwndListCtrl, &item);
+ return item.iIndent;
+ }
+
+ int GetIconIndex(int row) const
+ {
+ LVITEM item = {0};
+ item.mask = LVIF_IMAGE;
+ item.iItem = row;
+ ListView_GetItem(m_hwndListCtrl, &item);
+ return item.iImage;
+ }
+
+ int GetIconCount() const
+ {
+ HIMAGELIST hImageList = ListView_GetImageList(m_hwndListCtrl, LVSIL_SMALL);
+ return ImageList_GetImageCount(hImageList);
+ }
+
+ std::string GetIconPNGData(int iconIndex) const
+ {
+ HIMAGELIST hImageList = ListView_GetImageList(m_hwndListCtrl, LVSIL_SMALL);
+ IMAGEINFO imageInfo = {0};
+ LARGE_INTEGER li = {0};
+ IStream *pStream = NULL;
+ CImage image;
+
+ ImageList_GetImageInfo(hImageList, iconIndex, &imageInfo);
+ int w = imageInfo.rcImage.right - imageInfo.rcImage.left;
+ int h = imageInfo.rcImage.bottom - imageInfo.rcImage.top;
+ CreateStreamOnHGlobal(NULL, TRUE, &pStream);
+ HDC hdcMem = CreateCompatibleDC(NULL);
+ BITMAPINFO bmpinfo = {0};
+ bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ bmpinfo.bmiHeader.biWidth = w;
+ bmpinfo.bmiHeader.biHeight = h;
+ bmpinfo.bmiHeader.biPlanes = 1;
+ bmpinfo.bmiHeader.biBitCount = 32;
+ bmpinfo.bmiHeader.biCompression = BI_RGB;
+ HBITMAP hbmpImage = CreateDIBSection( NULL, &bmpinfo, DIB_RGB_COLORS, NULL, NULL, NULL);
+ HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcMem, hbmpImage);
+ ImageList_Draw(hImageList, iconIndex, hdcMem, 0, 0, ILD_TRANSPARENT);
+ image.Attach(hbmpImage);
+ #if _MSC_VER >= 1400
+ image.SetHasAlphaChannel(true);
+ #endif
+ image.Save(pStream, Gdiplus::ImageFormatPNG);
+ STATSTG stat;
+ pStream->Stat(&stat, STATFLAG_NONAME);
+ std::string ret(stat.cbSize.LowPart, 0);
+ pStream->Seek(li, STREAM_SEEK_SET, NULL);
+ pStream->Read(&ret[0], stat.cbSize.LowPart, NULL);
+ pStream->Release();
+
+ SelectObject(hdcMem, hbmpOld);
+ DeleteObject(hdcMem);
+ DeleteObject(hbmpImage);
+ return ret;
+ }
++\r
protected:
HWND m_hwndListCtrl;
};