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

Поиск:

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


Бывалый
*


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

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



del

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


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

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



Код

#include <commctrl.h>
 Делал?
PM MAIL   Вверх
MenSem
Дата 9.8.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Читай MSDN внимательнее:
Цитата(MSDN)
Minimum DLL Version comctl32.dll 
Header commctrl.h 
Import library comctl32.lib 
Minimum operating systems Windows NT 3.51, Windows 95 

Код
#pragma comment (lib, "comctl32.lib")

PM   Вверх
MenSem
Дата 9.8.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del
 

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


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Телепаты в отпуске. Выкладывай код, как создаёшь statusbar, и что за ошибка.
PM   Вверх
MenSem
Дата 10.8.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Попробуй так
Код

#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")

   INITCOMMONCONTROLSEX icex;
   icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
   icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
   InitCommonControlsEx(&icex);

 
 hWndStatusBar = CreateStatusWindow( WS_CHILD | WS_VISIBLE,
                                       NULL,
                                       hWndMain,
                                       ID_STATUS_BAR);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
MenSem
Дата 11.8.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Новичок



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

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



Можно

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


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(MenSem @  11.8.2008,  14:00 Найти цитируемый пост)
А можно сделать так, что бы автоматом в строке состояние отображался текст, при наведении курсора на пункт меню, заданный в свойстве меню promt , как в MFC?

Это придётся делать вручную, обрабатывая сообщение WM_MENUSELECT.
Цитата(MenSem @  12.8.2008,  10:04 Найти цитируемый пост)
И еще вопрос: почему при изменении размеров главного окна status bar остается на прежнем месте? (на сообщение WM_SIZE не реагирует) 

При изменении размера окна отправь statusbar'у сообщение:
Код
SendMessage(hStatusBar, WM_SIZE, 0, 0);


PM   Вверх
MenSem
Дата 12.8.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(MenSem @  12.8.2008,  11:42 Найти цитируемый пост)
Можно чуть по подробней?

http://msdn.microsoft.com/en-us/library/ms646352(VS.85).aspx
Как работает это сообщение можешь в Spy++ посмотреть.


Цитата(MenSem @  12.8.2008,  11:42 Найти цитируемый пост)
hWndSbar - дескриптор status bar

Дескриптор верный? Проверял в отладчике значение переменной hWndSbar? Какая ОС?
PM   Вверх
MenSem
Дата 12.8.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



