Eugie » 26 дек 2005, 17:52
И обязательно ли это через memory context делать?
Да, битмапы рисуются поблоковым копированием с одного DC (контекст устройства) на другой, в данном случае - оконный.
Примерно так в твоем случае:
Код: Выделить всё
// В обработчике WM_PAINT:
case WM_PAINT:
{
// Загружаем bitmap из ресурсов своего приложения или dll
hbmp = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BITMAP1));
// Определяем его размеры с помощью структуры BITMAP
BITMAP bm;
GetObject(hbmp, sizeof(BITMAP), &bm);
nWidth = bm.bmWidth;
nHeight = bm.bmHeight;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps); // Добываем контекст устройства, связанный с окном
hMemDC = CreateCompatibleDC(hdc); // Создаем контекст в памяти, совместимый с hdc
SelectObject(hMemDC, hbmp); // Выбираем bitmap в этот контекст
// Рисуем
TransparentBlt(
hdc, 0, 0, nWidth, nHeight, // Куда
hMemDC, 0, 0, nWidth, nHeight,// Откуда
SRCCOPY, // Как
GetSysColor(COLOR_3DFACE) // "Прозрачный" цвет
);
...
// Освобождаем все ресурсы
EndPaint(hWnd, &ps); // Освобождаем лимитированный ресурс системы
return 0;
}
[quote]И обязательно ли это через memory context делать?[/quote]
Да, битмапы рисуются поблоковым копированием с одного DC (контекст устройства) на другой, в данном случае - оконный.
Примерно так в твоем случае:
[code]
// В обработчике WM_PAINT:
case WM_PAINT:
{
// Загружаем bitmap из ресурсов своего приложения или dll
hbmp = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BITMAP1));
// Определяем его размеры с помощью структуры BITMAP
BITMAP bm;
GetObject(hbmp, sizeof(BITMAP), &bm);
nWidth = bm.bmWidth;
nHeight = bm.bmHeight;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps); // Добываем контекст устройства, связанный с окном
hMemDC = CreateCompatibleDC(hdc); // Создаем контекст в памяти, совместимый с hdc
SelectObject(hMemDC, hbmp); // Выбираем bitmap в этот контекст
// Рисуем
TransparentBlt(
hdc, 0, 0, nWidth, nHeight, // Куда
hMemDC, 0, 0, nWidth, nHeight,// Откуда
SRCCOPY, // Как
GetSysColor(COLOR_3DFACE) // "Прозрачный" цвет
);
...
// Освобождаем все ресурсы
EndPaint(hWnd, &ps); // Освобождаем лимитированный ресурс системы
return 0;
}
[/code]