Eu tenho uma janela básica baseada em diálogo herdada de CDialogImpl em WTL:
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;
}
Ao inicializar a caixa de diálogo no OnInitDialog, tento preencher esta visualização de lista que criei no editor de recursos e a nomeei 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;
}
Mas mesmo após a chamada para InsertColumn não vejo nenhuma coluna, tentei outras sobrecargas para esta função que exigem a criação de um LVCOLUMNA , mas também não funcionou. Por que isso está acontecendo?
Se você abrir seu
.rc
arquivo de recurso ( ) em um editor de texto, que tipo de controle você verá especificado na linha junto comIDC_LIST
?Se for,
LISTBOX
então você tem um tipo de controle errado.LISTBOX
é para o controle List Box (aCListBox
classe). Para List Control (asCListCtrl
classes e similares), a linha RC típica ficaria assim:Em outras palavras, se você usar o Editor de Recursos (no Visual Studio), certifique-se de selecionar "List Control" e não a "List Box" do conjunto de controles oferecidos na caixa de ferramentas. E se você quiser cabeçalhos de coluna, defina a propriedade View (em Appearance ) como Report .
Você também pode definir a propriedade Sort (em Comportamento ) como Crescente ; que aplicará o
LVS_SORTASCENDING
estilo ao controle.