|
とっちゃんさん、色々とご指導をありがとうございました。 Jitta on the way さん、コメントをありがとうございました。 だいたい希望するかたちになりそうです。 前後関係の理解がまだ不十分ですが、コードの要点を下にまとめておきます。
BEGIN_MESSAGE_MAP(CXView, CView) <中略> ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CXView::OnFilePrintPreview) // CView→CXView END_MESSAGE_MAP()
// CView::OnFilePrintPreview()をコピーして一部修正 void CXView::OnFilePrintPreview() { bXPreview = TRUE; // add <中略> if (!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this, RUNTIME_CLASS(CXPreviewView), pState)) // CPreviewView→CXPreviewView <中略> }
// CView::DoPrintPreview()をコピーして一部修正 BOOL CXView::DoPrintPreview(UINT nIDResource, CView* pPrintView, CRuntimeClass* pPreviewViewClass, CPrintPreviewState* pState) { <中略> CWnd* pMainWnd = AfxGetMainWnd(); // GetParentFrame()→AfxGetMainWnd() <中略> CXPreviewView* pView = (CXPreviewView*)pPreviewViewClass->CreateObject(); // CPreviewView→CXPreviewView <中略> CXView* pActiveView = (CXView*)pParent->GetActiveFrame()->GetActiveView(); // CView→CXView <中略> }
// CView::OnEndPrintPreview()をコピーして一部修正 void CXView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT, CXPreviewView* pView) // CPreviewView→CXPreviewView { <中略> if (pView->m_pPrintView != NULL) ((CXView*)(pView->m_pPrintView))->OnEndPrinting(pDC, pInfo); // (CXView*)
CWnd* pMainWnd = AfxGetMainWnd(); // GetParentFrame()→AfxGetMainWnd() <中略> bXPreview = FALSE; // add }
----
class CXPreviewView : public CPreviewView { DECLARE_DYNCREATE(CXPreviewView)
protected: DECLARE_MESSAGE_MAP()
public: void OnPreviewClose(); void OnPreviewPrint();
friend class CXView; };
----
IMPLEMENT_DYNCREATE(CXPreviewView, CPreviewView)
BEGIN_MESSAGE_MAP(CXPreviewView, CPreviewView) ON_COMMAND(AFX_ID_PREVIEW_CLOSE, &CXPreviewView::OnPreviewClose) ON_COMMAND(AFX_ID_PREVIEW_PRINT, &CXPreviewView::OnPreviewPrint) END_MESSAGE_MAP()
// CPreviewView::OnPreviewClose()をコピーして修正 void CXPreviewView::OnPreviewClose() { CWnd* pMainWnd = AfxGetMainWnd(); // GetParentFrame()→AfxGetMainWnd() <中略> ((CXView*)m_pOrigView)->OnEndPrintPreview(m_pPreviewDC, m_pPreviewInfo, // (CXView*) CPoint(0, 0), this); }
// CPreviewView::OnPreviewPrint()をコピー void CXPreviewView::OnPreviewPrint() { <中略> }
----
BOOL bXPreview = FALSE; // add プレビューを表示中
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) <中略> ON_WM_CLOSE() // add END_MESSAGE_MAP()
void CMainFrame::OnClose() { // プレビュー時は「×」ボタンを無視 // 通常時は「×」ボタンで閉じる if(!bXPreview) { CMDIFrameWnd::OnClose(); } }
以上です。 ありがとうございました。
環境:VS2005
|