Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не хочет рисоваться в DisplayDC из memoryDC

25K
01 декабря 2007 года
just_d
10 / / 21.05.2007
проект в VisualC++ на базе MFC
задача: нарисовать чтолибо в memoryDC и перерисовать в DisplayDC

вот описание функци OnDraw(CDC *pDC)
Код:
void CMyView::OnDraw(CDC *pDC)
{
             MyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: add draw code for native data here
    CDC dataDC;
    dataDC.CreateCompatibleDC(NULL);
    CPen    BlackPen(PS_SOLID, 2, RGB(0, 0, 0));
   
    dataDC.SelectObject(&BlackPen);
    dataDC.MoveTo(10, 10);
    dataDC.LineTo(100, 10);
    dataDC.LineTo(100, 100);
    dataDC.LineTo(10, 100);
    dataDC.LineTo(10, 10);

    pDC -> BitBlt(0, 0, 200, 200, &dataDC, 0, 0, SRCCOPY);
}


из dataDC в pDC никак не хочет перерисовываться. Это вроде один из способов описанных на firststeps.ru

подскажите, может быть я неправильно логику понял:
рисуем в memDC, а потом копируем в dispDC с помощью BitBlt.
Просто я уже много вариантов перепробовал а он всеравно не рисует, хотя во многих источниках написано что такой код рисовать должен.

Следующий код тоже должен рисовать по определению, но не рисует:
Код:
case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        HDC tmpDC;
        tmpDC = CreateCompatibleDC(hdc);
        if (tmpDC)
        {
            HGDIOBJ pen;
            pen = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));
            SelectObject(tmpDC, pen);
            SetPixel(tmpDC, 10, 10, RGB(255, 0, 0));
            BitBlt(hdc, 0, 0, 20, 20, tmpDC, 0, 0, SRCCOPY);
            DeleteDC(tmpDC);
        }

        else
        {
            SetPixel(hdc, 10, 30, RGB(0, 0, 255));
        }
        EndPaint(hWnd, &ps);
        break;

(реализация без MFC, лишь средствами Win32. Реакция на сообщение о перерисовке. Стандартный проект VS C++ для Win32)

я в тупике. пожалуйста ответьте если ктонибудь чтонибудь знает про это или если я просто не понимаю принципа рисования в GDI.
Жду ответтов, заранее спасибо
1.9K
02 декабря 2007 года
max_dark
256 / / 11.11.2005
Кроме контекста рисования необходимо создавать битмап

для MFC
Код:
void CMyView::OnDraw(CDC *pDC)
{
             MyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: add draw code for native data here
    CRect Rect;
    GetClientRect(&Rect); // Получаем размеры области рисования
    CDC dataDC;
    dataDC.CreateCompatibleDC(pDC); // Необходимо передавать оригинальный контекст
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom); // Создаем битмап
    dataDC.SelectObject(bmp);
    dataDC.PatBlt(0,0,Rect.right,Rect.bottom,WHITENESS); // Заполняем белым цветом

    CPen    BlackPen(PS_SOLID, 2, RGB(0, 0, 0));
   
    dataDC.SelectObject(&BlackPen);
    dataDC.MoveTo(10, 10);
    dataDC.LineTo(100, 10);
    dataDC.LineTo(100, 100);
    dataDC.LineTo(10, 100);
    dataDC.LineTo(10, 10);

    pDC -> BitBlt(0, 0, 200, 200, &dataDC, 0, 0, SRCCOPY);
}

Для WinAPI
Код:
case WM_PAINT: {
        HDC hdc = BeginPaint(hWnd, &ps);
        HDC tmpDC;
        tmpDC = CreateCompatibleDC(hdc);
        if (tmpDC)
        {
            HBITMAP bmp;
            RECT rc;
            GetClientRect(&rc);
            bmp = CreateCompatibleBitmap(hdc, rc.right, rc.bottom);
            SelectObject(tmpDC, bmp);
            PatBlt(tmpDC, 0, 0, rc.right, rc.bottom, WHITENESS);
            HPEN pen;
            pen = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));
            SelectObject(tmpDC, pen);
            SetPixel(tmpDC, 10, 10, RGB(255, 0, 0));
            BitBlt(hdc, 0, 0, 20, 20, tmpDC, 0, 0, SRCCOPY);
            DeleteDC(tmpDC);
            DeleteObject(bmp);
        }

        else
        {
            SetPixel(hdc, 10, 30, RGB(0, 0, 255));
        }
        EndPaint(hWnd, &ps);
    }
    break;
25K
02 декабря 2007 года
just_d
10 / / 21.05.2007
спасибо большое)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог