/*
* ListView.h
* Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
// 2000.02.18
// 2008/07/28
// 2010/04/12 Modified getSelectedItemText method.
#pragma once
#include <sol\Primitive.h>
#include <sol\StringList.h>
#include <sol\ImageList.h>
#include <sol\IntegerList.h>
#include <sol\Stdio.h>
#include <sol/StringT.h>
namespace SOL {
//2008/07/28
typedef struct {
const TCHAR* label;
int format;
int size;
} ListViewColumn;
class ListView :public Primitive {
private:
static const long STYLE = (WS_TABSTOP|WS_BORDER|WS_HSCROLL);
public:
ListView(): Primitive() { }
public:
ListView(View* parent, HWND hwnd)
:Primitive(parent, hwnd) { }
public:
ListView(View* parent, const TCHAR* name, Args& args)
:Primitive(parent, name,
args.set(XmNpredefined, TRUE)
.set(XmNstyle, (ulong)STYLE)
.set(XmNclassName, (ulong)WC_LISTVIEW))
{
setValues(args);
}
public:
Boolean create(View* parent, const TCHAR* name, Args& args)
{
Boolean rc = Primitive::create(parent, name,
args.set(XmNpredefined, TRUE)
.set(XmNstyle, (ulong)STYLE)
.set(XmNclassName, (ulong)WC_LISTVIEW));
setValues(args);
return rc;
}
public:
Arg* getCallbackTable(int* num)
{
static Arg table[] = {
{XmNitemChangingCallback, LVN_ITEMCHANGING},
{XmNitemChangedCallback, LVN_ITEMCHANGED},
{XmNinsertItemCallback, LVN_INSERTITEM},
{XmNdeleteItemCallback, LVN_DELETEITEM},
{XmNdeleteAllItemsCallback, LVN_DELETEALLITEMS},
{XmNbeginLabelEditCallback, LVN_BEGINLABELEDIT},
{XmNenableEditCallback, LVN_ENDLABELEDIT},
{XmNcolumnClickCallback, LVN_COLUMNCLICK},
{XmNbeginDragCallback, LVN_BEGINDRAG},
{XmNbeginRDragCallback, LVN_BEGINRDRAG},
{XmNgetDispInfoCallback, LVN_GETDISPINFO},
{XmNsetDispInfoCallback, LVN_SETDISPINFO},
{XmNkeyDownCallback, LVN_KEYDOWN},
};
*num = XtNumber(table);
return table;
}
public:
void setColumn(StringList* list, int fmt = LVCFMT_LEFT)
{
if (list ==NULL) {
return;
}
int num = list->getLength();
if (num == 0) {
return;
}
LV_COLUMN column;
memset(&column, 0, sizeof(LV_COLUMN));
column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
column.fmt = fmt;
column.cx = 100;
int i = 0;
ClientDC cdc(this);
int width = 0;
int height = 0;
getClientSize(width, height);
int avwidth = width/num;
Printf(_T("ListView#setColumn,num=%d width=%d av=%d\r\n"), num, width, avwidth);
ListEntry* ptr = list->getEntry();
while(ptr) {
String* string = (String*)(ptr->getObject());
TCHAR* str = string->getContents();
column.pszText = str;
//2000.04.22
SIZE size;
cdc.getTextExtent(str, strlen(str), &size);
//2008/07/02
if (avwidth ==0) {
column.cx = size.cx+10;
} else {
column.cx = avwidth;
}
insertColumn(i++, &column);
ptr = ptr ->getNext();
}
}
public:
void setColumn(StringList* list, IntegerList* format)
{
if (list == NULL || format == NULL) {
return;
}
int lnum = list->getLength();
int fnum = format->getLength();
if (lnum == 0 || fnum == 0) {
return;
}
if (lnum != fnum) {
return;
}
int width = 0;
int height = 0;
getClientSize(width, height);
int avwidth = width/lnum;
LV_COLUMN column;
memset(&column, 0, sizeof(LV_COLUMN));
column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
column.cx = 100;
int i = 0;
ClientDC cdc(this);
ListEntry* ptr = list->getEntry();
ListEntry* itr = format-> getEntry();
while (ptr) {
String* string = (String*) (ptr -> getObject());
Integer* integer = (Integer*)(itr -> getObject());
TCHAR* str = string->getContents();
column.pszText = str;
column.fmt = integer -> getContents();
//2000.04.22
SIZE size;
cdc.getTextExtent(str, strlen(str), &size);
if (avwidth == 0) {
column.cx = size.cx+10;
//2008/07/02
} else {
column.cx = avwidth;
}
insertColumn(i++, &column);
ptr = ptr -> getNext();
itr = itr -> getNext();
}
}
public:
void setColumn(const TCHAR** labels, int num)
{
if (labels == NULL || num<1) {
return;
}
int width = 0;
int height = 0;
getClientSize(width, height);
int avwidth = width/num;
LV_COLUMN column;
memset(&column, 0, sizeof(LV_COLUMN));
column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
column.fmt = LVCFMT_LEFT;
column.cx = avwidth;
for(int i = 0; i<num; i++) {
column.pszText = (TCHAR*)labels[i];
insertColumn(i, &column);
}
}
public:
void setItemState(int i, int data, int mask)
{
LV_ITEM item;
memset(&item, 0, sizeof(LV_ITEM));
item.stateMask = mask;
item.state = data;
send( LVM_SETITEMSTATE, (WPARAM)i, (LPARAM)&item);
}
public:
void getItemText(int i, int subItem, TCHAR* text, int textMax)
{
LV_ITEM item;
memset(&item, 0, sizeof(LV_ITEM));
item.iSubItem = subItem;
item.cchTextMax = textMax;
item.pszText = text;
send(LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)&item);
}
public:
void setItemText(int i, int subItem, const char* text)
{
//2009/09/26
const char* string = text;
if (string == NULL){
//Set an emptyr string "" to string;
string = "";
}
LV_ITEMA item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.mask = LVIF_TEXT;
item.iSubItem = subItem;
item.pszText = (char*)string; //text;
item.cchTextMax = strlen(string)+1; //strlen(text)+1;
send(LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM)&item);
}
public:
void setItemText(int i, int subItem, const wchar_t* text)
{
//2009/09/26
const wchar_t* string = text;
if (string == NULL){
//Set an emptyr string "" to string;
string = L"";
}
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.mask = LVIF_TEXT;
item.iSubItem = subItem;
item.pszText = (wchar_t*)string; //text;
item.cchTextMax = strlen(string)+1; //strlen(text)+1;
send(LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM)&item);
}
public:
void insertLine(int n, const char** text, int num)
{
//2009/09/26
if (text && num>0) {
const char* string = text[0];
if (string == NULL) {
//Set an emptyr string "" to string;
string = "";
}
LV_ITEMA item;
memset(&item, 0, sizeof(LV_ITEMA));
item.mask = LVIF_TEXT;
item.pszText = (char*)string; //(TCHAR*)text[0];
item.cchTextMax = strlen(string)+1; //strlen(text[0])+1;
item.iItem = n;
int m = insertItem(&item);
for(int i = 1; i<num; i++) {
setItemText(m, i, text[i]);
}
}
}
public:
//2009/11/01
void insertLineWithIcon(int n, const TCHAR** text, int num, int iconId)
{
//2009/09/26
if (text && num>0) {
const TCHAR* string = text[0];
if (string == NULL) {
string = _T("");
}
LV_ITEM item;
memset(&item, 0, sizeof(item));
item.mask = LVIF_TEXT|LVIF_IMAGE;
item.iImage = iconId;
item.pszText = (TCHAR*)string; //(TCHAR*)text[0];
item.cchTextMax = strlen(string)+1; //strlen(text[0])+1;
item.iItem = n;
int m = insertItem(&item);
for(int i = 1; i<num; i++) {
setItemText(m, i, text[i]);
}
}
}
public:
void insertLine(int n, StringList* list)
{
LV_ITEM item;
memset(&item, 0, sizeof(LV_ITEM));
item.mask = LVIF_TEXT;
ListEntry* ptr = list->getEntry();
String* string = (String*)(ptr -> getObject());
TCHAR* text = string->getContents();
item.pszText = text;
item.cchTextMax = 128;
item.iItem = n;
int m = insertItem(&item);
ptr = ptr -> getNext();
int i = 1;
while(ptr) {
string = (String*)(ptr -> getObject());
TCHAR* text = string->getContents();
setItemText(m, i++, text);
ptr = ptr -> getNext();
}
}
Boolean clear() {
return (Boolean)send(LVM_DELETEALLITEMS, 0, 0L);
}
COLORREF getBkColor() {
return (COLORREF)send(LVM_GETBKCOLOR, 0, 0L);
}
public:
//2008/07/28
void setColumn(ListViewColumn items[], int num)
{
//Delete all items
deleteAllItems();
//Delete all columns
while(deleteColumn(0)) {
}
//Insert new columns
LV_COLUMN listcol;
memset(&listcol, 0, sizeof(listcol));
listcol.mask = LVCF_FMT|LVCF_TEXT | LVCF_WIDTH;//|LVCF_SUBITEM;
for(int n = 0 ; n< num; n++){
listcol.fmt = items[n].format;
listcol.pszText =(TCHAR*)items[n].label;
listcol.cx = items[n].size;
insertColumn(n, &listcol);
}
}
public:
//2008/12/15 Added const
#ifndef UNICODE
void setColumn(const wchar_t** labels, int num) {
if (labels == NULL || num<1) {
return;
}
int width = 0;
int height = 0;
getClientSize(width, height);
int avwidth = width/num;
LV_COLUMNW column;
memset(&column, 0, sizeof(column));
column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
column.fmt = LVCFMT_LEFT;
column.cx = avwidth;
for(int i = 0; i<num; i++) {
column.pszText = (wchar_t*)labels[i];
insertColumn(i, &column);
}
}
#endif
Boolean setBkColor(COLORREF clrBk) {
return (Boolean)send(LVM_SETBKCOLOR, 0, (LPARAM)clrBk);
}
HIMAGELIST getImageList(int iImageList) {
return (HIMAGELIST)send(LVM_GETIMAGELIST, (WPARAM)iImageList, 0L);
}
//2009/11/01
HIMAGELIST setImageList(HIMAGELIST himl, int iImageList=LVSIL_SMALL) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)himl);
}
HIMAGELIST setImageList(ImageList* imagelist, int iImageList=LVSIL_SMALL) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(iImageList),
(LPARAM)imagelist->getImageList());
}
HIMAGELIST setSmallImageList(HIMAGELIST himl) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(LVSIL_SMALL), (LPARAM)himl);
}
HIMAGELIST setSmallImageList(ImageList* imagelist) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(LVSIL_SMALL),
(LPARAM)imagelist->getImageList());
}
HIMAGELIST setNormalImageList(HIMAGELIST himl) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(LVSIL_NORMAL), (LPARAM)himl);
}
HIMAGELIST setNormalImageList(ImageList* imagelist) {
return (HIMAGELIST)send(LVM_SETIMAGELIST, (WPARAM)(LVSIL_NORMAL),
(LPARAM)imagelist->getImageList());
}
//
int getItemCount() {
return (int)send(LVM_GETITEMCOUNT, 0, 0L);
}
Boolean getItem(LV_ITEMA* pitem) {
return (Boolean)send(LVM_GETITEMA, 0, (LPARAM)pitem);
}
Boolean getItem(LV_ITEMW* pitem) {
return (Boolean)send(LVM_GETITEMW, 0, (LPARAM)pitem);
}
Boolean setItem(LV_ITEMA* pitem) {
return (Boolean)send(LVM_SETITEMA, 0, (LPARAM)pitem);
}
Boolean setItem(LV_ITEMW* pitem) {
return (Boolean)send(LVM_SETITEMW, 0, (LPARAM)pitem);
}
int insertItem(LV_ITEMA* pitem) {
return (int)send(LVM_INSERTITEM, 0, (LPARAM)pitem);
}
int insertItem(LV_ITEMW* pitem) {
return (int)send(LVM_INSERTITEMW, 0, (LPARAM)pitem);
}
//2009/09/26
void insertLine(int n, const wchar_t** text, int num) {
if (text !=NULL && num>0) {
const wchar_t* string = text[0];
if (string ==NULL) {
string = L"";
}
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.mask = LVIF_TEXT;
item.pszText = (wchar_t*)string; //text[0];
item.cchTextMax = ::wcslen(string)+1;//text[0])+1;
item.iItem = n;
int m = insertItem(&item);
for(int i = 1; i<num; i++) {
setItemText(m, i, text[i]);
}
}
}
//#endif
Boolean deleteItem(int i) {
return (Boolean)send(LVM_DELETEITEM, (WPARAM)i, 0L);
}
Boolean deleteAllItems() {
return (Boolean)send(LVM_DELETEALLITEMS, 0, 0L);
}
Boolean getCallbackMask() {
return (Boolean)send(LVM_GETCALLBACKMASK, 0, 0);
}
Boolean setCallbackMask(UINT mask) {
return (Boolean)send(LVM_SETCALLBACKMASK, (WPARAM)mask, 0);
}
int getNextItem(int i, int flags) {
return (int)send(LVM_GETNEXTITEM, (WPARAM)i, MAKELPARAM(flags, 0));
}
int findItem(int iStart, LV_FINDINFO* plvfi) {
return (int)send(LVM_FINDITEM, (WPARAM)iStart, (LPARAM)plvfi);
}
Boolean getItemRect(int i, RECT* prc, int code) {
return (Boolean)send(LVM_GETITEMRECT, (WPARAM)(int)(i),
((prc) ? (((RECT FAR *)(prc))->left = (code),(LPARAM)(RECT FAR*)(prc)) : (LPARAM)(RECT FAR*)NULL));
}
Boolean setItemPosition(int i, int x, int y) {
return (Boolean)send(LVM_SETITEMPOSITION, (WPARAM)i, MAKELPARAM((x), (y)));
}
Boolean getItemPosition(int i, POINT* ppt) {
return (Boolean)send(LVM_GETITEMPOSITION, (WPARAM)i, (LPARAM)ppt);
}
int getStringWidth(TCHAR* psz) {
return (int)send(LVM_GETSTRINGWIDTH, 0, (LPARAM)psz);
}
int hitTest(LV_HITTESTINFO* pinfo) {
return (int)send(LVM_HITTEST, 0, (LPARAM)pinfo);
}
Boolean ensureVisible(int i, Boolean fPartialOK) {
return (Boolean)send(LVM_ENSUREVISIBLE, (WPARAM)i, MAKELPARAM((fPartialOK), 0));
}
Boolean scroll(int dx, int dy) {
return (Boolean)send(LVM_SCROLL, (WPARAM)dx, (LPARAM)dy);
}
Boolean redrawItems(int iFirst, int iLast) {
return (Boolean)send(LVM_REDRAWITEMS, (WPARAM)iFirst, (LPARAM)iLast);
}
Boolean arrange(UINT code) {
return (Boolean)send(LVM_ARRANGE, (WPARAM)code, 0L);
}
HWND editLabel(int i) {
return (HWND)send(LVM_EDITLABEL, (WPARAM)i, 0L);
}
HWND getEditControl() {
return (HWND)send(LVM_GETEDITCONTROL, 0, 0L);
}
Boolean getColumn(int indx, LV_COLUMN* pcol) {
return (Boolean)send(LVM_GETCOLUMN, (WPARAM)indx, (LPARAM)pcol);
}
Boolean setColumn(int indx, LV_COLUMN* pcol) {
return (Boolean)send(LVM_SETCOLUMN, (WPARAM)indx, (LPARAM)pcol);
}
int insertColumn(int indx, LV_COLUMN* pcol) {
return (int)send(LVM_INSERTCOLUMN, (WPARAM)indx, (LPARAM)pcol);
}
#ifndef UNICODE
Boolean setColumn(int indx, LV_COLUMNW* pcol) {
return (Boolean)send(LVM_SETCOLUMNW, (WPARAM)indx, (LPARAM)pcol);
}
int insertColumn(int indx, LV_COLUMNW* pcol) {
return (int)send(LVM_INSERTCOLUMNW, (WPARAM)indx, (LPARAM)pcol);
}
#endif
Boolean deleteColumn(int indx) {
return (Boolean)send(LVM_DELETECOLUMN, (WPARAM)indx, 0);
}
int getColumnWidth(int indx) {
return (int)send(LVM_GETCOLUMNWIDTH, (WPARAM)indx, 0);
}
Boolean setColumnWidth(int column, int cx) {
return (Boolean)send(LVM_SETCOLUMNWIDTH, (WPARAM)column, MAKELPARAM((cx), 0));
}
HIMAGELIST createDragImage(int i, POINT* upLeft) {
return (HIMAGELIST)send(LVM_CREATEDRAGIMAGE, (WPARAM)i, (LPARAM)upLeft);
}
Boolean getViewRect(RECT* rc) {
return (Boolean)send(LVM_GETVIEWRECT, 0, (LPARAM)rc);
}
COLORREF getTextColor() {
return (COLORREF)send(LVM_GETTEXTCOLOR, 0, 0L);
}
Boolean setTextColor(COLORREF textColor) {
return (Boolean)send(LVM_SETTEXTCOLOR, 0, (LPARAM)textColor);
}
COLORREF getTextBkColor() {
return (COLORREF)send(LVM_GETTEXTBKCOLOR, 0, 0L);
}
Boolean setTextBkColor(COLORREF textBk) {
return (Boolean)send(LVM_SETTEXTBKCOLOR, 0, (LPARAM)textBk);
}
int getTopIndex() {
return (int)send(LVM_GETTOPINDEX, 0, 0);
}
int getCountPerPage() {
return (int)send(LVM_GETCOUNTPERPAGE, 0, 0);
}
Boolean getOrigin(POINT* ppt) {
return (Boolean)send(LVM_GETORIGIN, 0, (LPARAM)ppt);
}
Boolean update(int i) {
return (Boolean)send(LVM_UPDATE, (WPARAM)i, 0L);
}
// void setItemState(int i, int data, int mask);
UINT getItemState(int i, int mask) {
return (UINT)send(LVM_GETITEMSTATE, (WPARAM)i, (LPARAM)mask);
}
#ifndef UNICODE
void getItemText(int i, int subItem, wchar_t* text, int textMax) {
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.iSubItem = subItem;
item.cchTextMax = textMax;
item.pszText = text;
send(LVM_GETITEMTEXTW, (WPARAM)i, (LPARAM)&item);
}
#endif
/*
void setItemText(int i, int subItem, const wchar_t* text) {
const wchar_t* string = text;
if (string == NULL) {
string = L"";
}
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.mask = LVIF_TEXT;
item.iSubItem = subItem;
item.pszText = (wchar_t*)string; //text;
item.cchTextMax = wcslen(string)+1; //text)+1;
send(LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM)&item);
}
*/
void setItemCount(WPARAM cItems) {
send(LVM_SETITEMCOUNT, (WPARAM)cItems, 0);
}
Boolean sortItems(PFNLVCOMPARE compare, void* param) {
return (Boolean)send(LVM_SORTITEMS, (WPARAM)param,
(LPARAM)compare);
}
void setItemPosition32(int i, long x, long y) {
POINT pos = {x,y};
send( LVM_SETITEMPOSITION32, (WPARAM)i, (LPARAM)&pos);
}
UINT getSelectedCount() {
return (UINT)send(LVM_GETSELECTEDCOUNT, 0, 0L);
}
DWORD getItemSpacing(Boolean fSmall) {
return (DWORD)send(LVM_GETITEMSPACING, fSmall, 0L);
}
Boolean getISearchString(TCHAR* lpsz) {
return (Boolean)send(LVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)lpsz);
}
long getExtendedViewStyle() {
return (long)send(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
}
void setExtendedViewStyle(long style) {
send(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, style);
}
Boolean getSubItemRect(int iItem, int iSubItem, int code, RECT* prc) {
return (Boolean)send(LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem),
((prc) ? ((((LPRECT)(prc))->top = iSubItem),
(((LPRECT)(prc))->left = code), (LPARAM)(prc)) : (LPARAM)(LPRECT)NULL));
}
int subItemHitTest(LVHITTESTINFO* plvhti) {
return (int)send(LVM_SUBITEMHITTEST, 0, (LPARAM)plvhti);
}
Boolean setColumnOrderArray(int iCount, int* pi) {
return (Boolean)send(LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)pi);
}
Boolean getColumnOrderArray(int iCount, int* pi) {
return (Boolean)send(LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)pi);
}
int setHotItem(int i) {
return (int)send(LVM_SETHOTITEM, (WPARAM)i, 0);
}
int getHotItem() {
return (int)send(LVM_GETHOTITEM, 0, 0);
}
HCURSOR setHotCursor(HCURSOR hcur) {
return (HCURSOR)send(LVM_SETHOTCURSOR, 0, (LPARAM)hcur);
}
HCURSOR getHotCursor() {
return (HCURSOR)send(LVM_GETHOTCURSOR, 0, 0);
}
DWORD approximateViewRect(int iWidth, int iHeight, int iCount) {
return (DWORD)send(LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight));
}
Boolean setWorkAreas(RECT* prc) {
return (Boolean)send(LVM_SETWORKAREAS, 0, (LPARAM)prc);
}
public:
bool getSelectedItemText(__out String& string)
{
bool rc = false;
int count = getItemCount();
TCHAR name[1024];
memset(name, (TCHAR)0, SizeOf(name));
for (int i = 0; i<count; i++) {
UINT state = getItemState(i, LVIS_SELECTED);
if (state & LVIS_SELECTED) {
//Get a file name to buffer text
LV_ITEM item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.pszText = name;
item.mask = LVIF_TEXT;
item.cchTextMax = SizeOf(name);
getItem(&item);
string = name;
rc = true;
break;
}
} //for
return rc;
}
public:
//2009/12/25
bool getSelectedItemText(__out StringT<wchar_t>& string)
{
bool rc = false;
int count = getItemCount();
wchar_t name[1024];
//2010/04/12 memset(name, (TCHAR)0, SizeOf(name));
memset(name, (wchar_t)0, SizeOf(name));
for (int i = 0; i<count; i++) {
UINT state = getItemState(i, LVIS_SELECTED);
if (state & LVIS_SELECTED) {
//Get a file name to buffer text
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.pszText = name;
item.mask = LVIF_TEXT;
item.cchTextMax = SizeOf(name);
getItem(&item);
string = name;
rc = true;
break;
}
} //for
return rc;
}
public:
//2012/01/22
bool getSelectedItemText(__out _bstr_t& string)
{
bool rc = false;
int count = getItemCount();
wchar_t name[1024*3];
//2010/04/12 memset(name, (TCHAR)0, SizeOf(name));
memset(name, (wchar_t)0, SizeOf(name));
for (int i = 0; i<count; i++) {
UINT state = getItemState(i, LVIS_SELECTED);
if (state & LVIS_SELECTED) {
//Get a file name to buffer text
LV_ITEMW item;
memset(&item, 0, sizeof(item));
item.iItem = i;
item.pszText = name;
item.mask = LVIF_TEXT;
item.cchTextMax = SizeOf(name);
getItem(&item);
string = name;
rc = true;
break;
}
} //for
return rc;
}
};
}
|