В MSDN сказано, что такое сообщение можно посылать статусбару.
Цитата(http://msdn.microsoft.com/en-us/library/bb760728(VS.85).aspx)
The window procedure automatically adjusts the size of the status bar whenever it receives a WM_SIZE message. Typically, when the size of the parent window changes, the parent sends a WM_SIZE message to the status bar.

У меня всё работает. Имхо, у тебя где-то проблема.
PM   Вверх
MenSem
Дата 12.8.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(MenSem @  12.8.2008,  13:45 Найти цитируемый пост)
Вообщем дошло в чем ошибка.

И в чём же была ошибка?
PM   Вверх
MenSem
Дата 12.8.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

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



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

Попробовал, действительно косяк, у меня тоже чилдрены закрывают статус бар или прячутся за него.
Как это побороть пока не знаю.
Может отлавливать момент сворачивания-разворачивания чилдов и направлять их в нужное русло?
PM MAIL   Вверх
GremlinProg
Дата 15.8.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

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

Добавлено через 1 минуту и 32 секунды
лучше вообще все контролы вручную позичионировать


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Для ограничения размеров окна MDI попробуй вот это, хотя я ниразу для MDI не пользовался
Цитата

The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size. 

WM_GETMINMAXINFO  
lpmmi = (LPMINMAXINFO) lParam; // address of structure 


типа так:
  LPMINMAXINFO mmi;
   mmi->ptMinTrackSize.x=380;
   mmi->ptMinTrackSize.y=400;



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
MenSem
Дата 15.8.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



мда уж, подходящего смайла винград просто не знает

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

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


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



если хочешь найти ошибку - вся

Добавлено через 2 минуты и 23 секунды
ну пошли её приватным сообщением, если уж так страшно


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



RECT status_rect;

вынеси это определение глобально, вне процедуры окна, а локальные дубли убери

Добавлено через 26 секунд
это основная ошибка


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



советую привести процедуру к виду:
Код

switch(message){
   case :{}
   case :{}
   case :{}
}
return ::DefFrameProc(...)

сейчас она у тебя такого вида:
Код

switch(message){
   case :{}
   case :{}
   case :{}
  default:
     return::DefFrameProc(...)
}
return 0;

Добавлено @ 21:45
Цитата(MenSem @  16.8.2008,  23:41 Найти цитируемый пост)
Ну мог бы сразу сказать.

ну извини, не телепат

это объявление ты сам сделал, я его не писал

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


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



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

::DrawEdge(hdc,&status_rect,EDGE_RAISED,BF_TOP|BF_MIDDLE);


Добавлено @ 21:55
теперь можешь любой текст вывести, такм же, в сообщении WM_NCPAINT, после DrawEdge
Код

RECT rt;
::CopyRect(&rt,&status_rect);
::InflateRect(&rt,-1,-1);
::DrawText(hdc,"бла-бла",-1,&rt,DT_SINGLELINE | DT_VCENTER | DT_LEFT);


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


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



если нужен SIZE GRIP, то добавь такой код:
Код

RECT sg;
::CopyRect(&sg,&status_rect);
sg.left = sg.right - sg.bottom + sg.top;
::DrawFrameControl(hdc,&rc,DFC_SCROLL|DFCS_SCROLLSIZEGRIP,0);


Добавлено через 50 секунд
текст? смотри на пост выше

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

ресурсов для статусбара нет


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



поставь ::SetBkMode(hdc,TRANSPARENT); перед DrawText


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


Бывалый
*


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

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



del

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


Эксперт
****


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

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



ну, остальное уже сам, статус баром эта тема и должна закончиться


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


Бывалый
*


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

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



del

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Чет у вас сложно все со статус баром
вот код
Код

   hWndStatusBar = CreateStatusWindow( WS_CHILD | WS_VISIBLE,
                                       NULL,
                                       hWndMain,
                                       ID_STATUS_BAR);

   int pParts[3];   
   pParts[0]=200;
   pParts[1]=400;
   pParts[2]=1000;
   SendMessage(hWndStatusBar,SB_SETPARTS,3,(LPARAM)pParts);
   SendMessage(hWndStatusBar,SB_SETMINHEIGHT,10,0);

   HICON im1 = LoadImage(hInstance,MAKEINTRESOURCE(ID_ICON7), IMAGE_ICON,2,22, LR_DEFAULTCOLOR);
   SendMessage(hWndStatusBar,SB_SETICON,0,(LPARAM)wc.hIconSm);//im);
   SendMessage(hWndStatusBar, SB_SETTEXT,0| SBT_NOBORDERS,(LONG)"RadioButton 111");
   SendMessage(hWndStatusBar,SB_SETICON,1,(LPARAM)im1);
   SendMessage(hWndStatusBar,SB_SETTEXT,1 | SBT_NOBORDERS ,0);
   SendMessage(hWndStatusBar,SB_SETICON,2,(LPARAM)im1);
   SendMessage(hWndStatusBar,SB_SETTEXT,2| SBT_NOBORDERS,(LONG)"RadioButton 3");
   MoveWindow(hWndStatusBar, 0, 0, 0, 0, TRUE);

   RECT pr;
   SendMessage(hWndStatusBar, SB_GETRECT,1,(LPARAM) (LPRECT)&pr);

    hWndProgressBar = CreateWindowEx(
                NULL,
                "msctls_progress32",
                NULL,
                WS_VISIBLE | WS_CHILD,
                pr.left+7, pr.top+2, pr.right-207, pr.bottom-6, 
                hWndStatusBar,
                (HMENU)ID_PROGRESS_BAR,
                hInstance,
                NULL ); 
   SendMessage(hWndProgressBar, PBM_SETSTEP,10,0);
   SendMessage(hWndProgressBar, PBM_SETPOS,50,0); 



Результат ниже на картинке 
user posted image



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
MenSem
Дата 23.8.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

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


Бывалый
*


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

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



del

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



ShowWindow SW_SHOW / SW_HIDE
PM   Вверх
Dem_max
Дата 30.8.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



ShowWindow(hWndStatusBar ,SW_HIDE);
ShowWindow(hWndStatusBar ,SW_SHOW);


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
GremlinProg
Дата 30.8.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(MenSem @  30.8.2008,  20:20 Найти цитируемый пост)
А как прятать и обратно показывать статус бар?

нужно просто глобальный флаг завести, например
Код

BOOL status_visible;


в WM_NCCALCSIZE этот флаг проверять:
  если флаг поднят(status_visible == TRUE), то в WM_NCCALCSIZE ncrc модифицировать как положено,
  если флаг опущен(status_visible == FALSE), то ncrc не должен быть затронут, т.е. SubtractRect вызывать не нужно (в принципе и status_rect расчитывать так же не надо)

при рисовании в WM_NCPAINT смотрим так же на этот флаг:
  если флаг поднят, то рисуем статус бар в status_rect
  если флаг опущен, то ни чего не рисуем

теперь, чтобы скрыть статус, нужно сделать 2 телодвижения:
Код

status_visible = FALSE;
SetWindowPos(hWnd,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED|SWP_NOZORDER);


Добавлено @ 19:11
показать - аналогично:
Код

status_visible = TRUE;
SetWindowPos(hWnd,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED|SWP_NOZORDER);


Добавлено @ 19:12
понятно, что изначально status_visible дожен быть поднят:
Код

BOOL status_visible = TRUE;


Это сообщение отредактировал(а) GremlinProg - 30.8.2008, 19:13


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


Бывалый
*


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

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



del

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

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


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

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


 




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


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

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