我有一个基于对话框的基本窗口,继承自 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 但它也不起作用。为什么会出现这种情况?
如果您在文本编辑器中打开资源 (
.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 中),请确保从工具箱中提供的控件集中选择“列表控件”,而不是“列表框”。