StaticDoc.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // StaticDoc.cpp : implementation of the CStaticDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "StkUI.h"
  5. #include "StaticDoc.h"
  6. #include "ChildFrm.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CStaticDoc
  14. IMPLEMENT_DYNCREATE(CStaticDoc, CDocument)
  15. BEGIN_MESSAGE_MAP(CStaticDoc, CDocument)
  16. //{{AFX_MSG_MAP(CStaticDoc)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()
  21. CStaticDoc* CStaticDoc::CreateNewDocument( )
  22. {
  23. CRuntimeClass *pDocClass = RUNTIME_CLASS(CStaticDoc);
  24. CStaticDoc* pDocument = (CStaticDoc*)pDocClass->CreateObject();
  25. if (pDocument == NULL)
  26. {
  27. TRACE1("Warning: Dynamic create of document type %hs failed.n",
  28. pDocClass->m_lpszClassName);
  29. return NULL;
  30. }
  31. ASSERT_KINDOF(CStaticDoc, pDocument);
  32. return pDocument;
  33. }
  34. CStaticDoc* CStaticDoc::OpenDocumentFile( LPCTSTR lpszPathName )
  35. {
  36. // Resolve File Name
  37. TCHAR szPath[_MAX_PATH];
  38. ASSERT(lstrlen(lpszPathName) < sizeof(szPath));
  39. if( NULL != lpszPathName )
  40. {
  41. TCHAR szTemp[_MAX_PATH];
  42. if (lpszPathName[0] == '"')
  43. ++lpszPathName;
  44. lstrcpyn(szTemp, lpszPathName, _MAX_PATH);
  45. LPTSTR lpszLast = _tcsrchr(szTemp, '"');
  46. if (lpszLast != NULL)
  47. *lpszLast = 0;
  48. AfxFullPath(szPath, szTemp);
  49. TCHAR szLinkName[_MAX_PATH];
  50. if (AfxResolveShortcut(AfxGetMainWnd(), szPath, szLinkName, _MAX_PATH))
  51. lstrcpy(szPath, szLinkName);
  52. }
  53. // Create document
  54. CStaticDoc *pDocument = CreateNewDocument( );
  55. if( NULL == pDocument )
  56. return NULL;
  57. if (lpszPathName == NULL)
  58. {
  59. // create a new document
  60. if (!pDocument->OnNewDocument())
  61. {
  62. // user has been alerted to what failed in OnNewDocument
  63. TRACE0("CStaticDoc::OnNewDocument returned FALSE.n");
  64. delete pDocument;
  65. return NULL;
  66. }
  67. }
  68. else
  69. {
  70. CWaitCursor wait;
  71. // open an existing document
  72. BOOL bWasModified = pDocument->IsModified();
  73. pDocument->SetModifiedFlag(FALSE);  // not dirty for open
  74. if (!pDocument->OnOpenDocument( szPath ))
  75. {
  76. // user has been alerted to what failed in OnOpenDocument
  77. TRACE0("CStaticDoc::OnOpenDocument returned FALSE.n");
  78. if (!pDocument->IsModified())
  79. {
  80. // original document is untouched
  81. pDocument->SetModifiedFlag(bWasModified);
  82. }
  83. else
  84. {
  85. // we corrupted the original document
  86. if (!pDocument->OnNewDocument())
  87. {
  88. TRACE0("Error: OnNewDocument failed after trying to open a document - trying to continue.n");
  89. // assume we can continue
  90. }
  91. }
  92. delete pDocument;
  93. return NULL;        // open failed
  94. }
  95. pDocument->SetPathName(szPath);
  96. }
  97. return pDocument;
  98. }
  99. /////////////////////////////////////////////////////////////////////////////
  100. // CStaticDoc construction/destruction
  101. CStaticDoc::CStaticDoc()
  102. {
  103. // TODO: add one-time construction code here
  104. m_bAutoDelete = FALSE;
  105. }
  106. CStaticDoc::~CStaticDoc()
  107. {
  108. }
  109. BOOL CStaticDoc::OnNewDocument()
  110. {
  111. if (!CDocument::OnNewDocument())
  112. return FALSE;
  113. // TODO: add reinitialization code here
  114. // (SDI documents will reuse this document)
  115. return TRUE;
  116. }
  117. void CStaticDoc::OnCloseDocument() 
  118. {
  119. // TODO: Add your specialized code here and/or call the base class
  120. CDocument::OnCloseDocument();
  121. }
  122. UINT CStaticDoc::GetIDResource( )
  123. {
  124. return IDR_SIMTYPE; //MAINFRAME;
  125. }
  126. CView * CStaticDoc::GetViewIfExist( CRuntimeClass *pViewClass )
  127. {
  128. POSITION pos = GetFirstViewPosition( );
  129. CView * pView = NULL;
  130. while( pView = GetNextView(pos) )
  131. {
  132. if( pView && pView->IsKindOf( pViewClass ) )
  133. {
  134. return pView;
  135. }
  136. }
  137. return NULL;
  138. }
  139. CView* CStaticDoc::GetActiveView( )
  140. {
  141. CMainFrame * pMainFrame = AfxGetMainFrame();
  142. if( pMainFrame )
  143. {
  144. CChildFrame * pChildFrame = DYNAMIC_DOWNCAST( CChildFrame, pMainFrame->MDIGetActive() );
  145. if( pChildFrame )
  146. {
  147. CView * pView = pChildFrame->GetActiveView();
  148. if( pView && this == pView->GetDocument() )
  149. return pView;
  150. }
  151. }
  152. return NULL;
  153. }
  154. BOOL CStaticDoc::ShowStaticView( CRuntimeClass * pViewClass, BOOL bMaximized )
  155. {
  156. if( NULL == pViewClass )
  157. return FALSE;
  158. CChildFrame * pChildFrame = NULL;
  159. POSITION pos = GetFirstViewPosition( );
  160. CView * pView = NULL;
  161. while( pView = GetNextView(pos) )
  162. {
  163. if( pView->IsKindOf( pViewClass ) )
  164. {
  165. pChildFrame = DYNAMIC_DOWNCAST( CChildFrame, pView->GetParentFrame() );
  166. ASSERT( pChildFrame );
  167. if( pChildFrame )
  168. break;
  169. }
  170. }
  171. if( NULL == pChildFrame )
  172. {
  173. // create frame
  174. pChildFrame = CChildFrame::CreateNewFrame( this );
  175. ASSERT( pChildFrame );
  176. if( pChildFrame )
  177. {
  178. // create view
  179. CCreateContext context;
  180. context.m_pCurrentDoc = this;
  181. context.m_pCurrentFrame = pChildFrame;
  182. context.m_pLastView = NULL;
  183. context.m_pNewDocTemplate = NULL;
  184. context.m_pNewViewClass = pViewClass;
  185. CView * pNewView = DYNAMIC_DOWNCAST(CView,pChildFrame->CreateView( &context, AFX_IDW_PANE_FIRST));
  186. if( pNewView )
  187. {
  188. pChildFrame->SetActiveView( pNewView );
  189. pNewView->OnInitialUpdate( );
  190. }
  191. // if no active child frame, maximize this frame
  192. CMainFrame * pMainFrame = AfxGetMainFrame();
  193. if( pMainFrame )
  194. {
  195. CFrameWnd * pActiveFrame = AfxGetMainFrame()->GetActiveFrame();
  196. if( !pActiveFrame || !pActiveFrame->IsKindOf(RUNTIME_CLASS(CChildFrame)) )
  197. pChildFrame->MDIMaximize();
  198. }
  199. }
  200. }
  201. if( pChildFrame )
  202. {
  203. // activate it
  204. pChildFrame->MDIActivate();
  205. if( bMaximized )
  206. pChildFrame->MDIMaximize();
  207. else
  208. pChildFrame->ShowWindow( SW_SHOW );
  209. }
  210. return TRUE;
  211. }
  212. /////////////////////////////////////////////////////////////////////////////
  213. // CStaticDoc serialization
  214. void CStaticDoc::Serialize(CArchive& ar)
  215. {
  216. if (ar.IsStoring())
  217. {
  218. // TODO: add storing code here
  219. }
  220. else
  221. {
  222. // TODO: add loading code here
  223. }
  224. }
  225. /////////////////////////////////////////////////////////////////////////////
  226. // CStaticDoc diagnostics
  227. #ifdef _DEBUG
  228. void CStaticDoc::AssertValid() const
  229. {
  230. CDocument::AssertValid();
  231. }
  232. void CStaticDoc::Dump(CDumpContext& dc) const
  233. {
  234. CDocument::Dump(dc);
  235. }
  236. #endif //_DEBUG
  237. /////////////////////////////////////////////////////////////////////////////
  238. // CStaticDoc commands
  239. void CStaticDoc::SetTitle(LPCTSTR lpszTitle) 
  240. {
  241. // TODO: Add your specialized code here and/or call the base class
  242. m_strTitle = lpszTitle;
  243. }
  244. BOOL CStaticDoc::DoSave(LPCTSTR lpszPathName, BOOL bReplace)
  245. // Save the document data to a file
  246. // lpszPathName = path name where to save document file
  247. // if lpszPathName is NULL then the user will be prompted (SaveAs)
  248. // note: lpszPathName can be different than 'm_strPathName'
  249. // if 'bReplace' is TRUE will change file name if successful (SaveAs)
  250. // if 'bReplace' is FALSE will not change path name (SaveCopyAs)
  251. {
  252. CString newName = lpszPathName;
  253. if (newName.IsEmpty())
  254. {
  255. newName = m_strPathName;
  256. if (bReplace && newName.IsEmpty())
  257. {
  258. newName = m_strTitle;
  259. if (newName.IsEmpty())
  260. VERIFY(newName.LoadString(AFX_IDS_UNTITLED));
  261. // check for dubious filename
  262. int iBad = newName.FindOneOf(_T(" #%;/\"));
  263. if (iBad != -1)
  264. newName.ReleaseBuffer(iBad);
  265. // append the default suffix if there is one
  266. newName += AfxGetStrategyFileExt( );
  267. }
  268. if( !AfxDoPromptFileName(newName, bReplace ? IDS_SAVEFILE : IDS_SAVEFILECOPY,
  269. OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING, FALSE ) )
  270. return FALSE;       // don't even attempt to save
  271. }
  272. CWaitCursor wait;
  273. if (!OnSaveDocument(newName))
  274. {
  275. if (lpszPathName == NULL)
  276. {
  277. // be sure to delete the file
  278. try
  279. {
  280. CFile::Remove(newName);
  281. }
  282. catch(CException *e)
  283. {
  284. TRACE0("Warning: failed to delete file after failed SaveAs.n");
  285. if( !e->m_bAutoDelete )
  286. e->Delete();
  287. }
  288. }
  289. return FALSE;
  290. }
  291. // reset the title and change the document name
  292. if (bReplace)
  293. SetPathName(newName);
  294. return TRUE;        // success
  295. }
  296. BOOL CStaticDoc::SaveModified() 
  297. {
  298. // TODO: Add your specialized code here and/or call the base class
  299. return TRUE;
  300. // return CDocument::SaveModified();
  301. }