MSDIDocManager.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // MSDIDocManager.h
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. /*********************************************************
  21. * Multithreaded SDI Application
  22. * Version: 1.4
  23. * Date: January 3, 2002
  24. * Autor: Michal Mecinski
  25. * E-mail: mimec@mimec.w.pl
  26. * WWW: http://www.mimec.w.pl
  27. *
  28. * You may freely use and modify this code, but don't remove
  29. * this copyright note.
  30. *
  31. * There is no warranty of any kind, express or implied, for this class.
  32. * The author does not take the responsibility for any damage
  33. * resulting from the use of it.
  34. *
  35. * Let me know if you find this code useful, and
  36. * send me any modifications and bug reports.
  37. *
  38. * Copyright (C) 2002-03 by Michal Mecinski
  39. *********************************************************/
  40. #pragma once
  41. // thread messages
  42. #define MSDIM_EXIT_THREAD   (WM_USER + 1)
  43. #define MSDIM_NEW_INSTANCE  (WM_USER + 2)
  44. #define MSDIM_UPDATE_NOTIFY (WM_USER + 3)
  45. // update nofitication codes
  46. #define MSDIN_NEW_THREAD    1
  47. #define MSDIN_EXIT_THREAD   2
  48. #define MSDIN_DOC_TITLE     3
  49. // maximum number of windows in menu
  50. #define MSDI_MAX_WINDOWS    9
  51. #define MSDI_ID_FIRST   AFX_IDM_FIRST_MDICHILD
  52. #define MSDI_ID_LAST    (AFX_IDM_FIRST_MDICHILD+MSDI_MAX_WINDOWS-1)
  53. //#define MSDI_ID_SELECT    (AFX_IDM_FIRST_MDICHILD+MSDI_MAX_WINDOWS)
  54. #include <afxtempl.h>
  55. #include <afxmt.h>
  56. class CMSDIThread;
  57. class CMSDIDocManager : public CDocManager
  58. {
  59. public:
  60. CMSDIDocManager();
  61. virtual ~CMSDIDocManager();
  62. // Overrides
  63. public:
  64. virtual void OnFileNew();
  65. virtual void OnFileOpen();
  66. virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName);
  67. virtual BOOL DoPromptFileName(CString& fileName, UINT nIDSTitle,
  68. DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate);
  69. virtual BOOL OnDDECommand(LPTSTR lpszCommand);
  70. #ifdef _DEBUG
  71. virtual void AssertValid() const;
  72. virtual void Dump(CDumpContext& dc) const;
  73. #endif
  74. // Implementation
  75. protected:
  76. CTypedPtrList<CPtrList, CMSDIThread*> m_ThreadList;
  77. CCriticalSection m_CriticalSection;
  78. int m_nDocCnt;
  79. protected:
  80. void OnExitThread(CMSDIThread* pThread);
  81. void KillAllThreads();
  82. friend class CMSDIApp;
  83. // Public functions
  84. public:
  85. // safely close the application
  86. void CloseAllFrames();
  87. // post message to all threads
  88. void PostMessageToAll(UINT message, WPARAM wParam=0, LPARAM lParam=0);
  89. // post update notify message
  90. void PostUpdateNotify(UINT nCode, LPARAM lParam=0)
  91. {
  92. PostMessageToAll(MSDIM_UPDATE_NOTIFY, nCode, lParam);
  93. }
  94. // access to the thread list and thread public data
  95. void Lock() { m_CriticalSection.Lock(); }
  96. void Unlock() { m_CriticalSection.Unlock(); }
  97. // use the following only between Lock() and Unlock()
  98. BOOL IsThreadListEmpty() { return m_ThreadList.IsEmpty(); }
  99. POSITION GetFirstThreadPosition() { return m_ThreadList.GetHeadPosition(); }
  100. CMSDIThread* GetNextThread(POSITION& pos) { return m_ThreadList.GetNext(pos); }
  101. };