打印剪切区问题
anlun 2003-12-09 03:52:20 class Print_INFO//打印信息
{
public:BOOL m_bIsPrint;
~Print_INFO();
DEVMODE * m_pPrintMode;
CString m_DriverName;
CString m_DeviceName;
CString m_PortName;
};
Print_INFO m_PrintInfo;
void GetDefaultPrintInfo(bool bHeng)
{
CPrintDialog Dlg(TRUE);
m_PrintInfo.m_bIsPrint = Dlg.GetDefaults();
if(!m_PrintInfo.m_bIsPrint) return;
if(m_PrintInfo.m_pPrintMode) GlobalUnlock(m_PrintInfo.m_pPrintMode);
m_PrintInfo.m_pPrintMode = Dlg.GetDevMode();
m_PrintInfo.m_DriverName = Dlg.GetDriverName();
m_PrintInfo.m_DeviceName = Dlg.GetDeviceName();
m_PrintInfo.m_PortName = Dlg.GetPortName();
if(bHeng)
{
m_PrintInfo.m_pPrintMode->dmOrientation=DMORIENT_LANDSCAPE;
}
else
{
m_PrintInfo.m_pPrintMode->dmOrientation=DMORIENT_PORTRAIT;
}
}
void PrintChart()
{
if(!m_PrintInfo.m_bIsPrint)
{
MessageBox("没有默认的打印机,请添加默认的打印机再进行打印。","提示...");
return;
}
DEVMODE *pPrintMode=m_PrintInfo.m_pPrintMode;
//创建打印设置DC
CDC PrintDC;
PrintDC.CreateDC(m_PrintInfo.m_DriverName,
m_PrintInfo.m_DeviceName,
m_PrintInfo.m_PortName ,
pPrintMode);
DOCINFO DocInfo;
memset(&DocInfo,0,sizeof(DOCINFO));
DocInfo.cbSize=sizeof(DOCINFO);
DocInfo.lpszDocName="水位流量关系曲线打印";
DocInfo.lpszOutput=NULL;
//
// Start the document
int iErr = PrintDC.StartDoc(&DocInfo);
if(iErr < 0)
{
//success returns positive value
PrintDC.AbortDoc();
PrintDC.DeleteDC();
return;
}
//如果成功设置打印标志
PrintDC.m_bPrinting=TRUE;
CSize Paper_size; //纸张的大小以象素为单位
PrintDC.SetMapMode(MM_ANISOTROPIC);
//转换坐标映射方式
CSize size(GetSystemMetrics(SM_CXSCREEN) ,
GetSystemMetrics(SM_CYSCREEN));
// CSize size(800,560);
PrintDC.SetWindowExt(size); //确定窗口大小
//得到实际设备每逻辑英寸的像素数量
double xLogPixPerInch =(double) PrintDC.GetDeviceCaps(LOGPIXELSX);
double yLogPixPerInch =(double) PrintDC.GetDeviceCaps(LOGPIXELSY);
{
int cxPagePixels = PrintDC.GetDeviceCaps(HORZRES);//象素
int cyPagePixels = PrintDC.GetDeviceCaps(VERTRES);//象素
Paper_size.cx=cxPagePixels*96.00/xLogPixPerInch;
Paper_size.cy=cyPagePixels*96.00/yLogPixPerInch;
}
//得到设备坐标和逻辑坐标的比例
long xExt = (double)size.cx * xLogPixPerInch/96.0;
long yExt = (double)size.cy * yLogPixPerInch/96.0;
PrintDC.SetViewportExt((int)xExt, (int)yExt);
CRect Rt;
Rt.left=0;
Rt.right=100;
Rt.top=0;
Rt.bottom=100;
CRgn Rgn;
Rgn.CreateRectRgn(Rt.left,Rt.top,Rt.right,Rt.bottom);
PrintDC.SelectClipRgn(&ClipRgn);
CString Str;
Str.Format"12345678901234567890123456789012345678901234567890hhhhhhhhhhhhhh");
PrintDC.StartPage();
PrintDC.TextOut(90,20,Str);
PrintDC.SelectClipRgn(NULL);
Rgn.DeleteObject();
PrintDC.EndPage();
PrintDC.m_bPrinting=FALSE;
PrintDC.EndDoc();
PrintDC.DeleteDC();
}
按理应该不会完整打印完那个串的,因为它的长度已经超出剪切区;