WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Парсинг, отрисовка, сохранение в файл...

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Парсинг, отрисовка, сохранение в файл...
lkv опубликован 04-06-2001 07:06 MSK   Click Here to See the Profile for lkv   Click Here to Email lkv  
Привет, о всезнающий All!

Я тут опять что-то не догоняю слегка...
Краткий смысл такой:
Надо получать данные, отрисовать их,
и сохранить в файл..., но желательно,
чтобы этот процесс был возможен при минимизированных окнах, т.к. он не короток,
поэтому пытаюсь использовать Bitmap в памяти.
Заморочка, кажется, в том, что работаю
с ним из разных потоков...

1-ый поток:

в цикле по получению данных вызывается:

CDynamicChartData::FileError
CDynamicChartData::updateViewAndSaveToBmp(const char *szFileName)
{
FileError feResult;
CRect xWindowRect;

CWnd *pxWnd = CWnd::FromHandle(m_hChartView);
pxWnd->GetClientRect(xWindowRect);

CDC *pxDC = pxWnd->GetDC();
ASSERT(pxDC);

if (m_bSaveToFile)
{
m_xBitmap.CreateCompatibleBitmap(pxDC,xWindowRect.Width(),xWindowRect.Height());
m_hBitmap = (HBITMAP)m_xBitmap;

pxWnd->Invalidate();
pxWnd->UpdateWindow();

pxDC->SelectObject(&m_xBitmap);

CBmp16File xBmp16File(0,0);
xBmp16File.setColor(0, crBgrBrush);
xBmp16File.setColor(1, crChartColor);
xBmp16File.setColor(2, crBlack);

if (xBmp16File.saveTo(szFileName, pxDC, xWindowRect))
feResult = FE_OK;
else
feResult = FE_SAVEFAIL;

m_xBitmap.DeleteObject();
}
else
{
pxWnd->Invalidate();
pxWnd->UpdateWindow();
feResult = FE_OK;
}

return feResult;
}

2-ый поток:

Invalidate + Update из первого вызывает OnDraw во втором,
фрагменты OnDraw:

if (pDoc->m_xChartData.m_bSaveToFile)
{
///////////
pxMemDC = new CDC;
pxMemDC->CreateCompatibleDC(pDC);
//-----------------------------------
//ни так
pxMemBmp = CBitmap::FromHandle(pDoc->m_xChartData.m_hBitmap);

//ни так не прокатывает!!!
pxMemBmp = new CBitmap;
pxMemBmp->Attach(pDoc->m_xChartData.m_hBitmap);

//так нельзя, ибо когда разные потоки, то нужно работать с потоками
//pxMemBmp = &(pDoc->m_xChartData.m_xBitmap);
//-----------------------------------
pxOldBmp = pxMemDC->SelectObject(pxMemBmp);
pxSaveDC = pDC;
pDC = pxMemDC;
}
...

Не подскажите в чем конкретно проявилась моя
чайниковость на этот раз?
Спасибо за внимание.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.