void CInclViewView::OnPrint( CDC* pDC, CPrintInfo* pInfo )
{
CRect paper(0,0,0,0);
if (pInfo->m_bPreview) {
PRINTDLG PrtDlg;
if (!AfxGetApp()->GetPrinterDeviceDefaults(&PrtDlg))
{
if (pDC->IsKindOf(RUNTIME_CLASS(CPreviewDC)))
{
CPreviewDC *pPrevDC = (CPreviewDC *)pDC;
paper.right = GetDeviceCaps(pPrevDC->m_hAttribDC, HORZRES);
paper.bottom = GetDeviceCaps(pPrevDC->m_hAttribDC, VERTRES);
}
}
else
{
CPrintDialog dlg(FALSE);
dlg.m_pd.hDevMode = PrtDlg.hDevMode;
dlg.m_pd.hDevNames = PrtDlg.hDevNames;
HDC hdc = dlg.CreatePrinterDC();
paper.right = GetDeviceCaps(hdc, HORZRES);
paper.bottom = GetDeviceCaps(hdc, VERTRES);
DeleteDC(hdc);
}
}
else
{
paper.right = GetDeviceCaps(pDC->GetSafeHdc(), HORZRES);
paper.bottom = GetDeviceCaps(pDC->GetSafeHdc(), VERTRES);
}
CBitmap bitmap;
BITMAP bi;
CDC dc;
CRect rect;
GetClientRect(&rect);
bitmap.CreateBitmap(rect.Width(), rect.Height(), 1, 24, NULL);
bitmap.GetBitmap(&bi);
double ar = double(bi.bmWidth) / double(bi.bmHeight);
dc.CreateCompatibleDC(GetDC());
CBitmap* pOldBitmap = dc.SelectObject(&bitmap);
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
ZeroMemory( &pfd, sizeof( pfd ) );
pfd.nSize = sizeof( pfd );
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL | PFD_STEREO_DONTCARE;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
iFormat = ChoosePixelFormat( dc.m_hDC, &pfd );
BOOL ret = SetPixelFormat( dc.m_hDC, iFormat, &pfd );
pDC->StretchBlt(0, 0, paper.Width(), paper.Height(), &dc, 0, 0, bi.bmWidth, bi.bmHeight * ar, SRCCOPY);
dc.SelectObject(pOldBitmap);
CView::OnPrint(pDC, pInfo);
}
Я уже совсем не соображаю.
Может кто объяснит почему в месте выделенным жирным происходит ошибка. Т.е. возвращается FALSE. Есть здесь кто нить кто печатал при помощи OGL?