home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / ole / tstcon / macrodg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-27  |  3.4 KB  |  162 lines

  1. // MacroDlg.Cpp : implementation file
  2. //
  3.  
  4. #include "StdAfx.H"
  5. #include "TestCon.H"
  6. #include "Resource.HM"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMacroDlg dialog
  16.  
  17. CMacroDlg::CMacroDlg( CWnd* pParent ) :
  18.    CDialog( CMacroDlg::IDD, pParent ),
  19.    m_pScriptManager( NULL ),
  20.    m_pScript( NULL )
  21. {
  22.     //{{AFX_DATA_INIT(CMacroDlg)
  23.     m_strMacroName = _T("");
  24.     //}}AFX_DATA_INIT
  25. }
  26.  
  27.  
  28. void CMacroDlg::DoDataExchange(CDataExchange* pDX)
  29. {
  30.    int iItem;
  31.  
  32.     CDialog::DoDataExchange(pDX);
  33.     //{{AFX_DATA_MAP(CMacroDlg)
  34.     DDX_Control(pDX, IDOK, m_butRun);
  35.     DDX_Control(pDX, IDC_MACROS, m_lbMacros);
  36.     DDX_LBString(pDX, IDC_MACROS, m_strMacroName);
  37.     //}}AFX_DATA_MAP
  38.  
  39.    if( pDX->m_bSaveAndValidate )
  40.    {
  41.       iItem = m_lbMacros.GetCurSel();
  42.       if( iItem == LB_ERR )
  43.       {
  44.          m_pScript = NULL;
  45.       }
  46.       else
  47.       {
  48.          m_pScript = (CScript*)m_lbMacros.GetItemDataPtr( iItem );
  49.          ASSERT( m_pScript != NULL );
  50.       }
  51.    }
  52. }
  53.  
  54.  
  55. BEGIN_MESSAGE_MAP(CMacroDlg, CDialog)
  56.     //{{AFX_MSG_MAP(CMacroDlg)
  57.     ON_BN_CLICKED(IDC_OPENFILE, OnOpenFile)
  58.     ON_WM_HELPINFO()
  59.     ON_WM_CONTEXTMENU()
  60.     //}}AFX_MSG_MAP
  61. END_MESSAGE_MAP()
  62.  
  63. /////////////////////////////////////////////////////////////////////////////
  64. // CMacroDlg message handlers
  65.  
  66. BOOL CMacroDlg::OnInitDialog()
  67. {
  68.     CDialog::OnInitDialog();
  69.  
  70.    UpdateMacroList();
  71.  
  72.     return( TRUE );
  73. }
  74.  
  75. void CMacroDlg::OnOpenFile()
  76. {
  77.    int nResult;
  78.    HRESULT hResult;
  79.  
  80.    CFileDialog dlg( TRUE, _T( "dsm" ), NULL, OFN_HIDEREADONLY|
  81.       OFN_OVERWRITEPROMPT, _T( "Script Files (*.dsm)|*.dsm||" ) );
  82.  
  83.    nResult = dlg.DoModal();
  84.    if( nResult != IDOK )
  85.    {
  86.       return;
  87.    }
  88.  
  89.    hResult = m_pScriptManager->LoadScript( dlg.GetPathName(),
  90.       dlg.GetFileTitle() );
  91.    if( FAILED( hResult ) )
  92.    {
  93.       CString strErrorMessage;
  94.       _com_error error( hResult );
  95.  
  96.       AfxFormatString2( strErrorMessage, IDS_ERRORLOADINGSCRIPT,
  97.          dlg.GetFileTitle(), error.ErrorMessage() );
  98.       AfxMessageBox( strErrorMessage );
  99.       return;
  100.    }
  101.  
  102.    UpdateMacroList();
  103. }
  104.  
  105. void CMacroDlg::UpdateMacroList()
  106. {
  107.    POSITION posMacro;
  108.    POSITION posScript;
  109.    CScript* pScript;
  110.    CString strMacroName;
  111.    int iItem;
  112.  
  113.    m_lbMacros.ResetContent();
  114.  
  115.    posScript = m_pScriptManager->GetFirstScriptPosition();
  116.    while( posScript != NULL )
  117.    {
  118.       pScript = m_pScriptManager->GetNextScript( posScript );
  119.       ASSERT( pScript != NULL );
  120.  
  121.       posMacro = pScript->GetFirstMacroPosition();
  122.       while( posMacro != NULL )
  123.       {
  124.          strMacroName = pScript->GetNextMacroName( posMacro );
  125.          iItem = m_lbMacros.AddString( strMacroName );
  126.          m_lbMacros.SetItemDataPtr( iItem, pScript );
  127.       }
  128.    }
  129.  
  130.    if( m_lbMacros.GetCount() == 0 )
  131.    {
  132.       m_lbMacros.SetCurSel( -1 );
  133.       m_butRun.EnableWindow( FALSE );
  134.    }
  135.    else
  136.    {
  137.       m_lbMacros.SetCurSel( 0 );
  138.       m_butRun.EnableWindow( TRUE );
  139.    }
  140. }
  141.  
  142.  
  143. static DWORD rgmapCHID[] =
  144. {
  145.    IDC_MACROS, HIDC_MACROS,
  146.    IDC_OPENFILE, HIDC_OPENFILE,
  147.    0, 0
  148. };
  149.  
  150. BOOL CMacroDlg::OnHelpInfo( HELPINFO* pHelpInfo )
  151. {
  152.    return( ::WinHelp( HWND( pHelpInfo->hItemHandle ),
  153.       AfxGetApp()->m_pszHelpFilePath, HELP_WM_HELP, DWORD( LPVOID(
  154.       rgmapCHID ) ) ) );
  155. }
  156.  
  157. void CMacroDlg::OnContextMenu( CWnd* pWnd, CPoint /* point */ )
  158. {
  159.    ::WinHelp( HWND( *pWnd ), AfxGetApp()->m_pszHelpFilePath, HELP_CONTEXTMENU,
  160.       DWORD( LPVOID( rgmapCHID ) ) );
  161. }
  162.