大家好,我编的一个小程序需要打印功能,但碰到一个非常奇怪的问题,症状如下:
1,debug时可以用打印对话框来设置打印范围,如第2页到第5页。
2,release时不可以设置,如设置打印第2页到第5页,它还是从头到尾打印所有页。我很郁闷,于是新建了一个新的干净的工程,只改了如下几个地方:
1,
void Cmfc02View::OnDraw(CDC* pDC)
{
Cmfc02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
pDC->Rectangle(0,0,300,-100);
}
2,
void Cmfc02View::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 添加额外的打印前进行的初始化过程
pInfo->SetMaxPage(5);
}
3,
void Cmfc02View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
pDC->SetMapMode(MM_LOENGLISH); CView::OnPrepareDC(pDC, pInfo);
}还是和之前一样,到release时就不能设置打印范围了,我在release时通过提示框打印了
pInfo的GetToPage()和GetFromPage(),数值正确,所以现在不知应该怎样继续改了,希望有
思路和类似经验的朋友指教,谢谢。
1,debug时可以用打印对话框来设置打印范围,如第2页到第5页。
2,release时不可以设置,如设置打印第2页到第5页,它还是从头到尾打印所有页。我很郁闷,于是新建了一个新的干净的工程,只改了如下几个地方:
1,
void Cmfc02View::OnDraw(CDC* pDC)
{
Cmfc02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
pDC->Rectangle(0,0,300,-100);
}
2,
void Cmfc02View::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 添加额外的打印前进行的初始化过程
pInfo->SetMaxPage(5);
}
3,
void Cmfc02View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
pDC->SetMapMode(MM_LOENGLISH); CView::OnPrepareDC(pDC, pInfo);
}还是和之前一样,到release时就不能设置打印范围了,我在release时通过提示框打印了
pInfo的GetToPage()和GetFromPage(),数值正确,所以现在不知应该怎样继续改了,希望有
思路和类似经验的朋友指教,谢谢。
不知是不是指针的问题?
应该不是内存和指针的问题,我之前说的为了测试而新建的那个干净程序现在已经可以正常打印了。
release时
当:属性-》配置属性-》常规 里面使用:在共享 DLL 中使用 MFC
属性-》配置属性-》C/C++ -》代码生成 里面使用:多线程 DLL (/MD)
时不能正常打印。当:属性-》配置属性-》常规 里面使用:在静态库中使用 MFC
属性-》配置属性-》C/C++ -》代码生成 里面使用:多线程(/MT))
时可以正常打印。我正在编的程序基于微软的例子drawcli,http://msdn.microsoft.com/zh-cn/library/9t94971d%28VS.80%29.aspx,
好像不可以使用 在静态库中使用 MFC + 多线程(/MT))。
正在想办法,我现在感觉应该是程序生成配置的问题。
属性-》配置属性-》C/C++ -》代码生成 里面使用:多线程调试 DLL (/MDd)
可以吗?
这个是debug用的运行时库,用在release里面可不可以?
问题不出在软件生成配置上,我追踪进去DEBUG,发现在OnFilePrint里面
会使用pInfo的GetMaxPage()来更改打印循环的nEndPage,所以应该在OnPrint里面
加入pInfo->SetMaxPage(pInfo->GetToPage()),利用用户输入的数据更改最大打印
页码。