Winapi WC_LISTVIEW意外行为

Winapi WC_LISTVIEW意外行为,winapi,listview,Winapi,Listview,我正在尝试使用win32 WC_LISTVIEW装箱表: param_table = CreateWindowEx( 0, WC_LISTVIEW, 0, LVS_REPORT | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | WS_VISIBLE | WS_CHILD | CBS_AUTOHSCROLL | LBS_MULTICOLUMN, 310, 31, 252, 114, hWn

我正在尝试使用win32 WC_LISTVIEW装箱表:

    param_table = CreateWindowEx( 0, WC_LISTVIEW, 0, 
          LVS_REPORT | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
          WS_VISIBLE | WS_CHILD | CBS_AUTOHSCROLL | LBS_MULTICOLUMN, 
          310, 31, 252, 114, hWnd, ( HMENU )PARAM_TABLE, hInst, 0 );

    SendMessage(param_table,LVM_SETTEXTBKCOLOR, 0,(LPARAM)CLR_HILIGHT);
    SendMessage(param_table,LVM_SETEXTENDEDLISTVIEWSTYLE,
           0,LVS_EX_FULLROWSELECT); // Set style

    LVCOLUMN LvCol;
    memset(&LvCol,0,sizeof(LvCol));
    LvCol.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_FMT|LVCF_SUBITEM; 
    LvCol.iSubItem = 0; 
    LvCol.pszText=_T("value");                     
    LvCol.cx=114;
    SendMessage(param_table,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol); 
    LvCol.pszText=_T("parameter");                          
    LvCol.iSubItem = 1;
    SendMessage(param_table,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol); 

    LVITEM LvItem;
    memset(&LvItem,0,sizeof(LvItem));
    LvItem.mask=LVIF_TEXT;
    LvItem.cchTextMax = 256;
    LvItem.iItem=0;    
    LvItem.iSubItem=0; 
    LvItem.pszText=_T("Item");
    SendMessage(param_table,LVM_INSERTITEM,0,(LPARAM)&LvItem);          
    LvItem.iSubItem=1;    
    LvItem.pszText=_T("subItem"); 
    SendMessage(param_table,LVM_INSERTITEM,0,(LPARAM)&LvItem);
但是我不能得到我期望的结果。只添加一列。未添加子项


我做错了什么?

我猜您也必须使用LVM_SETITEMTEXT。我已经通过ListView方法实现了这一点,但应该是相同的

void addRow (HWND hwnd, vector<string> & colValues)
{
   if (colValues.size () < 1) return;
   int reto = 0;
   LVITEM ite = { 0 };

   ite.mask = LVIF_TEXT;
   ite.pszText = (LPSTR) colValues[0].c_str ();
   reto = ListView_InsertItem (hwnd, &ite);   
   if (reto >= 0)
      for (int cc = 1; cc < colValues.size (); cc ++)
      {
         ListView_SetItemText (hwnd, reto, cc, (LPSTR) colValues[cc].c_str ());
      }
}
void addRow(HWND-HWND、vector和colValues)
{
if(colValues.size()<1)返回;
int-reto=0;
LVITEM={0};
ite.mask=LVIF_文本;
ite.pszText=(LPSTR)colValues[0].c_str();
reto=ListView_插入项(hwnd和ite);
如果(reto>=0)
for(int cc=1;cc
如果决定使用该方法,这里是setColumns方法

void setColumns (HWND hwnd, vector<string> & colNames)
{
   LVCOLUMN col;
   int chx = LOWORD (GetDialogBaseUnits ()) ;

   for (int cc = 0; cc < colNames.size (); cc ++)
   {
      col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
      col.fmt = LVCFMT_LEFT;
      col.cx = chx * 1.2 * colNames[cc].length ();
      col.pszText = (LPSTR) colNames[cc].c_str ();
      col.iSubItem = cc;
      ListView_InsertColumn(hwnd, cc, & col);
   }
}
void setColumns(HWND-HWND、vector和colNames)
{
LVCOL柱;
int chx=LOWORD(GetDialogBaseUnits());
for(int cc=0;cc
不要插入子项,请使用LVM_SETITEMTEXT。移除LBS_多列,这是一个列表框。