Мерцание в Windows 7
От: Аноним  
Дата: 28.01.10 16:14
Оценка:
Есть контрол который нормально показыает в Win XP, но вот в Windows 7 сильно мерцает, что не так ?

void OnPaint()
{
PAINTSTRUCT ps;
HDC hdc = ::BeginPaint(m_hWnd, &ps);

char* text = "hello"; // for example

// draw text
{
RECT rect;
GetClientRect(&rect);

::FillRect(hdc, &rect, m_brush1);

HFONT hOldFont = (HFONT)::SelectObject(hdc, (HFONT)m_font1);

::DrawText(hdc, text, strlen(text), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

if (hOldFont) ::SelectObject(hdc, hOldFont);
}

::EndPaint(m_hWnd, &ps);
}
Re: Мерцание в Windows 7
От: kvasya  
Дата: 28.01.10 21:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть контрол который нормально показыает в Win XP, но вот в Windows 7 сильно мерцает, что не так ?


А>void OnPaint() 0

А>{
А> PAINTSTRUCT ps;
А> HDC hdc = ::BeginPaint(m_hWnd, &ps);

А> char* text = "hello"; // for example


А> // draw text

А> {
А> RECT rect;
А> GetClientRect(&rect);

А> ::FillRect(hdc, &ps.rcPaint, m_brush1);


А> HFONT hOldFont = (HFONT)::SelectObject(hdc, (HFONT)m_font1);


А> ::DrawText(hdc, text, strlen(text), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);


А> if (hOldFont) ::SelectObject(hdc, hOldFont);

А> }

А> ::EndPaint(m_hWnd, &ps);

А>}

Это небольшая оптимизация. А мерцание удаляется буферизацией. Если поделка, сделай в классе окна NULL кисть в качестве Background. Или обрабатывай WM_ERASEBKGND
Re: Мерцание в Windows 7
От: CEMb  
Дата: 29.01.10 04:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть контрол который нормально показыает в Win XP, но вот в Windows 7 сильно мерцает, что не так ?


Похоже, схема Aero включена? Она в текущую кнопку постоянно рисует пульсирующий бакграунд. Типа, для красоты. Тут нужно применять другие функции для рисования. А вот какие, не помню, буду рад сам почитать про это, если тут напишут
Re[2]: Мерцание в Windows 7
От: kvasya  
Дата: 29.01.10 04:44
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Здравствуйте, Аноним, Вы писали:


А>>Есть контрол который нормально показыает в Win XP, но вот в Windows 7 сильно мерцает, что не так ?


CEM>Похоже, схема Aero включена? Она в текущую кнопку постоянно рисует пульсирующий бакграунд. Типа, для красоты. Тут нужно применять другие функции для рисования. А вот какие, не помню, буду рад сам почитать про это, если тут напишут


То что система делает со своими кнопками — не влияет на правильно организованную прорисовку.
Re[3]: Мерцание в Windows 7
От: CEMb  
Дата: 29.01.10 07:57
Оценка:
Здравствуйте, kvasya, Вы писали:

K>То что система делает со своими кнопками — не влияет на правильно организованную прорисовку.


Ну в рамках Aero у топикстартера получается как раз неправильно организованная прорисока. Подсветка 7-й аерой текущей кнопки постоянно генерит WM_PAINT, у топикстартера как раз на неё стоит обработчик.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.