BOOL InitListViewItem(HWND hWndListView)
{ LV_ITEM lvI;
int index;
int iSubItem;
// Some code to create the list-view control.
// Initialize LVITEM members that are common to all items.
lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
lvI.state = 0;
lvI.stateMask = 0; // Initialize LVITEM members that are different for each item.
for (index = 0; index < 3; index++)
{
lvI.iItem = index;
lvI.iSubItem = 0;
lvI.lParam = (LPARAM) &SrvItem[index];
lvI.pszText = LPSTR_TEXTCALLBACK; // sends an LVN_GETDISP message.
if(ListView_InsertItem(hWndListView, &lvI) == -1)
return FALSE;
for (iSubItem = 1; iSubItem < 3; iSubItem++)
{
ListView_SetItemText (hWndListView, index, iSubItem,
LPSTR_TEXTCALLBACK);
}
}
return TRUE;
}
{ LV_ITEM lvI;
int index;
int iSubItem;
// Some code to create the list-view control.
// Initialize LVITEM members that are common to all items.
lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
lvI.state = 0;
lvI.stateMask = 0; // Initialize LVITEM members that are different for each item.
for (index = 0; index < 3; index++)
{
lvI.iItem = index;
lvI.iSubItem = 0;
lvI.lParam = (LPARAM) &SrvItem[index];
lvI.pszText = LPSTR_TEXTCALLBACK; // sends an LVN_GETDISP message.
if(ListView_InsertItem(hWndListView, &lvI) == -1)
return FALSE;
for (iSubItem = 1; iSubItem < 3; iSubItem++)
{
ListView_SetItemText (hWndListView, index, iSubItem,
LPSTR_TEXTCALLBACK);
}
}
return TRUE;
}
试试看,是不是TEXTCALLBACK的问题
/*-----------------------------------------------------------------------------------------
类声明*/
#pragma once class CListView
{
public:
CListView(CWindowInfo * pwi,DWORD style=0); //构造函数
~CListView() ; //析构函数
VOID SetPosition(int x,int y,int width,int height);//用1-400数字表示相对大小
void __cdecl SetColumn( TCHAR * amount,...) ; //设定列,amount是列数
BOOL SetColumnWidth (int iCol,int cx);//列数从0算起,cx:象素计。
void __cdecl append( TCHAR * pszItem,...);//在尾部加入一整行
BOOL DeleteRow (int RowNum);//删掉一行,行数从0算起。
int GetColCount(void);//获取列数
int GetRowCount(void);//获取行数
void GetText(int iItem,int iSubItem,LPTSTR pszText,int cchTextMax);//获取文字
void SetText(int iItem,int iSubItem,LPTSTR pszText);//设置文字
BOOL handle_WM_NOTIFY (PRO_WM_NOTIFY pro); HWND GetHwnd (void);
DWORD GetID(void); //设置窗口显示标志
void SetShow( BOOL show );
//获取窗口显示标志
BOOL GetShow( void );
private:
int index;
ChildWindowInfo * pCWI_;
DWORD ListViewStyle;
CWindowInfo * pwi;
DWORD ExStyle;
HFONT hFont ;
BOOL InsertColumn(int id,LPTSTR title,int width,int _fmt);//index 从0算起
BOOL SetItem(int item,int SubItem,LPTSTR str);//注:SubItem从1开始
BOOL InsertItem (int item,LPTSTR str);//item从0开始 int ColCount; //共有几列
RECT rect;
int cx__,cy__;//客户区宽、高(像素计)
int RowNUM; //最后插入行的序号(0计起)
};//end class
/*-----------------------------------------------------------------------------------------
构造函数*/ CListView::CListView(CWindowInfo * pwi,DWORD style)
{
hFont=NULL;
index=-1;
ColCount=0;
this->pwi=pwi;
pCWI_=pwi->pCWI;
ListViewStyle=WS_VISIBLE |WS_CHILD | LVS_REPORT|LVS_SINGLESEL ;
rect.bottom=0;
rect.left=0;
rect.right=0;
rect.top=0;
cx__=cy__=0;
RowNUM=-1;
ExStyle=0 ; if(style & 0x00000F00) ExStyle|=WS_EX_CLIENTEDGE ; //窗口具有阴影边界
if(style & 0x0000F000) ExStyle|=WS_EX_WINDOWEDGE ; //窗口具有凸起的3D边框 if(style & 0x0F000000) ListViewStyle|=WS_THICKFRAME ; //可调边框 }//end FUN
/*-----------------------------------------------------------------------------------------
析构函数*/
CListView::~CListView()
{
if(index==-1)
{return;}
if((pCWI_+index)->hwnd != NULL)
{pwi->childWindowAmount -- ;
DestroyWindow((pCWI_+index)->hwnd);
} (pCWI_+index)->PS.x=0;
(pCWI_+index)->PS.y=0;
(pCWI_+index)->PS.width=0;
(pCWI_+index)->PS.height=0;
(pCWI_+index)->ID=-1;
(pCWI_+index)->pro_WM_COMMAND=NULL;
(pCWI_+index)->pro_WM_NOTIFY=NULL;
(pCWI_+index)->pro_WM_SCROLL=NULL; if(hFont!=NULL)
{DeleteObject(hFont) ;}
}
/*-----------------------------------------------------------------------------------------
设定窗口相对位置、大小*/ VOID CListView::SetPosition(int x,int y,int width,int height)
{
if(index==-1)
{
for(int i=0;i<ChildWindowNumber;++i)
{
if( ((pCWI_+i)->hwnd==NULL) && ((pCWI_+i)->ID==-1) )
{index=i; (pCWI_+index)->ID=i; break;}
}//从CWI中找个空闲单元
if(index==-1) {return;}
(pCWI_+index)->hwnd=CreateWindowEx(
ExStyle ,
WC_LISTVIEW ,
NULL,
ListViewStyle,
0,0,0,0,
pwi->hwnd,
(HMENU) index,
pwi->hInst,
NULL); if((pCWI_+index)->hwnd != NULL)
{pwi->childWindowAmount ++ ;} ListView_SetExtendedListViewStyle((pCWI_+index)->hwnd,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
}//end if(index==-1) if(index!=-1)
{ (pCWI_+index)->PS.x=x;
(pCWI_+index)->PS.y=y;
(pCWI_+index)->PS.width=width;
(pCWI_+index)->PS.height=height;
SendMessage(pwi->hwnd,WM_INITSIZE,0,(LPARAM)index);//不用WM_SIZE,因为要更新cxClient和cyClient
}
}//end FUN
/*-----------------------------------------------------------------------------------------
基本的函数*/ BOOL CListView::InsertColumn(int id,LPTSTR title,int width,int _fmt)//index 从0算起
{
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
lvc.pszText = title;
lvc.cx =width ;
lvc.fmt =_fmt;
if (ListView_InsertColumn((pCWI_+index)->hwnd, id,&lvc) == -1)
{ return FALSE; }
return TRUE;
} //end FUN BOOL CListView::InsertItem (int item,LPTSTR str)//item从0开始
{
LVITEM lvI ;
if(item==-1)
{return FALSE;}
lvI.mask = LVIF_TEXT;
lvI.iItem=item;
lvI.iSubItem=0;
lvI.pszText =str ;
if(item==ListView_InsertItem((pCWI_+index)->hwnd, &lvI) )
{ return TRUE;}
else
return FALSE;
}//end function
// 注:item表示第几行,但只能顺序插入
BOOL CListView::SetItem (int item,int SubItem,LPTSTR str)//注:SubItem从1开始
{
LVITEM lvI ;
lvI.mask = LVIF_TEXT ;
lvI.iItem=item;
lvI.iSubItem=SubItem;
lvI.pszText =str ;
if(ListView_SetItem((pCWI_+index)->hwnd, &lvI) )
{return TRUE;}
else
{return FALSE;}
}//end function
/*------------------------------------------------------------------------------------------
定义列*/ void __cdecl CListView::SetColumn( TCHAR * amount,...)
{
TCHAR * title_;
va_list arg_ptr;
int i,n;
if(index!=-1)
{ i=_ttoi(amount);
va_start(arg_ptr, amount); for( n=0;n<i;++n)
{
title_ = va_arg( arg_ptr, TCHAR * ) ;
if(! InsertColumn(n,title_,595/i,LVCFMT_LEFT))
{break;}
++ColCount;
} //end FUN
va_end( arg_ptr );
}//end if(index!=-1)
}//end FUN
/*------------------------------------------------------------------------------------------
调整列宽度*/
BOOL CListView::SetColumnWidth (int iCol,int cx)//列数从0算起
{
if(index==-1)
{return FALSE;}
if((iCol<0)||(iCol>ColCount))
{return FALSE;}
if ( ListView_SetColumnWidth((pCWI_+index)->hwnd,iCol,cx) )
{return TRUE;}
else
{return FALSE;}
}//end FUN/*------------------------------------------------------------------------------------------
插入一行*/
void __cdecl CListView::append( TCHAR * pszItem,...)
{
TCHAR * title_;
va_list arg_ptr;
if( (index!=-1)&&(ColCount>0) )
{
InsertItem(++RowNUM,pszItem);
va_start(arg_ptr, pszItem);
for(int n=1;n<ColCount;++n)
{
title_ = va_arg( arg_ptr, TCHAR * ) ;
if(!SetItem (RowNUM,n,title_) )
{break;}
} //end FUN
va_end( arg_ptr );
}//end if(index!=-1)
}//end FUN/*------------------------------------------------------------------------------------------
删掉一整行*/
BOOL CListView::DeleteRow (int RowNum)//行数从0算起。
{
if(index==-1)
{return FALSE;}
if(RowNum>RowNUM)
{return FALSE;}
if( !ListView_DeleteItem((pCWI_+index)->hwnd,RowNum) )
{return FALSE;}
return TRUE;
}//end FUN
/*------------------------------------------------------------------------------------------
获取列数*/
int CListView::GetColCount(void)
{
return ColCount;
}
/*------------------------------------------------------------------------------------------
获取行数*/
int CListView::GetRowCount(void)
{
return RowNUM+1;
}
/*------------------------------------------------------------------------------------------
获取文字*/
void CListView::GetText(int iItem,int iSubItem,LPTSTR pszText,int cchTextMax)
{
ListView_GetItemText((pCWI_+index)->hwnd,iItem,iSubItem,pszText,cchTextMax);
}
/*------------------------------------------------------------------------------------------
设置文字*/
void CListView::SetText(int iItem,int iSubItem,LPTSTR pszText)
{
ListView_SetItemText((pCWI_+index)->hwnd,iItem,iSubItem, pszText);
}
/*------------------------------------------------------------------------------------------
处理WM_NOTIFY*/
BOOL CListView::handle_WM_NOTIFY (PRO_WM_NOTIFY pro)
{
if((pro==NULL)||(index==-1) )
{return FALSE;}
(pCWI_+index)->pro_WM_NOTIFY=pro; return TRUE;
}
/*------------------------------------------------------------------------------------------
获取句柄*/
HWND CListView::GetHwnd (void)
{
if(index==-1)
{return NULL;}
return ((HWND)(pCWI_+index)->hwnd);
}
/*------------------------------------------------------------------------------------------
获取ID*/
DWORD CListView::GetID(void)
{
if(index==-1)
{return NULL;}
return ((DWORD)(pCWI_+index)->ID);
}
//设置窗口显示标志
void CListView::SetShow( BOOL show )
{
(pCWI_+index)->show = show ;
}
//获取窗口显示标志
BOOL CListView::GetShow( void )
{
return (pCWI_+index)->show ;
}