mainDoc.cpp
Upload User: kelijie
Upload Date: 2007-01-01
Package Size: 123k
Code Size: 6k
Category:

Graph program

Development Platform:

Visual C++

  1. // mainDoc.cpp : implementation of the CMainDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "main.h"
  5. #include "mainDoc.h"
  6. #include "MdDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CMainDoc
  14. IMPLEMENT_DYNCREATE(CMainDoc, CDocument)
  15. BEGIN_MESSAGE_MAP(CMainDoc, CDocument)
  16. //{{AFX_MSG_MAP(CMainDoc)
  17. ON_COMMAND(IDM_WINDOWLIST, OnWindowlist)
  18. ON_UPDATE_COMMAND_UI(IDM_WINDOWLIST, OnUpdateWindowlist)
  19. //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CMainDoc construction/destruction
  23. CMainDoc::CMainDoc()
  24. {
  25. // TODO: add one-time construction code here
  26.     m_iWndNum = 0;
  27. }
  28. CMainDoc::~CMainDoc()
  29. {
  30. }
  31. BOOL CMainDoc::OnNewDocument()
  32. {
  33. if (!CDocument::OnNewDocument())
  34. return FALSE;
  35. // TODO: add reinitialization code here
  36. // (SDI documents will reuse this document)
  37.     CFile  file;
  38. char   f_name[20];
  39.     int    inum;
  40. static HINSTANCE hinstLib;
  41. static int  uTypeIDD;
  42. static CString nickname;
  43.     GetModuleInfo* GetInfo;
  44. CLibInfo* tempInfo;
  45.     if(!file.Open("plugin.sys", CFile::modeRead))
  46. {
  47.         AfxMessageBox("Can't find plug-in setting");
  48. return TRUE;
  49. }
  50.     file.Read(&inum, sizeof(int));
  51.     tempInfo = new CLibInfo[inum];
  52. for(int i = 0; i < inum; i++)
  53. {
  54. file.Read(&f_name, 20*sizeof(char));
  55.     hinstLib = LoadLibrary(f_name);
  56.         GetInfo = (GetModuleInfo*)GetProcAddress(hinstLib, 
  57.           _T("GetModuleData")); 
  58.         (*GetInfo)(&uTypeIDD, &nickname); 
  59. tempInfo[i].m_hinstLib = hinstLib;
  60.         tempInfo[i].m_uTypeIDD = uTypeIDD;
  61.         tempInfo[i].m_nickName = nickname;
  62.     m_ListLibInfo.Add(&tempInfo[i]);
  63. }
  64. file.Close();
  65. return TRUE;
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CMainDoc serialization
  69. void CMainDoc::Serialize(CArchive& ar)
  70. {
  71. if (ar.IsStoring())
  72. {
  73. // TODO: add storing code here
  74. }
  75. else
  76. {
  77. // TODO: add loading code here
  78. }
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CMainDoc diagnostics
  82. #ifdef _DEBUG
  83. void CMainDoc::AssertValid() const
  84. {
  85. CDocument::AssertValid();
  86. }
  87. void CMainDoc::Dump(CDumpContext& dc) const
  88. {
  89. CDocument::Dump(dc);
  90. }
  91. #endif //_DEBUG
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CMainDoc commands
  94. void CMainDoc::GetMsgFromView(int ID, int pin, CString msg)
  95. {
  96. CString str;
  97. char sid[10];
  98. char spin[10];
  99. itoa(ID,sid, 10);
  100. itoa(pin,spin, 10);
  101. str = "Type ID:";
  102. str += sid;
  103. str += ". Pin:";
  104. str += spin;
  105.     for(int i = 0; i < m_ListChildFrame.GetSize(); i++) 
  106. {
  107.     CStandardView* pView = (CStandardView*)m_ListChildFrame[i]->GetActiveView(); 
  108. if(pView->GetViewID() == ID &&
  109.    pView->GetPinNumber() == pin)
  110. {
  111.    CString name;
  112.    pView->GetName(&name);
  113.            CString text;
  114.    text = "The main frame get a message from ";
  115.    text += name;
  116.    text += " , which is ";
  117.    text += msg;
  118.    text += " !";
  119.    text += "The child module information is: ";
  120.    text += str;
  121.    str += " Your message is ";
  122.            str += msg;
  123.    pView->GetMsgFromDocument(str);
  124. }
  125. }
  126. return;
  127. }
  128. void CMainDoc::ReleaseChildWindow(int ID, int pin)
  129. {
  130.     for(int i = 0; i < m_ListChildFrame.GetSize(); i++) 
  131. {
  132. if(m_ListChildFrame[i]->GetTypeID() == ID &&
  133.    m_ListChildFrame[i]->GetIndex() == pin)
  134. {
  135.     m_ListChildFrame.RemoveAt(i);
  136. return;
  137. }
  138. }
  139. return;
  140. }
  141. void CMainDoc::OnWindowlist() 
  142. {
  143. // TODO: Add your command handler code here
  144.     WNDINFO  wInfo;
  145.     CString  name;
  146.     CModuleDlg dlg;
  147. char str[10];
  148.     for(int i = 0; i < m_ListChildFrame.GetSize(); i++)
  149. {
  150.     wInfo.m_iID = m_ListChildFrame[i]->GetTypeID();
  151.     wInfo.m_iPin = m_ListChildFrame[i]->GetIndex();
  152.         for(int j = 0; j < m_ListLibInfo.GetSize(); j++)
  153. {
  154.            if(m_ListLibInfo[j]->m_uTypeIDD == wInfo.m_iID)
  155.       name = m_ListLibInfo[j]->m_nickName;
  156. }
  157. name += " : ";
  158.         itoa(wInfo.m_iID, str, 10);
  159.         name += str;
  160.         name += "--";
  161.         itoa(wInfo.m_iPin, str, 10);
  162. name += str;
  163. dlg.SetListData(name, wInfo);
  164. }
  165. if(dlg.DoModal() == IDOK)
  166.     {
  167.        wInfo.m_iID = dlg.m_wInfo.m_iID;
  168.        wInfo.m_iPin = dlg.m_wInfo.m_iPin;
  169.    UpdateAllViews(NULL, UPDATE_ONE, (CObject*)&wInfo);
  170. }
  171. }
  172. void CMainDoc::OnUpdateWindowlist(CCmdUI* pCmdUI) 
  173. {
  174. // TODO: Add your command update UI handler code here
  175.     int num = m_ListChildFrame.GetSize();
  176. pCmdUI->Enable(num > 0);
  177. }
  178. void CMainDoc::PopModule(int nID) 
  179. {
  180. // TODO: Add your command handler code here
  181.     TemplateFunc* SetTemplate;
  182.     HINSTANCE hinstLib;
  183. int libnum = m_ListLibInfo.GetSize();
  184. if(libnum == 0 || nID >= libnum || nID < 0)
  185. return;
  186.     hinstLib = m_ListLibInfo[nID]->m_hinstLib;
  187.     SetTemplate = (TemplateFunc*)GetProcAddress(hinstLib, 
  188.           _T("InitTemplate")); 
  189.  
  190.     
  191.     static CDocTemplate* ChildTemplate;
  192. static CChildFrame* ChildFrame;
  193. CChildFrame* TempChildFrame;
  194.     CDocTemplate* TempChildTemplate;
  195. if(!(*SetTemplate)(&TempChildTemplate))
  196. {
  197. AfxMessageBox("Create Template Error!!!");
  198.         return;
  199. }
  200. TempChildFrame = (CChildFrame*) TempChildTemplate->CreateNewFrame(this, NULL);
  201. if(TempChildFrame == NULL)
  202. {
  203. AfxMessageBox("Create Frame Error!!!");
  204.         return;
  205. }
  206. m_iWndNum++;
  207. TempChildTemplate->InitialUpdateFrame(TempChildFrame, this, TRUE);
  208.     ChildTemplate = TempChildTemplate;
  209. ChildFrame = TempChildFrame;
  210. ChildFrame->SetTypeID(m_ListLibInfo[nID]->m_uTypeIDD);
  211.     ChildFrame->SetIndex(m_iWndNum);
  212. CStandardView* pView = (CStandardView*)ChildFrame->GetActiveView();
  213. pView->SetPinNumber(m_iWndNum);
  214. pView->OnInitialUpdate();
  215.     m_ListChildFrame.Add(ChildFrame);  
  216. }