WM_ERASEBKGND
От: bookmg Россия  
Дата: 12.11.04 15:05
Оценка:
Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ?
Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.
Re: WM_ERASEBKGND
От: pjBrain  
Дата: 12.11.04 15:10
Оценка:
Здравствуйте, bookmg, Вы писали:

А почему нельзя просто родительскому окну выставить стиль WS_CLIPCHILDREN
чтобы дочернии не перерисовывались.
Re[2]: WM_ERASEBKGND
От: bookmg Россия  
Дата: 12.11.04 15:20
Оценка:
Здравствуйте, pjBrain, Вы писали:

B>Здравствуйте, bookmg, Вы писали:


B>А почему нельзя просто родительскому окну выставить стиль WS_CLIPCHILDREN

B>чтобы дочернии не перерисовывались.


Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?
Re[3]: WM_ERASEBKGND
От: pjBrain  
Дата: 12.11.04 15:27
Оценка:
Здравствуйте, bookmg, Вы писали:

B>Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?


Тогда при регистрации класса своего окна выставте
hbrBackground в NULL и система за вас стирать ничего не будет!
Re: WM_ERASEBKGND
От: nii_im_b Мухосранск  
Дата: 12.11.04 15:27
Оценка:
Здравствуйте, bookmg, Вы писали:

B>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ?

B>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.

попробуй прикрутить LockWindowUpdate
Re[4]: WM_ERASEBKGND
От: bookmg Россия  
Дата: 12.11.04 15:32
Оценка:
Здравствуйте, pjBrain, Вы писали:

B>Здравствуйте, bookmg, Вы писали:


B>>Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?


B>Тогда при регистрации класса своего окна выставте

B>hbrBackground в NULL и система за вас стирать ничего не будет!

пробовал, стирает тем не менее
Re[2]: WM_ERASEBKGND
От: bookmg Россия  
Дата: 12.11.04 15:37
Оценка:
Здравствуйте, nii_im_b, Вы писали:

__>Здравствуйте, bookmg, Вы писали:


B>>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ?

B>>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.

__>попробуй прикрутить LockWindowUpdate


Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....
Re[3]: WM_ERASEBKGND
От: bookmg Россия  
Дата: 12.11.04 15:42
Оценка:
Здравствуйте, bookmg, Вы писали:

B>Здравствуйте, nii_im_b, Вы писали:


__>>Здравствуйте, bookmg, Вы писали:


B>>>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ?

B>>>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.

__>>попробуй прикрутить LockWindowUpdate


B>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....



...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....
Re[4]: WM_ERASEBKGND
От: pjBrain  
Дата: 12.11.04 15:52
Оценка:
B>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....

Нутро твое тебя подводит, нет там ничего недокументированного.
Так что можешь не искать.
В MSDN истина написана, другого нет.
Re[4]: WM_ERASEBKGND
От: nii_im_b Мухосранск  
Дата: 12.11.04 16:00
Оценка:
Здравствуйте, bookmg, Вы писали:

B>>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....



B>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....


тебе не надо её совать в обработку WM_... LockWindowUpdate(m_hWnd) надо вызывать после каждой СВОЕЙ отрисовки примерно так
LockWindowUpdate(NULL); — разрешаешь перерисовку
Invalidate(); — перерисовываешь
LockWindowUpdate(m_hWnd); — опять запрещаешь

на ВМ_САЙЗ тоже резонно будет запрет снять
Re[5]: WM_ERASEBKGND
От: bookmg Россия  
Дата: 15.11.04 11:59
Оценка:
Здравствуйте, nii_im_b, Вы писали:

__>Здравствуйте, bookmg, Вы писали:


B>>>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....



B>>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....


__>тебе не надо её совать в обработку WM_... LockWindowUpdate(m_hWnd) надо вызывать после каждой СВОЕЙ отрисовки примерно так

__>LockWindowUpdate(NULL); — разрешаешь перерисовку
__>Invalidate(); — перерисовываешь
__>LockWindowUpdate(m_hWnd); — опять запрещаешь

__>на ВМ_САЙЗ тоже резонно будет запрет снять



Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.