на счет того что у тебя закрываются вкладки
когда ты получаешь GetClientRect то левый верхний угол будет (0,0) (ЭТО ОТНОСИТЕЛЬНО КЛИЕНТСКОЙ ЧАСТИ ОКНА)
а в Create нужно вставить координаты относительно реального 0,0 положения окна
суть следующая
после этого пульни это Create
(не уверен за минусы и плюсы в параметрах DeflateRect поиграйся посмотри что там получается. они нужна потому как к этому времени в rect верхний левый угол будет отрицательный и мы сдвигаем координаты для диалога на разницу между верхним углом клиентской области и верхним углом таба )
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[16]: Проблемы с перерисовкой, хотя OnPaint() есть
Здравствуйте, BuHHunyx, Вы писали:
BHH>Здравствуйте, DimpLe, Вы писали:
DL>>на счет того что у тебя закрываются вкладки
BHH>По моему красивше:
BHH>RECT rc; BHH>GetClientRect(&rc); BHH>tab.AdjustRect(FALSE, &rc); BHH>::SetWindowPos(m_hVisibleFrame, NULL, BHH> rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, BHH> SWP_NOACTIVATE | SWP_NOZORDER);
возможно это и "красивше" (красота понятие субъективное), но это не является более правильным.
1. Сразу создается окно, а потом передвигается, более парвильно сразу создать окно с нужными размерами. Нет лишних действий.
2. когда ты создаешь 3 закладки то и передвигать тебе нужно будет 3 диалога.
а расчитав один раз размер ты создаешь все три диалога с нужными размерами.
тобишь нет трех лишних действий .
З.Ы. не претендую на оптимальность действий, но то что размер лучше расчитать до создания закладок — это факт.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[18]: Проблемы с перерисовкой, хотя OnPaint() есть
Здравствуйте, DimpLe, Вы писали:
DL>Здравствуйте, BuHHunyx, Вы писали:
BHH>>Здравствуйте, DimpLe, Вы писали:
DL>>>на счет того что у тебя закрываются вкладки
BHH>>По моему красивше:
BHH>>RECT rc; BHH>>GetClientRect(&rc); BHH>>tab.AdjustRect(FALSE, &rc); BHH>>::SetWindowPos(m_hVisibleFrame, NULL, BHH>> rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, BHH>> SWP_NOACTIVATE | SWP_NOZORDER);
DL>возможно это и "красивше" (красота понятие субъективное), но это не является более правильным. DL>1. Сразу создается окно, а потом передвигается, более парвильно сразу создать окно с нужными размерами. Нет лишних действий. DL>2. когда ты создаешь 3 закладки то и передвигать тебе нужно будет 3 диалога. DL>а расчитав один раз размер ты создаешь все три диалога с нужными размерами. DL>тобишь нет трех лишних действий .
DL>З.Ы. не претендую на оптимальность действий, но то что размер лучше расчитать до создания закладок — это факт.
1. если таб ресайзится то нужно видимый фрейм ресайзить по любому. На мой взгляд лучше это делать в одном месте.
2. нет, только видимый фрейм
Вот код контролки которую использую в куче проектов.
Здравствуйте, BuHHunyx, Вы писали:
BHH>Здравствуйте, DimpLe, Вы писали:
DL>>Здравствуйте, BuHHunyx, Вы писали:
BHH>>>Здравствуйте, DimpLe, Вы писали:
DL>>>>на счет того что у тебя закрываются вкладки
BHH>>>По моему красивше:
BHH>>>RECT rc; BHH>>>GetClientRect(&rc); BHH>>>tab.AdjustRect(FALSE, &rc); BHH>>>::SetWindowPos(m_hVisibleFrame, NULL, BHH>>> rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, BHH>>> SWP_NOACTIVATE | SWP_NOZORDER);
BHH>1. если таб ресайзится то нужно видимый фрейм ресайзить по любому. На мой взгляд лучше это делать в одном месте. BHH>2. нет, только видимый фрейм
1. без спорно. Но делать это лучше в On_Size а не как он делает в
bool Cw32View::createTabs(void)
2. твоя мысль мне недоступна расшарь. почему при Create не нужно изменять размеры остальных диалогов?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[20]: Проблемы с перерисовкой, хотя OnPaint() есть
Здравствуйте, BuHHunyx, Вы писали:
BHH>Здравствуйте, DimpLe, Вы писали:
DL>>1. без спорно. Но делать это лучше в On_Size а не как он делает в DL>>bool Cw32View::createTabs(void)
BHH>в моем примере так и делается
Я лично предпочитаю менять размеры всех окон при WM_WINDOWPOSCHANGED
и не менять при переключении таба. Дело вкуса.
DL>>2. твоя мысль мне недоступна расшарь. почему при Create не нужно изменять размеры остальных диалогов?
BHH>тк. размер будет менятся в ОнСайз, размер при добавлении указывать не надо. Еще необходимо менять размер при переключении таба.
Это ты исходишь из того что после WM_CREATE ОБЯЗАТЕЛЬНО вызывается WM_SIZE (дабы изменить начальный размер окна) и вот тут вот начинаются нюансы. Нужна ссылочка на MSDN где об этом сказано, иначе это остается догадкой.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[22]: Проблемы с перерисовкой, хотя OnPaint() есть
Здравствуйте, DimpLe, Вы писали:
DL>>>2. твоя мысль мне недоступна расшарь. почему при Create не нужно изменять размеры остальных диалогов?
BHH>>тк. размер будет менятся в ОнСайз, размер при добавлении указывать не надо. Еще необходимо менять размер при переключении таба.
DL>Это ты исходишь из того что после WM_CREATE ОБЯЗАТЕЛЬНО вызывается WM_SIZE (дабы изменить начальный размер окна) и вот тут вот начинаются нюансы. Нужна ссылочка на MSDN где об этом сказано, иначе это остается догадкой.
табы добавляются гдето так
TCITEM tci = { 0 };
tci.mask = TCIF_TEXT;
tci.pszText = _T("четотам1");
m_WorkTab1Dlg1.Create(*this);
tab.InsertItem(0, &tci, m_WorkTab1Dlg1);
//...
tab.SetCurFocus(0); // здесь собственно и происходит ресайз
проблема в том что после создания таба сфокусирован таб с индексом 0, поэтому контрол не шлет нотификацию. в моей реализации я делаю это сам
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[13]: Проблемы с перерисовкой, хотя OnPaint() есть
От:
Аноним
Дата:
07.01.07 23:33
Оценка:
Здравствуйте, Darked, Вы писали:
D> //создаем объект диалога маски пальцев D> m_Mashtab = new CMashtab(pParent); D> m_Mashtab->Create(m_hWnd); D> m_Mashtab->MoveWindow(&rc); D> m_Mashtab->ShowWindow(SW_HIDE);
Возможно привести код класса CMashtab (например)?
Или любого таба.
Re[15]: Проблемы с перерисовкой, хотя OnPaint() есть