Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу создать список в окне

6.1K
21 августа 2008 года
Gfunk
42 / / 31.01.2006
В MDI приложении создал окно CMDIChildWindow.В классе окна определил переменную типа CListCtrl FileBox и в функции OnCreateWindow окна вызвал FileBox.Create(LVS_LIST|LVS_REPORT|LVS_EDITLABELS|WS_VISIBLE|WS_CHILD,rect,this,1000)
затем добавил колонку в ListBox:
FileBox.InsertColumn(0,_T("name"),LVCFMT_LEFT,rect.Width() /3);
Проблема в том что ListControl не появляется.Вылазит только чистое окно без контрола.
Вот код:

/////////////////////////////////////////////////////////////////
class FileWnd:public CMDIChildWnd
{
public:

FileWnd();
virtual ~FileWnd();

private:

afx_msg int OnCreate(LPCREATESTRUCT);
afx_msg void OnPaint();
afx_msg void OnSize(UINT,int,int);
afx_msg void OnDestroy();
virtual void OnInitialUpdate( );
virtual BOOL PreCreateWindow( CREATESTRUCT& cs );
CListCtrl FileBox;
DECLARE_MESSAGE_MAP();

};

FileWnd::FileWnd()
{
}

FileWnd::~FileWnd()
{

}

BEGIN_MESSAGE_MAP(FileWnd,CMDIChildWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_DESTROY()
END_MESSAGE_MAP()

BOOL FileWnd::PreCreateWindow( CREATESTRUCT& cs )
{
cs.lpszName = "hello";
//cs.dwExStyle = WS_EX_CLIENTEDGE;
//cs.lpszClass = AfxRegisterWndClass(0);

return CMDIChildWnd::PreCreateWindow(cs);;
}

int FileWnd::OnCreate(LPCREATESTRUCT lpc)
{
if(CMDIChildWnd::OnCreate(lpc)==-1)
return -1;

CRect rect;
GetClientRect(&rect);

FileBox.Create(LVS_LIST|LVS_REPORT|LVS_EDITLABELS|WS_VISIBLE|WS_CHILD,rect,this,1000);

FileBox.InsertColumn(0,_T("name"),LVCFMT_LEFT,rect.Width() /3);

return 0;
}

void FileWnd::OnPaint()
{
CMDIChildWnd::OnPaint();
}

void FileWnd::OnSize(UINT Code,int cx,int cy)
{
CMDIChildWnd::OnSize(Code,cx,cy);
}

void FileWnd::OnDestroy()
{
}
14
22 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Он создается ПОД окном которое ты в итоге видишь. Создавай его на View-е..

Нет вру.. создается.. Только его на белом не видно :).

Короче вот так его видно:
 
Код:
FileBox.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_ICON,CRect(50,5,150,150),this,2);

но все-таки он продолжает вести себя как-то странно..

Мда :) Все-таки изначально я был прав! Создавай на View-е.
6.1K
23 августа 2008 года
Gfunk
42 / / 31.01.2006
Наследую класс от CListView:

class FileView:public CListView
{

public:
FileView();
virtual ~FileView();

private:
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );
virtual BOOL PreCreateWindow( CREATESTRUCT& cs );

DECLARE_MESSAGE_MAP();

};

затем в классе окна создаю FileView* pFileBox;
а в функции OnCreate:
pFileBox = new FileView;
pFileBox->Create(NULL,"test",WS_VISIBLE|WS_CHILD,rect,this,1);
CListCtrl& ListCtrl = pFileBox->GetListCtrl();
ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_ICON,CRect(10,10,150,150),pFileBox,2);
возникает ошибка ASSERT на последней строчке.

Вторую тему можно сносить создал по ошибке.
14
25 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Если наследуешь от CListView, отдельный контрол ListView тебе не нужен, если я правильно понимаю что ты делаешь..

ПыСы. Воспользуйся визардом студии
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог