Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание Status Bar, проблема 
:(
    Опции темы
GremlinProg
Дата 15.8.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Dem_max, речь не о ограничении внешних размеров фрейма, читай вопрос внимательно:

Цитата(MenSem @  13.8.2008,  16:35 Найти цитируемый пост)
Я так понимаю нужно ограничивать размеры MDICLIENT  что бы дочернии форы не залазили сверху на статус бар и сворачивались выше сатус бара?

MDICLIENT - дочернее, а не перекрытое окно

MenSem,  поскольку статус - контрол простой до безобразия, в него практически никогда не суют контролы, есть еще более корректный и облегченный способ создания статус бара - это резервирование неклиентской области под статус в WM_NCCALCSIZE и рисование в нем чего-либо в WM_NCPAINT, тогда дополнительно ничего позиционировать не придется, т.к. статус уже не будет отображаться в клиентской области (не будет так же и лишней нагрузки - окна статус бара (по моему, этот контрол вообще создан только для очень ленивых программистов)

на форуме и в MSDN достаточно подробной информации на эту тему, нужно только поискать


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 15.8.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:09
--------------------
PM MAIL   Вверх
GremlinProg
Дата 15.8.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(MenSem @  15.8.2008,  20:46 Найти цитируемый пост)
+ еще косяк: когда дочерняя форма максимизируется, она закрывет статус бар, т.е. статус бар полностью пропадает.

см. пред-предыдущий пост, я уже писал как с этим бороться

процедура фрейма:
Код

case WM_NCCALCSIZE:{
    RECT&ncrc     = *(RECT*)lParam;
    RECT org     = ncrc;
    //
    ::DefWindowProc(...);
    //
    status_rect        = ncrc;
    status_rect.top    = status_rect.bottom - status_bar_height;
    //
    ::SubtractRect(&ncrc,&ncrc,&status_rect);
    ::OffsetRect(&status_rect,-org.left,-org.top);
    //
    break;
}
case WM_NCPAINT:{
    HDC hdc    = ::GetWindowDC(hWnd);
    //
    ::DrawEdge(hdc,&status_rect,EDGE_RAISED,BF_RECT|BF_MIDDLE);
    //
    ::ReleaseDC(hWnd,hdc);
    break;
}

здесь статус рисует всего лишь одна функция ::DrawEdge(...), если хочешь разнообразия, смени её на то, что нужно

точно так же можно сделать и тулбар, но там сложнее, это не уложится ни в какой топик форума,
принципы создания контролов в неклиентской области я уже не раз расписывал

PS: код не проверял, но пока вроде ошибок не вижу, пиши, если что


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 15.8.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:10
--------------------
PM MAIL   Вверх
GremlinProg
Дата 15.8.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



status_bar_height - высота статус бара,
status_rect - прямоугольник статус бара в неклиентской области


задать изначально нужно только status_bar_height, остальное вычислится самостоятельно


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 15.8.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:10
--------------------
PM MAIL   Вверх
GremlinProg
Дата 15.8.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



в WM_NCPAINT ::DefWindowProc(...) вызови вернее DefFrameProc

Добавлено через 1 минуту и 56 секунд
стандартная обработка в любом случае должна быть, я ж ни где не писал return

Добавлено через 3 минуты
хотя в WM_NCCALCSIZE можно заменить break return'ом, т.к. используется префиксная форма


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 15.8.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:10
--------------------
PM MAIL   Вверх
GremlinProg
Дата 15.8.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



) посмотри внимательно на код, смотри, чтобы вызовы DefFrameProc не дублировались
по скрину хорошо видно, что DefFrameProc вызван 2 раза, что привело к двойному вычету границ
Цитата(GremlinProg @  15.8.2008,  22:33 Найти цитируемый пост)
хотя в WM_NCCALCSIZE можно заменить break return'ом, т.к. используется префиксная форма

"можно" заменить на "нужно"

Это сообщение отредактировал(а) GremlinProg - 15.8.2008, 21:37


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 16.8.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:10
--------------------
PM MAIL   Вверх
GremlinProg
Дата 16.8.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(MenSem @  15.8.2008,  22:26 Найти цитируемый пост)
Меню ни одно не открывается, сразу ошибка

это скорее всего связано с чем-то другим, показывай процедуру окна


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 16.8.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:11
--------------------
PM MAIL   Вверх
GremlinProg
Дата 16.8.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



на сообщение WM_NCCALCSIZE lParam всегда указывает как минимум на RECT, следовательно ошибка происходит на другое сообщение, убедись в том, что перед case WM_NCCALCSIZE стоит break

здесь речь идет о создании статусбара, а не о том, где у тебя там синтаксические ошибки
мы ведь здесь не можем исправлять их телепатически

раз ты не хочешь показывать код, значит исправляй все сам

Добавлено через 4 минуты и 23 секунды
статус бар и не будет рисоваться, пока все ошибки не будут исправлены


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 16.8.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:11
--------------------
PM MAIL   Вверх
GremlinProg
Дата 16.8.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



думай, решай, я уже говорил, есть простой способ решить проблему: выложить код


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1259 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.