WindowProc и все все все

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

27 фев 2005, 19:37

1 . Люди если в обычном окне нужно создать ещё несколько CHILD окон , то их прорисовкаой после создания и регистрации должна заниматься WinProc главного окна или же лучше создать свою оконную процедуру для дочерних.
Потому что очень сложная там прорисовка.На самом деле я создал уже отдельную процедуру, но идёт офигенная потеря памяти и в дальнейшем крах всего приложения. Ошибки вроде все исправил, может ли быть дело только в этом что у меня для дочерних окон своя процедура оконная.
2 . Кроме того я заметил что при вызове таких функций как CreateFontIndirect или CreateSolidBrush в WindowProc каждый раз выделяется память для созданных объектов, но по идее она должна освобождаться, привыходе из функции ведь объекты локальные. Или я чего то не понимаю.
:?: :?: :?: :?: :?: :?:
Tima
Сообщения: 43
Зарегистрирован: 23 сен 2004, 11:17
Откуда: Харьков
Контактная информация:

28 фев 2005, 11:05

Насчет второго - ответ навскидку (и помоему решение проблемы краха проги):
а хэндлы закрывать не надо? Если не вызовешь DeleteObject для них, будут жить возвращаемые этими функциями описатели до конца проги. Это же в любой книге мусолиться по 10 раз! Та и в NSDN тоже.
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

28 фев 2005, 15:57

Пасиба конечно но ничего нового я не узнал, то что весь мусор за собой убираю я даже и не вспоминал, так чтопроблема не в этом и мои
Ошибки вроде все исправил
и подрузамевало то что крах не оттуда растёт, просто надоело всё уже проверил.
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

28 фев 2005, 16:26

Давно писал под GDI, но насколько я помню, там какой-то bizarre/bdsm/bukkake интерфейс. Функция SelectObject возвращает значение старого хендла, выбранного в контекст, и этот старый хендл надо сохранить. При очистке надо сначала выбрать в контекст старый хендл, а потом можно удалять хендл нового объекта.
т.е чего-то типа

Код: Выделить всё

HFONT hFont = CreateFontIndirect(...);
HFONT hOldFont = SelectObject(hdc,hFont);
... Рисуем...
SelectObject(hdc,hOldFont);
DeleteObject(hFont);
2B OR NOT(2B) = FF
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

28 фев 2005, 17:06

Спасибо всем конечно, но дело было не в бобине...
Вот недавно методом тыка убирал куски кода и смотрел каким образом изменяется память, короче заметил что при вызове MoveWindow для дочерних окон происходит каждый раз новое выделение памяти. Может кто знает как с этим бороться.
Тогда ещё вопрос как при WM_SIZE изменить положение дочернего окна, но без помощи MoveWindow?
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

28 фев 2005, 18:27

Alezis, ты бы код привел своего обработчика WM_PAINT для дочернего окна.

Насчет чем подвигать - есть еще SetWindowPos. Но проблема-то у тебя с отрисовкой.
Ответить