打印剪切区问题

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();


}
按理应该不会完整打印完那个串的,因为它的长度已经超出剪切区;
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2003-12-10
  • 打赏
  • 举报
回复
我这里测试没什么问题啊,奇怪
COOL099 2003-12-09
  • 打赏
  • 举报
回复
You should always call the SelectClipRgn function using text units.
PrintDC.SetMapMode(MM_ANISOTROPIC);//因此應改為MM_TEXT
Goldcastle 2003-12-09
  • 打赏
  • 举报
回复
用PrintDC.IntersectClipRect(&Rt);不就行了,我就是这样用的。试过了;
bluebohe 2003-12-09
  • 打赏
  • 举报
回复
bluebohe@163.com
你能给我发过来一个环境吗?谢谢:)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