Mfc “打印预览”对话框中的“打印”按钮不显示';行不通

Mfc “打印预览”对话框中的“打印”按钮不显示';行不通,mfc,Mfc,按下“打印预览”对话框中的“打印”按钮后,将不会显示任何内容。 我认为在按下打印预览对话框中的打印按钮后,打印对话框应该会出现,但它没有。 它只是回到主屏幕 附言 这不是我开始项目时已经完成的功能。 我手动添加了此函数,因为我使用了另一个从CScrollView派生的视图,而未使用原始视图(CMyView) 代码如下: void SignalView::OnFilePrintPreview() { PRINTDLG printDlg = { 0 }; printDlg.lStru

按下“打印预览”对话框中的“打印”按钮后,将不会显示任何内容。 我认为在按下打印预览对话框中的打印按钮后,打印对话框应该会出现,但它没有。 它只是回到主屏幕

附言

这不是我开始项目时已经完成的功能。 我手动添加了此函数,因为我使用了另一个从CScrollView派生的视图,而未使用原始视图(CMyView

代码如下:

void SignalView::OnFilePrintPreview()
{
    PRINTDLG printDlg = { 0 };
    printDlg.lStructSize = sizeof(PRINTDLG);
    if (AfxGetApp()->GetPrinterDeviceDefaults(&printDlg))
    {
        if (printDlg.hDevMode)
        {
            DEVMODE *dm = (DEVMODE*)::GlobalLock(printDlg.hDevMode);
            if (dm)
            {
                dm->dmFields |= DM_ORIENTATION;
                dm->dmOrientation = DMORIENT_LANDSCAPE;
                ::GlobalUnlock(printDlg.hDevMode);
            }
        }
    }
    CScrollView::OnFilePrintPreview();
}

BOOL SignalView::OnPreparePrinting(CPrintInfo* pInfo)
{
    __try {
        pInfo->SetMinPage(1);
        pInfo->SetMaxPage(1);
    //  pInfo->m_bPreview = TRUE;
        return DoPreparePrinting(pInfo);
    }__except (GetExceptionCode()==EXCEPTION_ACCESS_VIOLATION){
        AfxMessageBox(_T("Printer Error!"));
        return FALSE; // Fail!
    }
}

void SignalView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{

}

void SignalView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{

}

有什么我遗漏的吗?

也许你的消息映射中没有
OnFilePrint
。但这很难说,因为您还没有展示很多代码。将
CView
更改为
CScrollView
不会在此处产生任何问题。您还可以尝试以下操作:创建一个基于CScrollView的测试应用程序,并从中获取打印和打印预览处理程序,并使用适当的代码将它们映射到您的应用程序上。非常感谢您的评论。我将OnFilePrint消息映射放在命令(ID\u FILE\u PRINT,&CScrollView::OnFilePrint)上,它现在运行得非常好。