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);
}
не хочет рисоваться в DisplayDC из memoryDC
задача: нарисовать чтолибо в memoryDC и перерисовать в DisplayDC
вот описание функци OnDraw(CDC *pDC)
Код:
из 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;
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.
Жду ответтов, заранее спасибо
для 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);
}
{
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;
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;
спасибо большое)