Форум программистов CodeGuru
18 Январь 2018, 18:04:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Status Bar в диалоговом приложении  (Прочитано 16205 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BallON
Интересующийся
**
Офлайн Офлайн

Сообщений: 17


Просмотр профиля
« : 27 Январь 2007, 18:38:50 »

Приветствую.

Пытаюсь подключить к диалоговому окну эл-т Status Bar (VC++ 6).
Что делаю:
1. в Н-файле окна диалога создаю обьект э-та:
CStatusBar m_wndStatusBar;
2. вкл WM_CREATE для окна через ClassWizard
3. Задаю строковые ресурсы для ID_INDICATOR_OpenFile и ID_INDICATOR_PZ.
4. создаю статус бар и создаю массив идентификаторов:
int mainDLG::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ ...
m_wndStatusBar.Create(this, WS_CHILD|WS_VISIBLE|
                        CCS_BOTTOM, AFX_IDW_STATUS_BAR);
static UINT indicators[]={ID_SEPARATOR,ID_INDICATOR_OpenFile,
                                    ID_INDICATOR_PZ};
m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
m_wndStatusBar.SetPaneText (0, "Проверка", TRUE);
}

Жму Build, все проходит без ошибок.
Запускаю приложение.... никакого статус бара нет Грустный

Где ошибка?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 29 Январь 2007, 01:26:56 »

Вообще, CStatusBar не особо подходит для размещения в диалоге - это класс элемента управления, наследуемый от CControlBar. А CControlBar - для применения во фреймах. Там главные фичи - динамический Docking к краям фрейма (можно зацепить, перетащить, прицепить в другое место). Для этого и нужны CStatusBar, CToolBar, и.т.д.
Есть класс CStatusBarCtrl - это простой враппер вокруг виндового контрола (без наворотов). Вот его, в принципе, можно использовать в диалоге.

То есть, объявляем член класса как:
Код:
CStatusBarCtrl m_wndStatusBar;


Создаем:
Код:
m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|SBARS_SIZEGRIP,
     CRect(0,0,0,0), this, AFX_IDW_STATUS_BAR);

Только вот текст придется ручками обновлять в панельке.

Но можно, впринципе, и при помощи CStatusBar в диалог статус бар вкрячить.
См. например, это: DLGCBR32 Sample: Demonstrates Adding a Status Bar and Toolbar to Dialog Boxes
Записан

POMAH
Интересующийся
**
Офлайн Офлайн

Сообщений: 15


Просмотр профиля
« Ответ #2 : 31 Март 2007, 10:47:54 »

Мне еще помогло подключение файла mscomctl32.lib(или mscommctl32.lib, не помню) к проекту. И в обработчике создания диалога надо вызвать функцию InitCommonControls().
Записан
BallON
Интересующийся
**
Офлайн Офлайн

Сообщений: 17


Просмотр профиля
« Ответ #3 : 30 Ноябрь 2008, 16:41:32 »

Вообще, CStatusBar не особо подходит для размещения в диалоге - это класс элемента управления, наследуемый от CControlBar.

Большое спасибо. Здорово помогло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!