К сожалению что-то не то.
Я пользуюсь библиотекой mapacces.dll. Она не позволяет параллельно работать с Paint95.
Запускаю с разными hdc памяти - валится.
Вот кусок тестового кода.
HINSTANCE Dll_Mapacces = ::LoadLibrary((CString)"mapacces.dll" );
struct TPCM
{ HDC hdc;
CtempDlg * lpClass;
};
unsigned int _stdcall run_svc(LPVOID lpCl)
{ ((TPCM *)lpCl)->lpClass->Paint95(((TPCM *)lpCl)->hdc);
_endthreadex(0);
return 0;
}
void CtempDlg::OnBnClickedOk()
{
HDC hdc = ::GetDC(NULL);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBMP = CreateCompatibleBitmap(hdc, 1500, 1500);
hBMP = (HBITMAP)SelectObject(hdcMem, hBMP);
HDC hdcMem1 = CreateCompatibleDC(hdc);
HBITMAP hBMP1 = CreateCompatibleBitmap(hdc, 1500, 1500);
hBMP1 = (HBITMAP)SelectObject(hdcMem1, hBMP1);
::ReleaseDC(NULL, hdc);
TPCM * lpT = new TPCM;
lpT->lpClass = this;
lpT->hdc = hdcMem;
TPCM * lpT1 = new TPCM;
lpT1->lpClass = this;
lpT1->hdc = hdcMem1;
_beginthreadex(NULL, 0, run_svc, (LPVOID)lpT, 0, 0);
_beginthreadex(NULL, 0, run_svc, (LPVOID)lpT1, 0, 0);
}
void CtempDlg::Paint95(HDC hdc)
{ RECT r;
r.left = r.top = 0;
r.right = r.bottom = 1500;
POINT POrgOld;
SetViewportOrgEx(hdc, 0, 0, &POrgOld);
mapPaint95(hMap, hdc, 1 , &r); // Тут падает. HDC разные. hMap один.
SetViewportOrgEx(hdc, POrgOld.x, POrgOld.y, NULL );
}