Здравствуйте, ice_vita, Вы писали:
_>Создается property sheet, делается AddPage страниц. В OnInitDialog каждой страницы:
_> VERIFY(m_list.InsertColumn(column++, L"бла1", LVCFMT_LEFT, 60) != -1);
_> VERIFY(m_list.InsertColumn(column++, L"бла2", LVCFMT_LEFT, 60) != -1);
_> VERIFY(m_list.InsertColumn(column++, L"бла3", LVCFMT_LEFT, 60) != -1);
_>Необходимо добавить эти колонки раньше- в конструкторе, т.к. к листконтролу обращаются до вызова функции OnInitDialog. Но если добавить эти строчки в конструктор то выходит глюк. видимо m_list еще нету. Как поступить?
Может проблема тут?
Цитата из MSDN:
AddPage adds the CPropertyPage object to the CPropertySheet object's list of pages but does not actually create the window for the page. The framework postpones creation of the window for the page until the user selects that page.
Т.е. страницы создаются только когда пользователь нажмёт на соответствующую им вкладку.
Например вот такой код:
CPropertySheet ps( "Sheet", this, 0 );
ps.AddPage(&page1);
ps.AddPage(&page2);
ps.DoModal();
И не выйдет из другого потока обратиться к элементу на странице page2, так как он не создан.
Но можно изменить код так:
CPropertySheet ps( "Sheet", this, 0 );
ps.AddPage(&page1);
ps.AddPage(&page2);
// перебираем все страницы
int i;
int nPages = ps.GetPageCount();
for( i = 0; i < nPages; i++ ) ps.SetActivePage( i );
// устанавливаем нужную
ps.SetActivePage( 0 );
// показываем окно
ps.DoModal();
В этом случае все страницы будут созданы не дожидаясь пока пользователь кликнет на нужную вкладку. И все контролы на страницах будут также созданы.
ps. Писал по памяти, может что и упустил.