N>Получаю всегда только hr!=0, и перерисовывает он всё окно. N>Если кто сталкивался или знает, отзовитесь.
В данном случае в InvalidateRect надо не NULL передавать, а указатель на re. А NULL говорит о том, что надо всю клиентскую область обновить.
И InvalidateRect не HRESULT возвращает, а BOOL.
Всё в MSDN написано.
Извините вставил пробный кусок кода, но я пробовал и указатель на re. Эффект тот же, он перерисовывает всё окно, а это нежклательно, ибо хочеться избежать мигания. И нагрузку на ЦП, т.к. отрисовка происходит достаточно часто.
BOOL hr = InvalidateRect(&re, TRUE); - Так вот тож пробовал...эффект нулевой.
Здравствуйте, Naimit, Вы писали:
N>Здравствуйте, uinet, Вы писали:
N>Извините вставил пробный кусок кода, но я пробовал и указатель на re. Эффект тот же, он перерисовывает всё окно, а это нежклательно, ибо хочеться избежать мигания. И нагрузку на ЦП, т.к. отрисовка происходит достаточно часто. N>
N> BOOL hr = InvalidateRect(&re, TRUE); - Так вот тож пробовал...эффект нулевой.
N>
В re должна быть область, которую надо перерисовать, а если она полнустью соответсвует области полученной через GetClientRect, то естественно будет отрисовываться все окно. А чтобы не мигало, можно попробовать не перерисовывать фон (FALSE вторым параметром в InvalidateRect), но тогда возможно придется повозиться, чтобы грязь всякая не вылезала.
U>В re должна быть область, которую надо перерисовать, а если она полнустью соответсвует области полученной через GetClientRect, то естественно будет отрисовываться все окно. А чтобы не мигало, можно попробовать не перерисовывать фон (FALSE вторым параметром в InvalidateRect), но тогда возможно придется повозиться, чтобы грязь всякая не вылезала.
В том то и вопрос что область я уже задавал всеми способами и возможностями. И так
RECT re ={0,0,50,50};
CRect rect(re);
И вот так...
InvalidateRect(NULL, FALSE);
У меня тоже есть MSDN и я пытаюсь не задавать вопросов которые там можно найти.
Окно имеет следующее свойство — DECLARE_VIEW_STATUS(VIEWSTATUS_DVASPECTOPAQUE)
Просто желательно чтоб при новой отрисоке не заттиралось старое.
Вот так.
N>В том то и вопрос что область я уже задавал всеми способами и возможностями. N>И так N>
N>RECT re ={0,0,50,50};
N>CRect rect(re);
N>
N>И вот так... N>
N>InvalidateRect(NULL, FALSE);
N>
N>У меня тоже есть MSDN и я пытаюсь не задавать вопросов которые там можно найти. N>Окно имеет следующее свойство — DECLARE_VIEW_STATUS(VIEWSTATUS_DVASPECTOPAQUE)
N>Просто желательно чтоб при новой отрисоке не заттиралось старое. N>Вот так.
Возможно UpdateWindow() сразу после InvalidateRect поможет.