描述:
已经写好了一个画各种坐标曲线的ActiveX控件,这个控件用MFC写的,现在boss要我给他加上“打印”功能,控件原来的OnDraw函数原型是void CSampleCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid ),我想直接给控件加上个PrintCtrl函数,让它利用已有的控件OnDraw函数来打印,大致代码如下,
void CSampleCtrl::PrintCtrl( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid )
{
return OnDraw(pdc, rcBounds, rcInvalid);
}
客户调用控件的打印功能时,只要把打印机的DC传给PrintCtrl的pdc即可,如:
HDC hdcPrint = NULL;
CDC printDC;
DOCINFO di;
::memset(&di, 0, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Print job";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;
CPrintDialog printDlg(TRUE);
if (printDlg.DoModal() == IDCANCEL)
{
return;
}
hdcPrint = printDlg.CreatePrinterDC();
ASSERT(hdcPrint);
if (hdcPrint == NULL)
{
MessageBox("Create print dc failed");
return;
}
printDC.Attach(hdcPrint);
ASSERT(printDC.GetSafeHdc() != NULL);
if (printDC.GetSafeHdc() == NULL)
{
MessageBox("Create print cdc failed");
return;
}
if (printDlg.m_pd.hDevMode)
{
GlobalFree(printDlg.m_pd.hDevMode);
}
if (printDlg.m_pd.hDevNames)
{
GlobalFree(printDlg.m_pd.hDevNames);
}
pCtrl->PrintCtrl(&printDC, ...); // pCtrl为指向控件的包裹类的指针
不知这种想法这种做法能行否,若不行,该怎么办?我想尽大限度利用原来的代码
解决方案1:
xuexi