Mschart控件图象打印处理

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

mschart图象打印的VC程序处理:

在VC中,实现打印比在VB中困难很多,在如题的问题中,VB的解决方案很简单:

VB的解决方案:

原理:mschart.editcopy(拷贝控件显示图象)

printer.print mschart.openclipboard(VB语句解释)(打印剪贴板内容)

但在VC中,打印不是一件容易的事,我把在网友帮助下解决的Mschart控件的打印实现源码给大家贴出来,作为参考

具体实现,

HANDLE hDib;

HPALETTE hPalette;

m_mschart.GetPlot().GetBackdrop()

.GetFill().GetBrush().GetFillColor().Set(255, 255, 255);

m_mschart.GetPlot().GetBackdrop().GetShadow().SetStyle(FALSE);//阴影

m_mschart.EditCopy();

if(OpenClipboard())//m_mschart.

{

hDib = GetClipboardData(CF_DIB);

hPalette = (HPALETTE)GetClipboardData(CF_PALETTE);

CloseClipboard();

}

else

return;

m_mschart.GetPlot().GetBackdrop()

.GetFill().GetBrush().GetFillColor().Set(192, 192, 192);

m_mschart.GetPlot().GetBackdrop().GetShadow().SetStyle(TRUE);//阴影

CPrintDialog mypd(FALSE);// 构造打印设置对话框对象

mypd.GetDefaults(); // 检取缺省打印设备的设备环境

DEVMODE *dm = mypd.GetDevMode();// 提取缺省打印机的DEVMODE数据

dm->dmOrientation = 2;

// dm->dmPrintQuality = 1200;

PRINTDLG pd;

{

pd.lStructSize = sizeof(PRINTDLG);

pd.Flags = PD_RETURNDC;

pd.hDC = NULL;

pd.hwndOwner = NULL;

pd.hInstance = NULL;

pd.nMaxPage = 256;

pd.nMinPage = 1;

pd.nFromPage = 1;

pd.nToPage = 256;

pd.nCopies = 1;

pd.hDevMode = dm;

pd.hDevNames = NULL;

}

if(!PrintDlg(&pd))

{

return;

}

ASSERT(pd.hDC != NULL);

CDC pDC;

pDC.Attach(pd.hDC);

int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);//返回设备的物理显示宽度mm

int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);//返回设备的物理显示高度mm

if(pd.hDC != NULL)

{

DOCINFO di;

di.cbSize = sizeof(DOCINFO);

di.lpszDocName = "图象打印";

di.lpszOutput = (LPTSTR)NULL;

di.lpszDatatype = (LPTSTR)NULL;

di.fwType = 0;

pDC.StartDoc(&di); file://通知打印机驱动程序执行一新的打印任务

pDC.StartPage(); file://通知打印机驱动程序打印新页

SetMapMode(pd.hDC, MM_TEXT);//设置当前影射模式为:单位0.001英寸

CRect rectPrint(0, 0, nHorRes, nVerRes);

file://打印图形

BITMAPINFO* pbi = (BITMAPINFO*)GlobalLock(hDib);

if (pbi != NULL)

{

BYTE* Data = (BYTE*)(pbi->bmiColors);

if (pbi->bmiHeader.biBitCount <= 8)

{

int nColor = pbi->bmiHeader.biClrUsed

? pbi->bmiHeader.biClrUsed : (1<<pbi->bmiHeader.biBitCount);

Data += sizeof(RGBQUAD) *nColor;

}

if (hPalette != NULL)

SelectPalette(pd.hDC, hPalette, TRUE);

StretchDIBits(pd.hDC, rectPrint.left, rectPrint.top, rectPrint.Width(),

rectPrint.Height(), 0, 0, pbi->bmiHeader.biWidth,

pbi->bmiHeader.biHeight, Data, pbi, DIB_RGB_COLORS, SRCCOPY);

GlobalUnlock(hDib);

}

EndPage(pd.hDC); file://通知打印机驱动程序页结束

EndDoc(pd.hDC);

pDC.DeleteDC();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航