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;
}

解决方案 »

  1.   

    先:lvI.pszText = "Test text";//LPSTR_TEXTCALLBACK; // sends an LVN_GETDISP message. 
    试试看,是不是TEXTCALLBACK的问题
      

  2.   

    楼主用的是win32SDK吗?我把当年一个源码贴给你,是我自己把ListView包装成类,希望其中一些代码对你有用。
    /*-----------------------------------------------------------------------------------------
                                                                                       类声明*/
      #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
      

  3.   


    /*-----------------------------------------------------------------------------------------
                                                                                   基本的函数*/ 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 ;
    }