我有基本的基于对话框的窗口,继承自 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 行将如下所示:换句话说,如果您使用资源编辑器(在 Visual Studio 中),请确保从工具箱提供的控件集中选择“列表控件”,而不是“列表框” 。如果您需要列标题,请将View属性(在Appearance下)设置为Report。
您可能还想将Sort属性(在Behaviour下)设置为Ascending;这会将样式应用
LVS_SORTASCENDING
到控件。