Здравствуйте, Аноним, Вы писали:
А>Возможно ли прикрутить печать/предварительный просмотр к dialog-based приложению или элементу управления ActiveX? Если да, то каким образом?
Ищите на
codeproject.com статью, о прикручивании к CDialog Document/View.
Дальнейшее, нужно только в случае, когда диалог в ходе работы то открывают, то закрывают:
Когда заработает, не добавьте что-то похожее на:
Во View:
void C...View::OnFilePrintPreview()
{
// При переопределении функции CView::OnFilePrintPreview
// необходимо самим создать структуру для сохранения
// текущего состояния фрейма
if (previewState) delete previewState;
previewState = new CPrintPreviewState;
// Обязательный вызов, в котором задаем идентификатор
// блока диалога для отображаемой панели инструментов
if (!DoPrintPreview(IDD_PREVIEW_TOOLBAR, this, RUNTIME_CLASS(CPreviewView), previewState)) {
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
delete previewState;
previewState = NULL;
}
}
//Поскольку в СPreviewView CView объявлено friend, из него и закрываем
void C...View::ClosePreviewView(CFrameWnd *w)
{
previewState->lpfnCloseProc(w);
delete previewState;
previewState = NULL;
}
В диалоге:
void C...Dialog::OnClose()
{
//Предполагаем, что у нас есть только одно не наше CView -- для печати
CView *cur = m_pFrame->GetActiveView();
C...View *v = (C...View *)m_pDocument->GetView(RUNTIME_CLASS(C...View));
if (v != cur) v->ClosePreviewView(m_pFrame);
}
CDialog::OnClose();
}