Есть аппликашка SDI с табами:
Проблема: при обработке WM_SIZE внутри табов меняется размер только в пределах прямоугольника, заданного шаблоном ресурса. Т.е. меньше - пожалуйста - а больше - никак!
- в главном окне (МаinFrame) есть member TabControl, на который 'вешаются' все остальные tabs-dialog windows.
- при обработке WM_SIZE - mainFrame -
И всё работает вполне корректно (т.е. относительно MainFrame)
А вот внутри табов - какая-то ерунда:
Стартуем аппликашку
Проблема: при обработке WM_SIZE внутри табов меняется размер только в пределах прямоугольника, заданного шаблоном ресурса. Т.е. меньше - пожалуйста - а больше - никак!
- в главном окне (МаinFrame) есть member TabControl, на который 'вешаются' все остальные tabs-dialog windows.
- при обработке WM_SIZE - mainFrame -
CRect r, lpRect;
m_wndStatusBar.GetWindowRect(r);
GetWindowRect(&lpRect);
// Get size of dialog window.
GetClientRect(&lpRect);
lpRect.bottom-=r.Height();//mind StatusBar height
// Move the tab control to the new position and size.
m_tabCtrl.MoveWindow(&lpRect, TRUE);И всё работает вполне корректно (т.е. относительно MainFrame)
А вот внутри табов - какая-то ерунда:
Стартуем аппликашку
![]() | "тёмная часть" - должна занимать всё пространство таба, но этого не делает. Т.е. она занимает максимум, "позволенный" размерами шаблона IDD_DIALOG3 из ресурса Это ясно видно на последующих 2х скриншотах. CDialog::OnSize(nType, cx, cy); |
![]() | Аппликашка "минимизирована" до размера, меньше размеров шаблона IDD_DIALOG3 из ресурса. Ресайз "тёмного" окна происходит корректно, нижний скролл бар занимает столько места, сколько надо. |
![]() | Аппликашка "увеличена" до размера, чуть меньше, чем размер шаблона IDD_DIALOG3 по вертикали (смотри "обрезанный" скроллер) и серьёзно больше по горизонтали Причём при таком размере по горизонтали скролл бар должен был вообще исчезнуть! Т.е. ресайз "тёмного" окна происходит некорректно. |



no subject
Date: 2006-08-24 10:27 am (UTC)CDialog::OnSize(nType, cx, cy);
if (cx <= 1 || cy <= 1 )return;
if(m_gridCtrl.m_hWnd && cx && cy){
m_gridCtrl.MoveWindow(0, 0, cx,cy, TRUE);
//m_gridCtrl.BringWindowToTop();
}
ты уверен что cx, cy у тебя правильные?
no subject
Date: 2006-08-24 10:36 am (UTC)no subject
Date: 2006-08-24 10:46 am (UTC)а если гриду дать cx=10, cy=20 он проигнорирует это?
no subject
Date: 2006-08-24 11:02 am (UTC)no subject
Date: 2006-08-24 08:31 pm (UTC)Kak будто бы поверх моей гриды лежит маска, размером с DIALOG template.
т.е.:
Tут маска--------v
-----------------|-----------|
| | тут |
| тут всё видно | серое |
|________________| поле |
| |
| |
|____________________________|
Если size меньше "маски", то всё классно ресайзается.
(под маской, кстати, всё тоже ресайзается, но как будто грид "под маской" т.е. в куске за пределами "окошка" где "тут всё видно" всё залито серым (смотри картинки в посте)
И также видно, что грид таки растягивается как надо... но 'покрыт маской".
FUCK-FUCK-FUCK :-(
no subject
Date: 2006-08-27 06:23 am (UTC)spy++ спасет "отца русской демократии"!))
кроме иерархии он тебе и реальные размеры всех окошек покажет и все WM_SIZE отследишь
no subject
Date: 2006-08-27 06:47 am (UTC)Сказал, что ClientRect у внутреннего окна НЕ ИЗМЕНЯЕТСЯ что бы я не делал
no subject
Date: 2006-08-27 08:16 am (UTC)- Dialog1, rect: 617x408<- не меняется при ресайзе!!!
- Dialog2, rect: 617x408<- не меняется при ресайзе!!!
- Dialog3, rect: 617x408<- не меняется при ресайзе!!!
- GridCtrl, rect 770x482
no subject
Date: 2006-08-27 08:29 am (UTC)тут с статье вроде бы подразумевается что ты сам должен делать ресайз чилдам твоего таб контроля при WM_SIZE
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/tab/tab.asp
no subject
Date: 2006-08-27 07:27 pm (UTC)no subject
Date: 2006-08-27 07:29 pm (UTC)Статью читал :-(
Но видимо что-то упустил
сдаюса...
Date: 2006-08-28 08:23 am (UTC)Re: сдаюса...
Date: 2006-08-28 10:22 am (UTC)no subject
Date: 2006-08-29 10:37 pm (UTC)Там что-то с размерами не так: есть размеры, что система не принимает :-)
no subject
Date: 2006-08-30 05:11 am (UTC)