2017-04-05 4 views
0

私はlistviewを初期化する関数とリストビューにエントリを追加する関数の2つを持っています。列情報を保持する構造体を作成しました。私は、列の構造体ListViewのサブアイテムがC++のWindows APIを使用して表示されない

static struct LISTVIEW_COLUMN lvNames[] = 
{ 
    { TEXT("Name"), 150 }, 
    { TEXT("Last"), 125 } 
}; 

を作成していますどのようにこれは

struct LISTVIEW_COLUMN 
{ 
    const TCHAR * Title; 
    int   Width; 
}; 

それから私は、次のような機能が定義されています。

void InitListView(HWND hListView, LISTVIEW_COLUMN * lvColumn, int nCols) 
{ 

    ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT); 

    // Create the columns 
    for (int col = 0; col < nCols; col++) { 
     LVCOLUMN lvc; 
     lvc.pszText = (TCHAR *)lvColumn[col].Title; 
     lvc.cx  = lvColumn[col].Width; 
     lvc.mask  = LVCF_TEXT | LVCF_WIDTH; 
     ListView_InsertColumn(hListView, col, &lvc); 
    } 
} 

void NetPCAddListViewRow(HWND hListView, TCHAR * name, TCHAR * lastName) 
{ 
    LVITEM  lvItem; 

    // Add item (name) 
    lvItem.mask  = LVIF_TEXT | LVIF_IMAGE; 
    lvItem.iItem = 0; 
    lvItem.iSubItem = 0; 
    lvItem.iImage = 0; 
    lvItem.pszText = (TCHAR *)name; 
    lvItem.iItem = ListView_InsertItem(hListView, &lvItem); 

// Just using "testing" right now to see it as a subitem 
    lvItem.iSubItem += 1; 
    lvItem.pszText = _T("testing"); 
    ListView_SetItem(hListView, &lvItem); 
} 

列 はうまく表示と最初の列「名前は」に追加されますが、私は、その列のサブアイテムとして表示するために何かを得るカント?助けてくれてありがとう!

+1

'LVITEM'構造体を初期化していないことは間違いありません。(理論的には' mask'フィールドのためにこれは問題ではありませんが)。 'ListView_SetItemText()'はサブ項目のテキストを設定することができますか?あなたが[MCVE]を投稿できるかどうかが分かります。 –

+0

うーん、私はListView_SetItemText()と同じものを使ってみました。私はListView_SetItem()の戻り値をチェックし、 '0'を返しています。なぜ私はInsertItemがうまく動作するときに失敗するだろうか分からない?私は小さな例を思いついてそれを再現できるかどうかを見ていきます。 – trevercodes

+0

テストと同様に 'LVITEM'を0に初期化してみてください。 –

答えて

0

MSDNのHow to Add List-View Columnsの例を見ると、列を挿入するときにiSubItemメンバとフラグが設定されていることがわかります。これにより、サブ項目と列の関係が確立されます(列はユーザ​​ーが並べ替えることができます)。

フラグのサブセットのみをサポートするため、サブアイテムを追加する前にlvItem.maskをリセットすることをお勧めします。

関連する問題