Как сделать Дублирующий Буфер для вывода текста
От: maslukov  
Дата: 30.07.02 12:43
Оценка:
Здрасьте!

Хочу чтобы TextOut и пр. выводилиси не в экранный DC а в память.
Для этого я создаю compDC=CreateCompatibleDC
Далее для TextOut-а использую compDC.
( Причем без всяких BeginPaint и EndPaint)...

Длаьше просто нужно сделать BitBlt? и вызвать InvalidateRect?
Re: Как сделать Дублирующий Буфер для вывода текста
От: PSP Беларусь  
Дата: 01.08.02 07:58
Оценка:
Здравствуйте maslukov, Вы писали:

M>Здрасьте!


M>Хочу чтобы TextOut и пр. выводилиси не в экранный DC а в память.

M>Для этого я создаю compDC=CreateCompatibleDC
M>Далее для TextOut-а использую compDC.
M>( Причем без всяких BeginPaint и EndPaint)...

M>Длаьше просто нужно сделать BitBlt? и вызвать InvalidateRect?


memDC.CreateCompatibleDC(&dc);
bmpDC.CreateCompatibleBitmap(&dc,rect.Width(), rect.Height());
CBitmap * pOldBitmap=memDC.SelectObject(&bmpDC);
pDC=&memDC;

Рисуешь.

dc.BitBlt(0,0,rect.Width(), rect.Height(),pDC,0,0,SRCCOPY);
memDC.SelectObject(pOldBitmap);
Всегда Ваш, PSP.
Re[2]: Как сделать Дублирующий Буфер для вывода текста
От: Alex Smirnov Россия  
Дата: 01.08.02 08:05
Оценка:
Здравствуйте PSP, Вы писали:

PSP>Здравствуйте maslukov, Вы писали:


M>>Здрасьте!


M>>Хочу чтобы TextOut и пр. выводилиси не в экранный DC а в память.

M>>Для этого я создаю compDC=CreateCompatibleDC
M>>Далее для TextOut-а использую compDC.
M>>( Причем без всяких BeginPaint и EndPaint)...

M>>Длаьше просто нужно сделать BitBlt? и вызвать InvalidateRect?


PSP>memDC.CreateCompatibleDC(&dc);

PSP>bmpDC.CreateCompatibleBitmap(&dc,rect.Width(), rect.Height());
PSP>CBitmap * pOldBitmap=memDC.SelectObject(&bmpDC);
PSP>pDC=&memDC;

PSP>Рисуешь.


PSP>dc.BitBlt(0,0,rect.Width(), rect.Height(),pDC,0,0,SRCCOPY);

PSP>memDC.SelectObject(pOldBitmap);

Либо без mfc:
    HDC hMemDC = CreateCompatibleDC(hDC); 
    if(hMemDC == 0) return;
    HBITMAP hBmp = CreateCompatibleBitmap(hDC, wid, hei); wid/hei -> размеры
    HBITMAP hOb = HBITMAP(SelectObject(hMemDC, hBmp));

    // тут делаешь что вздумается...

    BitBlt(hDC, rc.left, rc.top, wid, hei, hMemDC, rc.left, rc.top, SRCCOPY);
    // rc -> RECT настоящего DC

    SelectObject(hMemDC, hOb); 
    DeleteObject(hBmp); 
    DeleteDC(hMemDC);


Alex
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.