2017-01-30 14 views
0

私のコードに問題があります。 まず、このコードの本質は、Win32を使用して、いくつかの列を持つListViewを作成することです。C++ win32リストビューの列

問題は、私のリストビューに列を追加しようとすると、それは私に列を表示しないようにしてみてください。ここに私のコードはありがとうございました。

HWND function::CreateListView (HWND hwndParent) 
{ 
    INITCOMMONCONTROLSEX icex;   // Structure for control initialization. 
    icex.dwICC = ICC_LISTVIEW_CLASSES; 
    InitCommonControlsEx(&icex); 
    RECT rcClient; 
    // The parent window's client area. 
    GetClientRect (hwndParent, &rcClient); 
    HWND hWndListView = CreateWindow(WC_LISTVIEW, "ViewList",WS_BORDER| WS_CHILD | LVS_REPORT | LVS_EDITLABELS,500,300,300,300,hwndParent,NULL,hInst,NULL); 
    return (hWndListView); 
} 

VOID function::SetView(HWND hWndListView, DWORD dwView) 
{ 
    // Retrieve the current window style. 
    DWORD dwStyle = GetWindowLong(hWndListView, GWL_STYLE); 

    // Set the window style only if the view bits changed. 
    if ((dwStyle & LVS_TYPEMASK) != dwView) 
    { 
     SetWindowLong(hWndListView, 
         GWL_STYLE, 
         (dwStyle & ~LVS_TYPEMASK) | dwView); 
    }     // Logical OR'ing of dwView with the result of 
}  

BOOL InitListViewColumns(HWND hWndListView) 
{ 
    char szText[256] ="test";  // Temporary buffer. 
    LVCOLUMN lvc; 
    int iCol; 

    // Initialize the LVCOLUMN structure. 
    // The mask specifies that the format, width, text, 
    // and subitem members of the structure are valid. 
    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM|LVS_REPORT; 

    // Add the columns. 
    for (iCol = 0; iCol < C_COLUMNS; iCol++) 
    { 
     lvc.iSubItem = iCol; 
     lvc.pszText = "LOL"; 
     lvc.cx = 100;    // Width of column in pixels. 
     if (iCol < 2) 
      lvc.fmt = LVCFMT_LEFT; // Left-aligned column. 
     else 
      lvc.fmt = LVCFMT_RIGHT; // Right-aligned column. 

     // Load the names of the column headings from the string resources. 
     LoadString(hInst,iCol,szText, sizeof(szText)/sizeof(szText[0])); 

     // Insert the columns into the list view. 
     if (ListView_InsertColumn(hWndListView, iCol, &lvc) == -1) 
      return FALSE; 
    } 

    return TRUE; 
} 
+0

質問の入力に使用したエディタでは、ライブプレビューが表示されるため、質問の内容がわかります。一貫した書式設定を使用していることを確認するために使用します。 – IInspectable

+3

'LVCOLUMN.mask'の一部としての' LVS_REPORT'は有効なフラグではなく、ListView *スタイル*です。 –

+0

LVS_REPORTを削除しても動作しません。 –

答えて

0

あなたはリストビューを作成するためにCreateWindowを呼び出すときWS_VISIBLEスタイルを指定するのを忘れました。リストビューと列はそこにあり、見えません。

に渡すバッファは、lvc.pszText = szTextを決して使用しないので、すべての列の名前が「LOL」になるため、使用されることはありません。

編集:私の答えは、コメントからの修正で編集された後のコードに適用されます。 LVS_REPORTは依然として有効なLVCF_ *フラグではありませんが、LVCF_FMTと同じ値を持つため、この特定のコードでは問題ありませんが、コードが技術的に正しくないために削除する必要があります。

+0

'WS_VISIBLE'スタイルは必ずしも必須ではありません。一般的なパターンは、ウィンドウを作成し、返されたハンドルに対して 'ShowWindow'を呼び出すことです。実際の問題はコメントの中で問題に対処されています。 – IInspectable

+0

@IInspectable:編集後にコードをそのまま使用すると、親ダイアログが空であるためリストビューが壊れているように見えますが、可視フラグを追加するとリストビューとその列が表示されます。 – Anders

+0

いいえ、そうではありません。 'lvc.mask'にはまだ' LVS_REPORT'が割り当てられています。 – IInspectable

関連する問題