Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ?
Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.
Здравствуйте, pjBrain, Вы писали:
B>Здравствуйте, bookmg, Вы писали:
B>А почему нельзя просто родительскому окну выставить стиль WS_CLIPCHILDREN B>чтобы дочернии не перерисовывались.
Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?
Здравствуйте, bookmg, Вы писали:
B>Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?
Тогда при регистрации класса своего окна выставте
hbrBackground в NULL и система за вас стирать ничего не будет!
Здравствуйте, bookmg, Вы писали:
B>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ? B>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.
Здравствуйте, pjBrain, Вы писали:
B>Здравствуйте, bookmg, Вы писали:
B>>Дело в том, что родительское окно отдано на откуп пользователю, который создаёт на нём мой грид.Конечно простой вариант сделать SetWindowLong() в родительское окно и убрать там эти стили(с сохранением всех остальных), но так к сожалению в данном случае действовать нельзя...да и вообще нельзя менять его (род. окна) никакие стили...Может всё таки есть выход?
B>Тогда при регистрации класса своего окна выставте B>hbrBackground в NULL и система за вас стирать ничего не будет!
Здравствуйте, nii_im_b, Вы писали:
__>Здравствуйте, bookmg, Вы писали:
B>>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ? B>>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.
__>попробуй прикрутить LockWindowUpdate
Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....
Здравствуйте, bookmg, Вы писали:
B>Здравствуйте, nii_im_b, Вы писали:
__>>Здравствуйте, bookmg, Вы писали:
B>>>Существуют ли какие нибудь способы блокирования очистки фона (WM_ERASEBKGND) дочернего окна,если родительское имеет стили CS_HREDRAW | CS_VREDRAW ? B>>>Разумеется возврат при обработке WM_ERASEBKGND числа отличного от нуля здесь не проходит...Перепробовал вроде бы все....Пишу грид на Win Api.Просто хочется всё таки сделать универсально (т.е независимо от того выбраны эти стили в окне или нет), и чтобы не было мерцания.Разумеется без этих стилей его(мерцания) нет, так как я всегда рассчитываю область перерисовки и перерисовываю только её.Буду очень благодарен за ответ.
__>>попробуй прикрутить LockWindowUpdate
B>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....
...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....
B>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....
Нутро твое тебя подводит, нет там ничего недокументированного.
Так что можешь не искать.
В MSDN истина написана, другого нет.
Здравствуйте, bookmg, Вы писали:
B>>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....
B>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....
тебе не надо её совать в обработку WM_... LockWindowUpdate(m_hWnd) надо вызывать после каждой СВОЕЙ отрисовки примерно так
LockWindowUpdate(NULL); — разрешаешь перерисовку
Invalidate(); — перерисовываешь
LockWindowUpdate(m_hWnd); — опять запрещаешь
Здравствуйте, nii_im_b, Вы писали:
__>Здравствуйте, bookmg, Вы писали:
B>>>Пробовал её(LockWindowUpdate) в обработке WM_ERASEBKGND (так как окно сначала получает это сообщение, а потом мтирает либо не стирает фон), в том то и прикол что не помогает к сожалению....
B>>...нутром чувствую, что должен бы быть код возврата из этого сообщения, который болокирует очистку и в этом случае, если есть то недокументированный, потому что msdn всю перерыл....
__>тебе не надо её совать в обработку WM_... LockWindowUpdate(m_hWnd) надо вызывать после каждой СВОЕЙ отрисовки примерно так __>LockWindowUpdate(NULL); — разрешаешь перерисовку __>Invalidate(); — перерисовываешь __>LockWindowUpdate(m_hWnd); — опять запрещаешь
__>на ВМ_САЙЗ тоже резонно будет запрет снять