towndwarf: (Default)
[personal profile] towndwarf
Есть аппликашка SDI с табами:
Проблема: при обработке 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)
А вот внутри табов - какая-то ерунда:
Стартуем аппликашку
8.8 KB "тёмная часть" - должна занимать всё пространство таба, но этого не делает.
Т.е. она занимает максимум, "позволенный" размерами шаблона IDD_DIALOG3 из ресурса
Это ясно видно на последующих 2х скриншотах.

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();
}

5.9 KBАппликашка "минимизирована" до размера, меньше размеров шаблона IDD_DIALOG3 из ресурса.
Ресайз "тёмного" окна происходит корректно, нижний скролл бар занимает столько места, сколько надо.
8.5 KBАппликашка "увеличена" до размера, чуть меньше, чем размер шаблона IDD_DIALOG3 по вертикали (смотри "обрезанный" скроллер)
и серьёзно больше по горизонтали
Причём при таком размере по горизонтали скролл бар должен был вообще исчезнуть!
Т.е. ресайз "тёмного" окна происходит некорректно.

Date: 2006-08-24 10:27 am (UTC)
From: [identity profile] vskab.livejournal.com
а тут

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 у тебя правильные?

Date: 2006-08-24 10:36 am (UTC)

Date: 2006-08-24 10:46 am (UTC)
From: [identity profile] vskab.livejournal.com
а таб-диаложке тоже ресайз делается?
а если гриду дать cx=10, cy=20 он проигнорирует это?

Date: 2006-08-24 11:02 am (UTC)
From: [identity profile] towndwarf.livejournal.com
Короче - видимо это какой-то баг ТабКонтрола - он не посылал WM_SIZE детям!/т.е. посылал не во всех случаях.

Date: 2006-08-24 08:31 pm (UTC)
From: [identity profile] towndwarf.livejournal.com
Blin. 3й день мозгоёбства с WM_SIZE:
Kak будто бы поверх моей гриды лежит маска, размером с DIALOG template.
т.е.:

Tут маска--------v
-----------------|-----------|
|                | тут       |
| тут всё видно  | серое     |
|________________| поле      |
|                            |
|                            |
|____________________________|

Если size меньше "маски", то всё классно ресайзается.
(под маской, кстати, всё тоже ресайзается, но как будто грид "под маской" т.е. в куске за пределами "окошка" где "тут всё видно" всё залито серым (смотри картинки в посте)
И также видно, что грид таки растягивается как надо... но 'покрыт маской".

FUCK-FUCK-FUCK :-(

Date: 2006-08-27 06:23 am (UTC)
From: [identity profile] vskab.livejournal.com
может у грида парентом или овнером какое-то третье окошко которому ты ресайз не делаешь?
spy++ спасет "отца русской демократии"!))
кроме иерархии он тебе и реальные размеры всех окошек покажет и все WM_SIZE отследишь

Date: 2006-08-27 06:47 am (UTC)
From: [identity profile] towndwarf.livejournal.com
Spy был применён ещё в 1й день мучений :-(
Сказал, что ClientRect у внутреннего окна НЕ ИЗМЕНЯЕТСЯ что бы я не делал

Date: 2006-08-27 08:16 am (UTC)
From: [identity profile] towndwarf.livejournal.com
-SysTabControl32, rect: 773x492
    - Dialog1, rect: 617x408<- не меняется при ресайзе!!!
    - Dialog2, rect: 617x408<- не меняется при ресайзе!!!
    - Dialog3, rect: 617x408<- не меняется при ресайзе!!!
        - GridCtrl, rect 770x482

Date: 2006-08-27 08:29 am (UTC)
From: [identity profile] vskab.livejournal.com
а Dialog3 ты явно ресайз делаешь или ждешь что таб контроль за тебя сделает?

тут с статье вроде бы подразумевается что ты сам должен делать ресайз чилдам твоего таб контроля при WM_SIZE
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/tab/tab.asp

Date: 2006-08-27 07:27 pm (UTC)
From: [identity profile] towndwarf.livejournal.com
Делаю сам :-(

Date: 2006-08-27 07:29 pm (UTC)
From: [identity profile] towndwarf.livejournal.com
Делаю сам :-(
Статью читал :-(
Но видимо что-то упустил

сдаюса...

Date: 2006-08-28 08:23 am (UTC)
From: [identity profile] vskab.livejournal.com
когда поймешь в чем причина была - расскажи. самому интересно)

Re: сдаюса...

Date: 2006-08-28 10:22 am (UTC)

Date: 2006-08-29 10:37 pm (UTC)
From: [identity profile] towndwarf.livejournal.com
Решение есть, его мой коллега нашёл.
Там что-то с размерами не так: есть размеры, что система не принимает :-)

Date: 2006-08-30 05:11 am (UTC)
From: [identity profile] vskab.livejournal.com
бывает)

Profile

towndwarf: (Default)
towndwarf

June 2019

S M T W T F S
      1
2345678
9 1011121314 15
161718192021 22
2324252627 2829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 27th, 2026 02:17 pm
Powered by Dreamwidth Studios