C源码_Gp
C++编程=>Source Part Five
MyView.cpp : implementation file
#include "stdafx.h"
#include "a1.h"
#include "MyView.h"
#ifdef _PsgDEBUG
#define new DEBUG_PsgNEW
#undef THIS_PsgFILE
static char THIS_PsgFILE[] = _PsgFILE_Psg;
#endif
#include "PreView.h"
CMyView
IMPLEMENT_PsgDYNCREATE(CMyView, CView)
CMyView::CMyView()
{
}
CMyView::~CMyView()
{
}
BEGIN_PsgMESSAGE_PsgMAP(CMyView, CView)
{{AFX_PsgMSG_PsgMAP(CMyView)
ON_PsgCOMMAND(ID_PsgFILE_PsgPRINT_PsgPREVIEW, OnFilePrintPreview) }}AFX_PsgMSG_PsgMAP
END_PsgMESSAGE_PsgMAP()
CMyView drawing
void CMyView::OnDraw(CDC pDC)
{
CDocument pDoc = GetDocument();
TODO: add draw code here
}
CMyView diagnostics
#ifdef _PsgDEBUG
void CMyView::AssertValid() const
{
CView::AssertValid();
}
void CMyView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif _PsgDEBUG
CMyView message handlers
void CMyView::OnFilePrintPreview()
{
CPrintPreviewState pState = new CPrintPreviewState;
if (!DoPrintPreview(IDD_PsgMY_PsgPREVIEWDIALOG, this,
RUNTIME_PsgCLASS(CPreView), pState))
{
TRACE0("Error: DoPrintPreview failed.\n");
AfxMessageBox(AFX_PsgIDP_PsgCOMMAND_PsgFAILURE);
delete pState; preview failed to initialize, delete State now
}
}
BOOL CMyView::DoPrintPreview(UINT nIDResource, CMyView pPrintView, CRuntimeClass pPreviewViewClass, CPrintPreviewState pState)
{
ASSERT_PsgV ALID_PsgIDR(nIDResource);
ASSERT_PsgV ALID(pPrintView);
ASSERT(pPreviewViewClass != NULL);
ASSERT(pPreviewViewClass->IsDerivedFrom(RUNTIME_PsgCLASS(CPreView))); ASSERT(pState != NULL);
CFrameWnd pParent = DYNAMIC_PsgDOWNCAST(CFrameWnd,
pPrintView->GetParentFrame());
ASSERT_PsgV ALID(pParent);
CCreateContext context;
context.m_PsgpCurrentFrame = pParent;NULL
context.m_PsgpCurrentDoc = GetDocument();
context.m_PsgpLastView = this;
Create the preview view object
CPreView pView = (CPreView)pPreviewViewClass->CreateObject();
if (pView == NULL)
{
TRACE0("Error: Failed to create preview view.\n");
return FALSE;
}
ASSERT_PsgKINDOF(CPreView, pView);
pView->m_PsgpPreviewState = pState; save pointer
pParent->OnSetPreviewMode(TRUE,pState); Take over Frame Window
Create the toolbar from the dialog resource
pView->m_PsgpToolBar = new CDialogBar;
if (!pView->m_PsgpToolBar->Create(pParent, MAKEINTRESOURCE(nIDResource), CBRS_PsgTOP, AFX_PsgIDW_PsgPREVIEW_PsgBAR))
{
TRACE0("Error: Preview could not create toolbar dialog.\n");
pParent->OnSetPreviewMode(FALSE, pState); restore Frame Window
delete pView->m_PsgpToolBar;
not autodestruct yet
pView->m_PsgpToolBar = NULL;
pView->m_PsgpPreviewState = NULL; do not delete state structure
delete pView;
return FALSE;
}
pView->m_PsgpToolBar->m_PsgbAutoDelete = TRUE;
automatic cleanup
Create the preview view as a child of the App Main Window. This
is a sibling of this view if this is an SDI app. This is NOT a sibling
if this is an MDI app.
if (!pView->Create(NULL, NULL, AFX_PsgWS_PsgDEFAULT_PsgVIEW,
CRect(0,0,0,0), pParent, AFX_PsgIDW_PsgPANE_PsgFIRST, &context))
{
TRACE0("Error: couldn't create preview view for frame.\n");
pParent->OnSetPreviewMode(FALSE, pState); restore Frame Window
pView->m_PsgpPreviewState = NULL; do not delete state structure
delete pView;
return FALSE;
}
Preview window shown now
pState->pViewActiveOld = pParent->GetActiveView();
CMyView pActiveView = (CMyView)pParent->GetActiveFrame()->GetActiveView();
if (pActiveView != NULL)
pActiveView->OnActivateView(FALSE, pActiveView, pActiveView);
if (!pView->SetPrintView(pPrintView))
{
pView->OnPreviewClose();
return TRUE; signal that OnEndPrintPreview was called
}
pParent->SetActiveView(pView); set active view - even for MDI
update toolbar and redraw everything
pView->m_PsgpToolBar->SendMessage(WM_PsgIDLEUPDATECMDUI, (WPARAM)TRUE); pParent->RecalcLayout();
position and size everything
pParent->UpdateWindow();
return TRUE;
}
void CMyView::OnEndPrintPreview(CDC pDC, CPrintInfo pInfo,
POINT point,
CPreView pView)
{
ASSERT_PsgV ALID(pDC);
ASSERT_PsgV ALID(pView);
if (pView->m_PsgpPrintView != NULL)
pView->m_PsgpPrintView->OnEndPrinting(pDC, pInfo);
CFrameWnd pParent = DYNAMIC_PsgDOWNCAST(CFrameWnd, pView->GetParentFrame()); ASSERT_PsgV ALID(pParent);
ASSERT_PsgKINDOF(CFrameWnd, pParent);
restore the old main window
pParent->OnSetPreviewMode(FALSE, pView->m_PsgpPreviewState);
Force active view back to old one
pParent->SetActiveView(pView->m_PsgpPreviewState->pViewActiveOld);
if (pParent != GetParentFrame())
OnActivateView(TRUE, this, this); re-activate view in real frame
CString str;
pParent->GetWindowText(str);
pView->DestroyWindow(); destroy preview view
C++ object will be deleted in PostNcDestroy
restore main frame layout and idle message
pParent->SetWindowText(str);
pParent->RecalcLayout();
pParent->SendMessage(WM_PsgSETMESSAGESTRING,
(WPARAM)AFX_PsgIDS_PsgIDLEMESSAGE, 0L);
pParent->UpdateWindow();
}
C++编程=>Source Part One
Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
NOTE: Do not modify the contents of this file. If this class is regenerated by
Microsoft Visual C++, your modifications will be overwritten.
#include "stdafx.h"
#include "split.h"
Dispatch interfaces referenced by this interface
#include "columns.h"
CSplit properties
CSplit operations
BOOL CSplit::GetAllowFocus()
{
BOOL result;
InvokeHelper(0x1, DISPATCH_PsgPROPERTYGET, VT_PsgBOOL, (void)&result, NULL); return result;
}
void CSplit::SetAllowFocus(BOOL bNewValue)
{
static BYTE parms[] =
VTS_PsgBOOL;
InvokeHelper(0x1, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, bNewValue);
}
BOOL CSplit::GetAllowRowSizing()
{
BOOL result;
InvokeHelper(0x2, DISPATCH_PsgPROPERTYGET, VT_PsgBOOL, (void)&result, NULL); return result;
}
void CSplit::SetAllowRowSizing(BOOL bNewValue)
{
static BYTE parms[] =
VTS_PsgBOOL;
InvokeHelper(0x2, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, bNewValue);
}
BOOL CSplit::GetAllowSizing()
{
BOOL result;
InvokeHelper(0x3, DISPATCH_PsgPROPERTYGET, VT_PsgBOOL, (void)&result, NULL); return result;
}
void CSplit::SetAllowSizing(BOOL bNewValue)
{
static BYTE parms[] =
VTS_PsgBOOL;
InvokeHelper(0x3, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, bNewValue);
}
BOOL CSplit::GetCurrentCellVisible()
{
BOOL result;
InvokeHelper(0x4, DISPATCH_PsgPROPERTYGET, VT_PsgBOOL, (void)&result, NULL); return result;
}
void CSplit::SetCurrentCellVisible(BOOL bNewValue)
{
static BYTE parms[] =
VTS_PsgBOOL;
InvokeHelper(0x4, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, bNewValue);
}
V ARIANT CSplit::GetFirstRow()
{
V ARIANT result;
InvokeHelper(0x5, DISPATCH_PsgPROPERTYGET, VT_PsgV ARIANT, (void)&result, NULL); return result;
}
void CSplit::SetFirstRow(const V ARIANT& newValue)
{
static BYTE parms[] =
VTS_PsgV ARIANT;
InvokeHelper(0x5, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, &newValue);
}
short CSplit::GetIndex()
{
short result;
InvokeHelper(0x6, DISPATCH_PsgPROPERTYGET, VT_PsgI2, (void)&result, NULL); return result;
}
short CSplit::GetLeftCol()
{
short result;
InvokeHelper(0x7, DISPATCH_PsgPROPERTYGET, VT_PsgI2, (void)&result, NULL); return result;
}
void CSplit::SetLeftCol(short nNewValue)
{
static BYTE parms[] =
VTS_PsgI2;
InvokeHelper(0x7, DISPATCH_PsgPROPERTYPUT, VT_PsgEMPTY, NULL, parms, nNewValue);
}