MFC узнать высоту StatusBar'а
От: Дмитрий Кентерберийский Россия  
Дата: 24.07.09 08:04
Оценка:
Приветствую.

В MFC новичек, сталкнулся с проблемой — не могу найти способ узнать высоту StatusBar, метод GetWindowRect возвращает непонятно что.

Создаю программу в которой таблица (CListCtrl) должна быть развернута на все окно, поэтому по событию главного окна ON_WM_PAINT задаю новые размеры таблице отталкиваясь от размеров самого окна, но таблица перекрывает StatusBar, нужно знать высоту StatusBar что бы скоректировать высоту таблицы.

24.07.09 13:34: Перенесено из 'C/C++'
mfc cstatusbar
Re: MFC узнать высоту StatusBar'а
От: GPF Россия  
Дата: 24.07.09 08:17
Оценка:
Здравствуйте, Дмитрий Кентерберийский, Вы писали:

ДК>Приветствую.


ДК>В MFC новичек, сталкнулся с проблемой — не могу найти способ узнать высоту StatusBar, метод GetWindowRect возвращает непонятно что.


ДК>Создаю программу в которой таблица (CListCtrl) должна быть развернута на все окно, поэтому по событию главного окна ON_WM_PAINT задаю новые размеры таблице отталкиваясь от размеров самого окна, но таблица перекрывает StatusBar, нужно знать высоту StatusBar что бы скоректировать высоту таблицы.


Я так понял вы испоользуете CStatusBar, попробуйте вызвать GetItemRect может вам поможет.
Re: MFC узнать высоту StatusBar'а
От: Bell Россия  
Дата: 24.07.09 08:49
Оценка:
Здравствуйте, Дмитрий Кентерберийский, Вы писали:

ДК>Создаю программу в которой таблица (CListCtrl) должна быть развернута на все окно, поэтому по событию главного окна ON_WM_PAINT задаю новые размеры таблице отталкиваясь от размеров самого окна, но таблица перекрывает StatusBar, нужно знать высоту StatusBar что бы скоректировать высоту таблицы.


Не самая удачная идея двигать контролы в ответ на WM_PAINT — лучше это делать сначала в OnInitialUpdate а затем в OnSize. Что за тип приложения? Как определяется размер окна?
Любите книгу — источник знаний (с) М.Горький
Re: MFC узнать высоту StatusBar'а
От: kankan Украина  
Дата: 24.07.09 08:52
Оценка:
Здравствуйте, Дмитрий Кентерберийский, Вы писали:

ДК>Приветствую.


ДК>В MFC новичек, сталкнулся с проблемой — не могу найти способ узнать высоту StatusBar, метод GetWindowRect возвращает непонятно что.


ДК>Создаю программу в которой таблица (CListCtrl) должна быть развернута на все окно, поэтому по событию главного окна ON_WM_PAINT задаю новые размеры таблице отталкиваясь от размеров самого окна, но таблица перекрывает StatusBar, нужно знать высоту StatusBar что бы скоректировать высоту таблицы.


надо отталкиваться от размеров клиентской части окна и не париться с высчитыванием позиции и размером таблицы
GetClientRect() возвращает эти самые размеры — вызывай ее для окна и просто юзай полученные данные как позицию/размер таблицы
Re[2]: MFC узнать высоту StatusBar'а
От: Дмитрий Кентерберийский Россия  
Дата: 24.07.09 12:18
Оценка:
Здравствуйте, GPF, Вы писали:

GPF>Я так понял вы испоользуете CStatusBar, попробуйте вызвать GetItemRect может вам поможет.


Насколько я понимаю GetItemRect возвращает рамку одного из индикаторов StatusBar'a и при том эти координаты относительны от верхней левой координаты самого StatusBar'a.
Re[2]: MFC узнать высоту StatusBar'а
От: Дмитрий Кентерберийский Россия  
Дата: 24.07.09 12:22
Оценка:
Здравствуйте, Bell, Вы писали:

B>Не самая удачная идея двигать контролы в ответ на WM_PAINT — лучше это делать сначала в OnInitialUpdate а затем в OnSize. Что за тип приложения? Как определяется размер окна?


Точно! Как говорится зачем жрать капусту если есть картошка )
Окно приложения самое простое — таблица во весь экран + StatusBar. Размеры главного окна определяю методом GetWindowRect().
Re[2]: MFC узнать высоту StatusBar'а
От: Дмитрий Кентерберийский Россия  
Дата: 24.07.09 12:31
Оценка:
Здравствуйте, kankan, Вы писали:

K>надо отталкиваться от размеров клиентской части окна и не париться с высчитыванием позиции и размером таблицы

K>GetClientRect() возвращает эти самые размеры — вызывай ее для окна и просто юзай полученные данные как позицию/размер таблицы

Насколько я понял метод GetClientRect() возвращает рамку клиентской области, но StatusBar при создании размещается в ней же. Проверил в отладчике вызов GetClientRect() до создания StatusBar'a и после возвращает один и тот-же результат.
Re[3]: MFC узнать высоту StatusBar'а
От: Андрей Россия  
Дата: 27.07.09 08:20
Оценка:
Здравствуйте, Дмитрий Кентерберийский, Вы писали:

skip

ну а кто мешает получить размеры StatusBar через вызов GetWindowRect, а потом посчитать его высоту (rect.bottom — rect.top)?
Re: MFC узнать высоту StatusBar'а
От: Дмитрий Кентерберийский Россия  
Дата: 30.07.09 05:32
Оценка:
Гаспада сердечно благадарю за помощ
резюмируем:

...
Rect rcMain, rcStBar, rcLsCtrl;
GetClientRect(&rcMain);
m_wndStatusBar.GetItemRect(0,&rcStBar); // оказывается высота элемента = высоте клиенской части элемента + ширина рамки самого Бара * 2
rcLsCtrl.left = rcMain.left;
rcLsCtrl.top = rcMain.top;
rcLsCtrl.right = rcMain.right;
rcLsCtrl.bottom = rcMain.bottom-rcStBar.bottom;
m_wndListCtrl.Create(...,rcLsCtrl,...);
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.