XMLCustomizablePages.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:       XMLCustomizablePages.h
  6. *
  7. * Creation date:   [21 AUGUST 2002] 
  8. *
  9. * Author(s):       [Kolosenko Ruslan]
  10. *
  11. * Description:     Declares class CXMLCustomizablePage - template class
  12. *                  for various kinds of customizable property pages
  13. *
  14. **********************************************************************/
  15. #ifndef AFX_XML_CUSTOMIZABLE_PAGES_H_RKOL_8_21_2002_
  16. #define AFX_XML_CUSTOMIZABLE_PAGES_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 PageClass> class CXMLCustomizablePage : public PageClass
  25. {
  26. public:
  27.        // one version of constructor accepts resource ID as a reserve
  28.        // for form creation if the XML file is not valid
  29.     CXMLCustomizablePage(LPCTSTR szXMLFile, UINT nIDTemplate = 0, UINT nIDCaption = 0)
  30.         : PageClass(nIDTemplate, nIDCaption)
  31.     {
  32.         m_szXMLFile = szXMLFile;   // store the name of the XML file
  33.            // try to read dialog template from the specified XML file
  34.         if ( !m_szXMLFile.IsEmpty() && m_Template.SerializeFrom(m_szXMLFile) )
  35.         {
  36.                // if XML is read successfully - initialize the property page
  37.                // with the obtained dialog template
  38.             m_psp.dwFlags |= PSP_DLGINDIRECT;
  39.             m_psp.pResource = (LPDLGTEMPLATE)m_Template;
  40.             m_lpDialogInit = m_Template.GetInitData();
  41.         }
  42.     }
  43.        // another version of constructor accepts resource name as a reserve
  44.        // for dialog creation if the XML file is not valid
  45.     CXMLCustomizablePage(LPCTSTR szXMLFile, LPCTSTR szTemplateName, UINT nIDCaption = 0)
  46.         : PageClass(szTemplateName, nIDCaption)
  47.     {
  48.         m_szXMLFile = szXMLFile;
  49.            // try to read dialog template from the specified XML file
  50.         if ( !m_szXMLFile.IsEmpty() && m_Template.SerializeFrom(m_szXMLFile) )
  51.         {
  52.                // if XML is valid - initialize the property page from XML
  53.             m_psp.dwFlags |= PSP_DLGINDIRECT;
  54.             m_psp.pResource = (LPDLGTEMPLATE)m_Template;
  55.             m_lpDialogInit = m_Template.GetInitData();
  56.         }
  57.     }
  58. protected:
  59.        // Windows messages handler for the dialog
  60.     virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  61.     {
  62.         if ( message == WM_CONTEXTMENU )
  63.         {
  64.                // show context menu with "Customize" option
  65.             CMenu menu;
  66.             menu.LoadMenu(IDR_XMLGUI_CUSTOMIZING);
  67.             CMenu* pPopup = menu.GetSubMenu(0);
  68.             pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,MAKEPOINTS(lParam).x,
  69.                 MAKEPOINTS(lParam).y,this);
  70.         }
  71.         if ( message == WM_COMMAND && wParam == ID_XMLGUI_CUSTOMIZE )
  72.         {
  73.                // handle "Customize" command from the popup menu
  74.                // global function CXMLCustomizable_CustomizeXML does this
  75.             CXMLCustomizable_CustomizeXML(m_szXMLFile);
  76.         }
  77.            // pass the message to the base class dialog box procedure
  78.         return PageClass::OnWndMsg(message,wParam,lParam,pResult);
  79.     }
  80.     CDlgTemplate m_Template;   // dialog template object holding the Win32 DLGTEMPLATE
  81.     CString      m_szXMLFile;  // full name of the file with XML-style dialog template
  82. };
  83.    // instantiation of CXMLCustomizablePage for MFC class CPropertyPage
  84. typedef CXMLCustomizablePage<CPropertyPage> CXMLGUIPropertyPage;
  85. #endif // AFX_XML_CUSTOMIZABLE_PAGES_H_RKOL_8_21_2002_