XMLCustomizableDialogs.h
上传用户:kj0090
上传日期:2007-03-02
资源大小:39k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /***********************************************************************
  2. *
  3. * This module is part of the XMLGUI system 
  4. *
  5. * File name:       XMLCustomizableDialogs.h
  6. *
  7. * Creation date:   [21 AUGUST 2002] 
  8. *
  9. * Author(s):       [Kolosenko Ruslan]
  10. *
  11. * Description:     Declares class CXMLCustomizableDialog - template class
  12. *                  for various kinds of customizable dialogs
  13. *
  14. **********************************************************************/
  15. #ifndef AFX_XML_CUSTOMIZABLE_DIALOGS_H_RKOL_8_21_2002_
  16. #define AFX_XML_CUSTOMIZABLE_DIALOGS_H_RKOL_8_21_2002_
  17. #if _MSC_VER > 1000
  18. #pragma once
  19. #endif // _MSC_VER > 1000
  20. #include "DlgTemplate.h"
  21. #include "xmlgui_resource.h"
  22.    // exported global function declaration, implemented in XMLCustomizable.cpp
  23. void XMLGUI_EXT_CLASS CXMLCustomizable_CustomizeXML(LPCTSTR szXMLFile);
  24. template <class DialogClass> class CXMLCustomizableDialog : public DialogClass
  25. {
  26. public:
  27.        // one version of constructor accepts resource ID as a reserve
  28.        // for dialog creation if the XML file is not valid
  29.     CXMLCustomizableDialog(LPCTSTR szXMLFile, UINT nResourceID = 0, CWnd* pParent = NULL)
  30.     {
  31.            // store full name of XML file
  32.         m_szXMLFile = szXMLFile;
  33.            // first, try to read dialog template from the XML file
  34.         if ( !m_szXMLFile.IsEmpty() && m_Template.SerializeFrom(m_szXMLFile) )
  35.         {
  36.                // if the XML file with dialog template is valid
  37.                // we initialize our dialog with template read from XML
  38.             InitModalIndirect((LPDLGTEMPLATE)m_Template,pParent,
  39.                 m_Template.GetInitData());
  40.         }
  41.         else
  42.         {
  43.                // otherwise we switch to resource dialog's definition
  44.             m_lpszTemplateName = MAKEINTRESOURCE(nResourceID);
  45.             m_nIDHelp = nResourceID;
  46.             m_pParentWnd = pParent;
  47.         }
  48.     }
  49.        // another version of constructor accepts resource name as a reserve
  50.        // for dialog creation if the XML file is not valid
  51.     CXMLCustomizableDialog(LPCTSTR szXMLFile, LPCTSTR szTemplateName, CWnd* pParent = NULL)
  52.     {
  53.         m_szXMLFile = szXMLFile;
  54.            // try to parse XML file with dialog template
  55.         if ( !m_szXMLFile.IsEmpty() && m_Template.SerializeFrom(m_szXMLFile) )
  56.         {
  57.                // if XML parsing successful - initialize dialog from XML
  58.             InitModalIndirect((LPDLGTEMPLATE)m_Template,pParent,
  59.                 m_Template.GetInitData());
  60.         }
  61.         else
  62.         {
  63.                // otherwize initialize dialog from the resource file
  64.             m_lpszTemplateName = szTemplateName;
  65.             if (HIWORD(m_lpszTemplateName) == 0)
  66.             {
  67.                 m_nIDHelp = LOWORD((DWORD)m_lpszTemplateName);
  68.             }
  69.             m_pParentWnd = pParent;
  70.         }
  71.     }
  72. virtual ~CXMLCustomizableDialog() {};
  73. protected:
  74.        // Windows messages handler for the dialog
  75.     virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  76.     {
  77.         if ( message == WM_CONTEXTMENU )
  78.         {
  79.                // show context menu with "Customize" option
  80.             CMenu menu;
  81.             menu.LoadMenu(IDR_XMLGUI_CUSTOMIZING);
  82.             CMenu* pPopup = menu.GetSubMenu(0);
  83.             pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,MAKEPOINTS(lParam).x,
  84.                 MAKEPOINTS(lParam).y,this);
  85.         }
  86.         if ( message == WM_COMMAND && wParam == ID_XMLGUI_CUSTOMIZE )
  87.         {
  88.                // handle "Customize" command from the popup menu
  89.                // global function CXMLCustomizable_CustomizeXML does this
  90.             CXMLCustomizable_CustomizeXML(m_szXMLFile);
  91.         }
  92.            // pass the message to the base class dialog box procedure
  93.         return DialogClass::OnWndMsg(message,wParam,lParam,pResult);
  94.     }
  95.     
  96.     CDlgTemplate m_Template;   // dialog template object holding the Win32 DLGTEMPLATE
  97.     CString      m_szXMLFile;  // full name of the file with XML-style dialog template
  98. };
  99.    // instantiation of CXMLCustomizableDialog for MFC class CDialog
  100. typedef CXMLCustomizableDialog<CDialog> CXMLGUIDialog;
  101. #endif // AFX_XML_CUSTOMIZABLE_DIALOGS_H_RKOL_8_21_2002_