Здравствуйте, fedko, Вы писали:
F>Проблема: При создании ListView устанвливается некоторый вид (Detail, List, Large icons, Small icons)
F>После создания пытаюсь его изменить, стиль окна меняется (проверено в Spy++), а окно остаётся прежним.
F>Код взят из Wizard к Visual C++.
F>Система: Windows 2000, Visual C++ .NET
F>Чтобы получить такое поведение надо:
F>Создать в Visual C++ .NET новый проект -> MFC Application
F>Проект назовём к примеру Test
F>В Application Style ставим
F> Application Type = Single Document
F> Project Style = Windows Explorer
F>Остальные настройки по умолчанию.
F>В файле TestView.cpp функцию void CTestView::OnInitialUpdate() меняем на:
F>F>void CTestView::OnInitialUpdate()
F>{
F> CListView::OnInitialUpdate();
F> GetListCtrl().InsertColumn(0, "Col 1");
F> GetListCtrl().InsertItem(0, "Item 1");
F> GetListCtrl().InsertItem(1, "Item 2");
F>}
F>
F>Запускаем программу.
F>По идее при нажатии в меню View на Large Icons, Small Icons, List и Detail должен происходить переход к нужному виду, а этого не происходит! При этом что самое интересное, если посмотреть на стиль окна (например, при помощи Spy++), то стили действительно меняются, но вид окна остаётся прежним!
F>Вопросы:
F>Как это вылечить?
F>И проблема ли это именно Win2000 или VC7 или их комбинации? (К сожалению уже потер VC6 и проверить не могу).
F>Если вы попробовали сделать как я написал и у вас работает, plz, напишите вашу конфигурацию (версию VC, SDK, Windows, Сервис паков)
На VC6 SP5 я делал так:
void CSampleApp::OnChangeView(void)
{
RECT rc;
static DWORD adwStyles[] = {
LVS_ICON, LVS_SMALLICON, LVS_LIST, LVS_REPORT
};
CMainWnd* pWnd = DYNAMIC_DOWNCAST(CMainWnd, AfxGetMainWnd());
const MSG* pMsg = pWnd->GetCurrentMessage();
CMenu* pSubMenu = pWnd->GetMenu()->GetSubMenu(1);
UINT fuState = pSubMenu->GetMenuState(LOWORD(pMsg->wParam), MF_BYCOMMAND);
if ((fuState & MF_CHECKED) == 0) {
int nIndex = LOWORD(pMsg->wParam) - IDM_VIEW_LARGEICONS;
// change style as needed
DWORD dwStyle = ::GetWindowLong(pWnd->m_listIcons, GWL_STYLE);
dwStyle = (dwStyle & ~LVS_TYPEMASK) | adwStyles[nIndex];
::SetWindowLong(pWnd->m_listIcons, GWL_STYLE, dwStyle);
// without next 3 lines scrolling will be incorrect
pWnd->m_listIcons.MoveWindow(0, 0, 0, 0);
pWnd->GetClientRect(&rc);
pWnd->m_listIcons.MoveWindow(&rc);
// adjust "View" menu
pSubMenu->CheckMenuRadioItem(0, 3, nIndex, MF_BYPOSITION);
}
}