void printTable_draw(CDC* pDC);
bool APIprintFile()
{
CDC dc;
CTime tm = CTime::GetCurrentTime();
CString m_stime;
m_stime = tm.Format("产量报表%Y-%m-%d %H:%M:%S");
CPrintDialog dlg (FALSE,PD_ALLPAGES | PD_RETURNDC, NULL);
dlg.GetDefaults();
if(!AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
return FALSE;
HDC hdcPrint=dlg.CreatePrinterDC();
dc.Attach (hdcPrint); if (!dc)return false;//未发现打印机 DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = m_stime ;
CSize size = CSize(800,650);
dc.SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
dc.SetWindowExt(size);//确定窗口大小
//得到实际设备每逻辑英寸的像素数量
int xLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long yExt = (long)size.cy * yLogPixPerInch/96 ;
long xExt = (long)size.cx * xLogPixPerInch/96;
dc.SetViewportExt((int)xExt, (int)yExt);
if (dc.StartDoc(&di) < 0)
{
MessageBox(NULL,_T("Printer wouldn't initalize"),_T("Info"),MB_OK);
}
else
{
if (dc.StartPage() < 0 )
dc.AbortDoc();
else
{
printTable_draw(&dc);
dc.EndPage();
dc.EndDoc();
int i = 0;
i = (int)m_printarray.GetCount();
PRINTPOOL pl;
pl.FileName = di.lpszDocName;
pl.state = 0;
pl.tm = m_stime;
pl.ncount = 0;
m_printarray.InsertAt(i,pl);
UINT _PrintListen(LPVOID lparam);
if (pListenPrinting == NULL)
pListenPrinting = ::AfxBeginThread(_PrintListen,0);
}
}
//如何释放dc
//TRACE("\n%d",ReleaseDC(NULL,dc.m_hDC));
//dc.Detach();
// CDC::FromHandle(hdcPrint)->DeleteDC();
// free(&di);
// TRACE("\n%d",j);
// Wnd->ReleaseDC(&dc);
dc.DeleteDC();
return ;
}
如和释放DC?
我用的是是独立的线程中
TRACE("\n%d",ReleaseDC(NULL,dc.m_hDC));可以释放DC但是内存一只上涨!·!
但是如果把代码放在一个由CView继承而来的类中
可以由ReleaseDC(&dc);
释放且内存不会直线上涨!
thank you!
bool APIprintFile()
{
CDC dc;
CTime tm = CTime::GetCurrentTime();
CString m_stime;
m_stime = tm.Format("产量报表%Y-%m-%d %H:%M:%S");
CPrintDialog dlg (FALSE,PD_ALLPAGES | PD_RETURNDC, NULL);
dlg.GetDefaults();
if(!AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
return FALSE;
HDC hdcPrint=dlg.CreatePrinterDC();
dc.Attach (hdcPrint); if (!dc)return false;//未发现打印机 DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = m_stime ;
CSize size = CSize(800,650);
dc.SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
dc.SetWindowExt(size);//确定窗口大小
//得到实际设备每逻辑英寸的像素数量
int xLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long yExt = (long)size.cy * yLogPixPerInch/96 ;
long xExt = (long)size.cx * xLogPixPerInch/96;
dc.SetViewportExt((int)xExt, (int)yExt);
if (dc.StartDoc(&di) < 0)
{
MessageBox(NULL,_T("Printer wouldn't initalize"),_T("Info"),MB_OK);
}
else
{
if (dc.StartPage() < 0 )
dc.AbortDoc();
else
{
printTable_draw(&dc);
dc.EndPage();
dc.EndDoc();
int i = 0;
i = (int)m_printarray.GetCount();
PRINTPOOL pl;
pl.FileName = di.lpszDocName;
pl.state = 0;
pl.tm = m_stime;
pl.ncount = 0;
m_printarray.InsertAt(i,pl);
UINT _PrintListen(LPVOID lparam);
if (pListenPrinting == NULL)
pListenPrinting = ::AfxBeginThread(_PrintListen,0);
}
}
//如何释放dc
//TRACE("\n%d",ReleaseDC(NULL,dc.m_hDC));
//dc.Detach();
// CDC::FromHandle(hdcPrint)->DeleteDC();
// free(&di);
// TRACE("\n%d",j);
// Wnd->ReleaseDC(&dc);
dc.DeleteDC();
return ;
}
如和释放DC?
我用的是是独立的线程中
TRACE("\n%d",ReleaseDC(NULL,dc.m_hDC));可以释放DC但是内存一只上涨!·!
但是如果把代码放在一个由CView继承而来的类中
可以由ReleaseDC(&dc);
释放且内存不会直线上涨!
thank you!
void printTable_draw(CDC* pDC);
bool APIprintFile()
{
CDC dc;
CTime tm = CTime::GetCurrentTime();
CString m_stime;
m_stime = tm.Format("产量报表%Y-%m-%d %H:%M:%S");
CPrintDialog dlg (FALSE,PD_ALLPAGES | PD_RETURNDC, NULL);
dlg.GetDefaults();
if(!AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
return FALSE;
HDC hdcPrint=dlg.CreatePrinterDC();
dc.Attach (hdcPrint); if (!dc)return false;//未发现打印机 DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = m_stime ;
CSize size = CSize(800,650);
dc.SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
dc.SetWindowExt(size);//确定窗口大小
//得到实际设备每逻辑英寸的像素数量
int xLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = dc.GetDeviceCaps(LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long yExt = (long)size.cy * yLogPixPerInch/96 ;
long xExt = (long)size.cx * xLogPixPerInch/96;
dc.SetViewportExt((int)xExt, (int)yExt);
if (dc.StartDoc(&di) < 0){}
else
{
if (dc.StartPage() < 0 )
dc.AbortDoc();
else
{
printTable_draw(&dc);
dc.EndPage();
dc.EndDoc();
}
/*****************************************
???????释放dc
/___________________________________________return ;
}
不过thank you