StartDoc()打印提示“文件不存在”?

咖啡味道999 2013-05-06 11:53:44
各位大侠,我在编写一个打印程序,执行过程中出现“文件不存在‘提示框,请问这是怎么回事呢、。

1、我新建一个对话框打印程序,可以正常打印,其他的例程我都试过,在例程中可以打印的程序,在我的程序里都不能打印,郁闷中;;;;;;
2、参考代码如下

void CPrintFormDlg::OnButton1()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CRect m_rect,framerect;
//获取对话框的大小
GetWindowRect(m_rect);
//获取图片控件大小
m_Frame.GetWindowRect(framerect);
int x,y;
x = framerect.left - m_rect.left;

CDC* pImageDC = GetDC(); //得到屏幕的分辨率(即;DPI设置 一般为96.)
int formx,formy;
formx = pImageDC->GetDeviceCaps(LOGPIXELSX);
formy = pImageDC->GetDeviceCaps(LOGPIXELSY);
ReleaseDC(pImageDC);


CPrintDialog m_printdlg (FALSE,PD_RETURNDEFAULT); //打印对话框加载

if (m_printdlg.DoModal()==IDOK) //如果点击OK,那么就开始打印准备工作。
{

CDC pdc; //建立一个新的DC,。
pdc.Attach(m_printdlg.GetPrinterDC());
//获取打印机与屏幕的分辨率比率

int printerx,printery; //得到打印机的分辨率
printerx = pdc.GetDeviceCaps(LOGPIXELSX);
printery = pdc.GetDeviceCaps(LOGPIXELSY);

double ratex,ratey; //得到打印机和屏幕的分辨率的比值。
ratex = (double)printerx/formx;
ratey = (double)printery/formy;

CClientDC dc(this); //根据要打印的控件大小建立一个位图区域
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc,framerect.Width()+2*x,framerect.Height()+x);

CDC imagedc; //将位图区域加载到内存当中。
imagedc.CreateCompatibleDC(&dc);
imagedc.SelectObject(&bmp);
imagedc.BitBlt(0,0,framerect.Width()+2*x,framerect.Height()+x,&dc,0,0,SRCCOPY);
BITMAP bmap;
bmp.GetBitmap(&bmap);


int panelsize = 0;
//非真彩色位图
if (bmap.bmBitsPixel <16)
panelsize = pow(2,bmap.bmBitsPixel*sizeof(RGBQUAD));
//设置BITMAPINFO结构
BITMAPINFO* bInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);
bInfo->bmiHeader.biClrImportant = 0;
bInfo->bmiHeader.biBitCount = bmap.bmBitsPixel;
bInfo->bmiHeader.biCompression = 0;
bInfo->bmiHeader.biHeight = bmap.bmHeight;
bInfo->bmiHeader.biPlanes = bmap.bmPlanes;
bInfo->bmiHeader.biSize = sizeof(BITMAPINFO);
bInfo->bmiHeader.biSizeImage = bmap.bmWidthBytes*bmap.bmHeight;
bInfo->bmiHeader.biWidth = bmap.bmWidth;
bInfo->bmiHeader.biXPelsPerMeter = 0;
bInfo->bmiHeader.biYPelsPerMeter = 0;
char* pData = new char[bmap.bmWidthBytes*bmap.bmHeight];
::GetDIBits(imagedc.m_hDC,bmp,0,bmap.bmHeight,pData,bInfo,DIB_RGB_COLORS);

//打印图像
pdc.StartDoc("print");

// //pdc.StartDoc(*bInfo);
::StretchDIBits(pdc.m_hDC,50,50,(int)((framerect.Width()*ratex)+2*x)
,(int)((framerect.Height()+2*x)*ratey),0,0,framerect.Width()+2*x
,framerect.Height()+2*x,pData,bInfo,DIB_RGB_COLORS,SRCCOPY);
pdc.EndDoc();
LocalFree(bInfo);
delete[] pData;
bmp.DeleteObject();
}
}


3、调试过程中,到了红色区域就出现”文件无法打印“提示框,并且是一直出现,请问这是怎么回事?
是不是我的程序中没有绘图句柄?
...全文
329 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
咖啡味道999 2013-05-13
  • 打赏
  • 举报
回复
您好,谢谢您的回答,我已经找到无法打印的原因了。 具体原因是:我在程序中有一个定时读文件的程序,读取文件的目录方式用的的相对方式,当打印开始的时候,默认目录发生变化,读取文件的时候找不到要读取文件的目录,就报错“文件不存在”, 问题解决方法:每次打印前取得当前默认目录,然后才打印,打印完毕后,再回复当前默认目录。读取文件前,先取得当前默认目录,然后再读取文件。 第一次发帖就有好心人回复,谢谢了
qj5656 2013-05-08
  • 打赏
  • 举报
回复
拿到hdc,设置绘图场景

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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