Оптимизация вывода BMP файлов
От: lozh  
Дата: 21.02.03 21:12
Оценка:
Привет ALL.

Подскажите, как можно оптимизировать вывод в bmp файла на весь экран.
Делаю следующие: в WM_CREATE создаю статик, стиль WS_CHILD | WS_VISIBLE | SS_BITMAP, загружаю в переменную через LoadImage bmp файл и функцией SendMessage отправляю его в статик. В момент появления формы происходит мерцание, как можно его победить. Буду рад любой информации.

До новых встреч.
... << RSDN@Home 1.0 beta 6a >>

22.02.03 12:49: Перенесено модератором из 'C/C++' — ПК
Re: Оптимизация вывода BMP файлов
От: algod Украина  
Дата: 22.02.03 10:42
Оценка:
Здравствуйте, lozh, Вы писали:

L>Привет ALL.


L>Подскажите, как можно оптимизировать вывод в bmp файла на весь экран.

L>Делаю следующие: в WM_CREATE создаю статик, стиль WS_CHILD | WS_VISIBLE | SS_BITMAP, загружаю в переменную через LoadImage bmp файл и функцией SendMessage отправляю его в статик. В момент появления формы происходит мерцание, как можно его победить. Буду рад любой информации.
L>До новых встреч.
L>

Через статик не советую — много лишнего он обрабатывет.
Лучше сделай свой оконный класс и мучай его:
В ините:

WNDCLASSEX wceMy = 
{
    sizeof (WNDCLASSEX),
    CS_HREDRAW | CS_VREDRAW,
    MySuperClassProc,          // описание - далее
    0, 0,                      
    hInstance,
    (HICON)    NULL,
    (HCURSOR)  LoadCursor (NULL, IDC_ARROW)
    (HBRUSH)   NULL,           // Нафиг бакграунд - мы сами его рисуем
    (CTSTR)    NULL,
    "MySuperClass"
    NULL
};

if (!RegisterClassEx (&wceMy))
  return (init_fail);


Создаешь окно через CreateWindow (CreateWindowEx)...
Описание процы класса:


LRESULT CALLBACK 
MySuperClassProc 
  ( HWND hWnd
  , UINT uMsg
  , WPARAM wParam
  , LPARAM lParam)
{
  switch (uMsg) {
  case WM_PAINT:
    {
      PAINTSTRUCT ps;
      HDC hDCTo = BeginPaint (hWnd, &ps);

      HDC hDCTemp = CreateCompatibleDC (hDCTo);
      int saveDC = SaveDC (hDCTemp);

      SelectObject (hDCTemp, hbmpByBitmapToDraw);
      BitBlt 
        ( hDCTo
        , 0, 0, 320, 240 // Или твой ширина/ высота... Можешь юзать [msdn]GetClientRect[/msdn]
        , hDCTemp
        , 0, 0
        , SRCCOPY);
        
      RestoreDC (hDCTemp, saveDC);
      DestroyDC (hDCTemp);

      EndPaint (hWnd, &ps);
    }
    return 0;     break;
  default:
    break;
  }
  return DefWindowProc (hWnd, uMsg, wParam, lParam);
}


Базово — где то так...
Если надо подробней — не разводи флейм, спрашивай через мыло....
There is no bug
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.