无法向 CListViewCtrl 控件添加列 - WTL

问题描述 投票:0回答:1

我有一个基于对话框的基本窗口,继承自 WTL 中的 CDialogImpl:

class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
    enum { IDD = IDD_MAINDLG };
    
    BEGIN_MSG_MAP_EX(CMainDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
        COMMAND_ID_HANDLER(IDOK, OnOK)
        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    END_MSG_MAP()

    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);


protected:
    CListViewCtrl wndList1;

}

在 OnInitDialog 上初始化对话框时,我尝试填充在资源编辑器中创建的列表视图并将其命名为 IDC_LIST:

LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
    // center the dialog on the screen
    CenterWindow();

    // attach via CWindow ( CListViewCtrl )
    //HWND hwndList = GetDlgItem( IDC_LIST );
    wndList1.Attach( GetDlgItem( IDC_LIST ) );
    
    wndList1.InsertColumn( 0,  "Column1" , LVCFMT_LEFT, 120, 0 );


    return TRUE;
}

但即使在调用 InsertColumn 之后我也看不到列,我已经尝试了该函数的其他重载,这些重载需要创建 LVCOLUMNA 但它也不起作用。为什么会出现这种情况?

c++ winapi visual-c++ wtl
1个回答
0
投票

如果您在文本编辑器中打开资源 (

.rc
) 文件,您会看到在
IDC_LIST
旁边指定了哪种类型的控件?

如果是

LISTBOX
那么你的控制类型是错误的。
LISTBOX
用于列表框控件(
CListBox
类)。对于列表控件(
CListCtrl
和类似的类),典型的 RC 线将如下所示:

CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,22,14,225,64

换句话说,如果您使用资源编辑器(在 Visual Studio 中),请确保从工具箱中提供的控件集中选择“列表控件”,而不是“列表框”。

© www.soinside.com 2019 - 2024. All rights reserved.