打印预览界面的打印按钮单击后程序异常崩溃的问题 本帖最后由 little_sand 于 2012-06-29 10:47:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 遇到一样的问题,也是刚接手一个工程,从VC6.0 升级到了VS2010。然后也遇到这个问题。解决了的话LZ 发消息通知一声噻。 找到问题了,加一个判断就好了,不过缺陷是预览窗口点了‘打印’不会关闭预览窗口···而且在预览‘打印’还是不激活事件···唉···今天就到这了···你能在预览打印了叫我···void CPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView) { CView::OnEndPrintPreview(pDC, pInfo, point, pView); if(m_bPrint) GetParent()->DestroyWindow(); //GetParent()->DestroyWindow();} VC6.0的很多错误都没提示,到了VS2010就严格多了GetParent()->DestroyWindow(); 执行了这句话,再到上面的void CPreviewView::OnPreviewPrint(){ // cause print (can be overridden by catching the command) CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame(); OnPreviewClose(); CWinThread *pThread = AfxGetThread(); ASSERT( pThread ); CWnd *pMainWnd = pThread->m_pMainWnd; ASSERT_VALID(pMainWnd); //下面的 pOrigFrame 值就变了,毕竟销毁了嘛 COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame); if (pInPlaceFrame) { pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT); } else { // ensure we print the correct frame pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT); }} 原因找到了:VC6.0与VS2010中的函数不同了。// VC6.0中的代码void CPreviewView::OnPreviewPrint(){ OnPreviewClose(); // force close of Preview // cause print (can be overridden by catching the command) CWnd* pMainWnd = AfxGetThread()->m_pMainWnd; ASSERT_VALID(pMainWnd); pMainWnd->SendMessage(WM_COMMAND, ID_FILE_PRINT);}// VS2010中的代码void CPreviewView::OnPreviewPrint(){ // cause print (can be overridden by catching the command) CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame(); OnPreviewClose(); CWinThread *pThread = AfxGetThread(); ASSERT( pThread ); CWnd *pMainWnd = pThread->m_pMainWnd; ASSERT_VALID(pMainWnd); COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame); if (pInPlaceFrame) { pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT); } else { // ensure we print the correct frame pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT); }}下面想想解决办法吧。 又是MFC的问题 服务器端的TCP如果长时间没有通讯,可以自动断开吗? CtreeCtrl的加号和减号的XP风格以及如何替换 VC6下创建一个新进程进行录像 .. 大家来给个意见 如何远程访问windows共享文件夹? 200分求情人节 小程序 C++ 和C# 代码检查工具 串口通信中的CE_BREAK错误是由什么原因造成的? Graphics.DrawImage 中的 GraphicsUnit 和 Rectangle 怎么声明? 关于COM组件的注册 API读取文件报错,求助啊
{ CView::OnEndPrintPreview(pDC, pInfo, point, pView);
if(m_bPrint)
GetParent()->DestroyWindow();
//GetParent()->DestroyWindow();
}
{
// cause print (can be overridden by catching the command)
CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame(); OnPreviewClose();
CWinThread *pThread = AfxGetThread();
ASSERT( pThread );
CWnd *pMainWnd = pThread->m_pMainWnd;
ASSERT_VALID(pMainWnd);
//下面的 pOrigFrame 值就变了,毕竟销毁了嘛
COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame);
if (pInPlaceFrame)
{
pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
}
else
{
// ensure we print the correct frame
pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
}
}
void CPreviewView::OnPreviewPrint()
{
OnPreviewClose(); // force close of Preview // cause print (can be overridden by catching the command)
CWnd* pMainWnd = AfxGetThread()->m_pMainWnd;
ASSERT_VALID(pMainWnd);
pMainWnd->SendMessage(WM_COMMAND, ID_FILE_PRINT);
}// VS2010中的代码
void CPreviewView::OnPreviewPrint()
{
// cause print (can be overridden by catching the command)
CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame(); OnPreviewClose();
CWinThread *pThread = AfxGetThread();
ASSERT( pThread );
CWnd *pMainWnd = pThread->m_pMainWnd;
ASSERT_VALID(pMainWnd); COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame);
if (pInPlaceFrame)
{
pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
}
else
{
// ensure we print the correct frame
pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
}
}
下面想想解决办法吧。