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


Автор: Xela 11.4.2008, 00:03
Простая рисовалка
Код

void CmouseDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if( ( nFlags & MK_LBUTTON ) == MK_LBUTTON )
    {
        CClientDC dc( this );
        dc.MoveTo( _prevPoint );
        dc.LineTo( point );
        dc.SetPixel( point, RGB( 0, 0, 255 ) );
        _prevPoint = point;
    }
    CDialog::OnMouseMove(nFlags, point);
}

Как сохранить рисунок после После перекрытия окна проги другим окном??

Автор: dizzy1984 11.4.2008, 05:55
Рисуй на битмап, потом ее восстанавливай, заодно получишь эффект отсутствия мерцания. Поищи "двоной буфер" или "double buffer".

Автор: Xela 11.4.2008, 10:51
Цитата(dizzy1984 @ 11.4.2008,  05:55)
Рисуй на битмап, потом ее восстанавливай, заодно получишь эффект отсутствия мерцания. Поищи "двоной буфер" или "double buffer".

Нужно рисовать на форме!! По идее должно быть простое решение

Автор: Andrey44 11.4.2008, 11:05
Xela, рисуйте в онпаинт, а в моусемув делайте инвалидейт

Автор: SenkraD 11.4.2008, 11:06
Xela, так все рисуют кому не охота лишние разы перерисововатся и считать
Код

CDC     *pDC;
CRect    rcThis;

GetClientRect(&rcThis);
 pDC = GetParent()->GetDC();
if(!m_bIsNeedFullRedraw)
{
    ////////////////////////////////////////////////////////////////////////////////////////


    ////////////////////////////////////////////////////////////////////////////////////////
    CDC        dcMem;
    CBitmap    *pbmpOld; 

    dcMem.CreateCompatibleDC(pDC);
    pbmpOld = dcMem.SelectObject(&m_bmpBackGround);
    dcMem.BitBlt(0, 0, rcThis.Width(), rcThis.Height(), pDC, rcThis.left, rcThis.top, SRCCOPY);

    dcMem.SelectObject(pbmpOld);
}

pDC->DrawState(CPoint(rcThis.left , rcThis.top),  CSize(rcThis.Width(), rcThis.Height()), &m_bmpBackGround, DST_BITMAP, 0);
GetParent()->ReleaseDC(pDC);


Примерно так.  Этом код с одного контрола, тут копируется изображение спод ним для обеспечия прозрачности

Автор: Gongex 13.4.2008, 23:47
читал про такую тему в книге.

Надо создать переменную ,типа points[ 300];   (хранится 300 точек)

и потом через цикл for  рисуешь все 50 или 100 точек.(которые>0)...
потом сохраняешь курсор на следующую points.....

и на Inavalidate() такой цикл поставь.....

Я пробовал для прикола писать такую вещь.Получилось.

Запоминать надо все точки и прикаждом шевелении их все перерисовывать.

а лучше сделать points[2000] чтобы рисовать минут 5.(память на 5 минут)

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