Рисование фона окна пользователя


Вы можете рисовать свой собственный фон окна, а не предоставлять системе рисовать его для Вас. Большинство приложений устанавливает дескриптор кисти или значение системного цвета для кисти для фона класса, регистрируя класс окна; система использует кисть или цвет, чтобы рисовать фон. Даже если Вы устанавливаете кисть для фона класса в NULL, тем не менее, система отправляет сообщение WM_ERASEBKGND Вашей оконной процедуре всякий раз, когда фон окна должен рисоваться, позволяя Вам рисовать пользовательский фон.

В примере ниже, оконная процедура рисует большой узор шахматной доски, который помещается аккуратно в окне. Процедура закрашивает рабочую область белой кистью, а затем рисует тринадцать 20х20 пикселей прямоугольников, используя серую кисть. Контекст устройства (DC) отображения, который используется для рисования фона, определяется в параметре wParam для сообщения.

HBRUSH hbrWhite, hbrGray; 
 
  . 
  . 
  . 
 
case WM_CREATE: 
    hbrWhite = GetStockObject(WHITE_BRUSH); 
    hbrGray  = GetStockObject(GRAY_BRUSH); 
    return 0L; 
 
case WM_ERASEBKGND: 
    hdc = (HDC) wParam; 
    GetClientRect(hwnd, &rc); 
    SetMapMode(hdc, MM_ANISOTROPIC); 
    SetWindowExtEx(hdc, 100, 100, NULL); 
    SetViewportExtEx(hdc, rc.right, rc.bottom, NULL); 
    FillRect(hdc, &rc, hbrWhite); 
 
    for (i = 0; i < 13; i++) 
    { 
        x = (i * 40) % 100; 
        y = ((i * 40) / 100) * 20; 
        SetRect(&rc, x, y, x + 20, y + 20); 
        FillRect(hdc, &rc, hbrGray); 
    } 
  return 1L;

Если приложение рисует свое собственное свернутое окно, система также отправляет сообщение WM_ERASEBKGND оконной процедуре, чтобы рисовать фон свернутого окна. Вы можете использовать ту же самую технику, используемую WM_PAINT, чтобы определить минимизировано ли окно, то есть, вызовите функцию IsIconic и проверку возвращаемого значения на TRUE.

Назад в оглавление
На главную страницу
Переведено 05.02.2011 19:08 ©Copyright V. Sokovikov
Hosted by uCoz