[Wine-devel] DIB engine, gdi и драйвер принтера

Konstantin Kondratyuk =?iso-8859-1?q?kondratyuk_=CE=C1_etersoft=2Eru?=
Пт Апр 10 11:09:36 MSD 2009


Первое знакомство с DIB вызвало ряд вопросов по архитектуре, реализации и 
работе:

1. Расположение dibengine.
Вероятно, это должно быть dlls/dibengine? Ведь DIB - это драйвер, так же, как 
winex11 и psdrv.

2. Момент переключения DC на функции dib_funcs. Сейчас это в 
BITMAP_SelectObject, тогда как про "контекст в памяти" может быть известно 
уже на этапе создания DC с помощью CreateCompatibleDC. Возможно, ошибаюсь. 
Если ошибаюсь, то хочу понять - где.

3. Попробовал запустить свой тест по работе с совместимым контекстом принтера.
/* ================================================*/
        hCompatibleDC = CreateCompatibleDC (hDC);
        if(!hCompatibleDC) printf("Error\n");

        bitmap = CreateCompatibleBitmap(hDC, rect.right, rect.bottom);
        SelectObject (hCompatibleDC, bitmap);

        pen = CreatePen (BS_SOLID, 1, RGB(0,0,0));
        SelectObject (hCompatibleDC, pen);

        Rectangle(hCompatibleDC, rect.left + 200, rect.top + 200, rect.right - 
200, rect.bottom - 200);

        if ( StartDoc( hDC, &di ) != SP_ERROR )
        {
                StartPage( hDC );
                if (!BitBlt (hDC, 0, 0, rect.right, rect.bottom, 
hCompatibleDC, rect.left, rect.top, SRCCOPY))
                        printf ("BitBlt error!\n");
                EndPage( hDC );
                EndDoc( hDC );
        }

        DeleteDC(hCompatibleDC);
/* ================================================*/

Функция CreateCompatibleBitmap не создаёт bitmap, достаточный для того, чтобы 
SelectObject переключился на DIB. Возможно, это ошибка в самой функции, но 
она вроде бы работает с тем же CreateDIBSection, что и дисплейный тест...

-- 
Best regards,
Konstantin Kondratyuk.


Подробная информация о списке рассылки Wine-devel