Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > нарисовать CBitmap на CDC


Автор: _hunter 1.12.2006, 18:08
Добрый день.

Пытаюсь нарисовать CBitmap на CDC:
(_cornerTL -- CBitmap)
Код

    if (_cornerTL.m_hObject)
    {
        HDC compatibleDC = CreateCompatibleDC(dc->m_hDC);
        if (compatibleDC)
        {
            HGDIOBJ oldBitmap = SelectObject(compatibleDC, _cornerTL.m_hObject);
            if (oldBitmap) 
            {
                BOOL result = TransparentBlt(
                    dc->m_hDC,
                    _mainRect.left,
                    _mainRect.top,
                    _cornerTL.GetBitmapDimension().cx,
                    _cornerTL.GetBitmapDimension().cy,
                    compatibleDC,
                    0,
                    0,
                    _cornerTL.GetBitmapDimension().cx,
                    _cornerTL.GetBitmapDimension().cy,
                    RGB(0, 0, 0)
                    );

                if (result == FALSE)
                {
                    DWORD error = GetLastError();

и получаю result == FALSE и error == 0 (и естественно ничего не рисуется).

Что я делаю не так/как это править?

С уважением...

Автор: The Thing 2.12.2006, 13:15
Попробуй создать CompatibleBitmap

Код

    if (_cornerTL.m_hObject)
    {
        HDC compatibleDC = CreateCompatibleDC(dc->m_hDC);
        HBITMAP hBitmap = (HBITMAP)CreateCompatibleBitmap(dc->m_hDC, LENGTH, HEIGHT);
        SelectObject(compatibleDC, hBitmap);

        if (compatibleDC)
        {
            HGDIOBJ oldBitmap = SelectObject(compatibleDC, _cornerTL.m_hObject);
            if (oldBitmap) 
            {
                BOOL result = TransparentBlt(
                    dc->m_hDC,
                    _mainRect.left,
                    _mainRect.top,
                    _cornerTL.GetBitmapDimension().cx,
                    _cornerTL.GetBitmapDimension().cy,
                    compatibleDC,
                    0,
                    0,
                    _cornerTL.GetBitmapDimension().cx,
                    _cornerTL.GetBitmapDimension().cy,
                    RGB(0, 0, 0)
                    );

                if (result == FALSE)
                {
                    DWORD error = GetLastError();
                }


Не забудь в конце сделать DeleteObject(hBitmap); и DeleteDC(compatibleDC );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)