LOG.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #include "StdAfx.H"
  2. #include "TestCon.H"
  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif
  8. IMPLEMENT_DYNAMIC( CLog, CObject );
  9. CLog::CLog()
  10. {
  11. }
  12. CLog::~CLog()
  13. {
  14. }
  15. CLog& CLog::operator<<( COleVariant& var )
  16. {
  17.    COleVariant varString;
  18.    CString str;
  19.    try
  20.    {
  21.   varString.ChangeType( VT_BSTR, var );
  22.   str = varString.bstrVal;
  23.    }
  24.    catch( CException* pException )
  25.    {
  26.   str = _T( "??????" );
  27.  pException->Delete();
  28.    }
  29.    (*this)<<str;
  30.    return( *this );
  31. }
  32. CLog& CLog::operator<<( int n )
  33. {
  34.    CString str;
  35.    str.Format( _T( "%d" ), n );
  36.    (*this)<<str;
  37.    return( *this );
  38. }
  39. IMPLEMENT_DYNAMIC( CNullLog, CLog );
  40. CNullLog::CNullLog()
  41. {
  42. }
  43. CNullLog::~CNullLog()
  44. {
  45. }
  46. CLog& CNullLog::operator<<( LPCTSTR /* pszString */ )
  47. {
  48.    return( *this );
  49. }
  50. IMPLEMENT_DYNAMIC( CDebugLog, CLog );
  51. CDebugLog::CDebugLog() :
  52.    m_tStartOfLine( TRUE )
  53. {
  54. }
  55. CDebugLog::~CDebugLog()
  56. {
  57. }
  58. CLog& CDebugLog::operator<<( LPCTSTR pszString )
  59. {
  60.    CString strSpan;
  61.    CString strString( pszString );
  62.    while( strString.GetLength() > 0 )
  63.    {
  64.   if( m_tStartOfLine )
  65.   {
  66.  OutputDebugString( _T( "TstCon Log: " ) );
  67.  m_tStartOfLine = FALSE;
  68.   }
  69.   strSpan = strString.SpanExcluding( _T( "n" ) );
  70.   OutputDebugString( strSpan );
  71.   if( strString.GetLength() == strSpan.GetLength() )
  72.   {
  73.  strString.Empty();
  74.   }
  75.   else
  76.   {
  77.  ASSERT( strString[strSpan.GetLength()] == _T( 'n' ) );
  78.  OutputDebugString( _T( "n" ) );
  79.  m_tStartOfLine = TRUE;
  80.  strString = strString.Mid( strSpan.GetLength()+1 );
  81.   }
  82.    }
  83.    return( *this );
  84. }
  85. IMPLEMENT_DYNAMIC( CFileLog, CLog );
  86. CFileLog::CFileLog()
  87. {
  88. }
  89. CFileLog::~CFileLog()
  90. {
  91. }
  92. CLog& CFileLog::operator<<( LPCTSTR pszString )
  93. {
  94.    m_file.WriteString( pszString );
  95.    return( *this );
  96. }
  97. BOOL CFileLog::Create( LPCTSTR pszFileName )
  98. {
  99.    BOOL tSuccess;
  100.    tSuccess = m_file.Open( pszFileName, CFile::modeCreate|CFile::modeWrite|
  101.   CFile::shareExclusive|CFile::typeText );
  102.    if( !tSuccess )
  103.    {
  104.   return( FALSE );
  105.    }
  106.    return( TRUE );
  107. }
  108. CString CFileLog::GetFileName() const
  109. {
  110.    return( m_file.GetFileName() );
  111. }
  112. IMPLEMENT_DYNAMIC( COutputWindowLog, CLog );
  113. COutputWindowLog::COutputWindowLog( CEdit* pEditBox ) :
  114.    m_pEditBox( pEditBox )
  115. {
  116.    ASSERT( m_pEditBox != NULL );
  117. }
  118. COutputWindowLog::~COutputWindowLog()
  119. {
  120. }
  121. CLog& COutputWindowLog::operator<<( LPCTSTR pszString )
  122. {
  123.    int iLastChar;
  124.    CString strSpan;
  125.    CString strString( pszString );
  126.    while( strString.GetLength() > 0 )
  127.    {
  128.   strSpan = strString.SpanExcluding( _T( "n" ) );
  129.   iLastChar = m_pEditBox->GetWindowTextLength();
  130.   m_pEditBox->SetSel( iLastChar, iLastChar );
  131.   m_pEditBox->ReplaceSel( strSpan );
  132.   if( strString.GetLength() == strSpan.GetLength() )
  133.   {
  134.  strString.Empty();
  135.   }
  136.   else
  137.   {
  138.  ASSERT( strString[strSpan.GetLength()] == _T( 'n' ) );
  139.  iLastChar = m_pEditBox->GetWindowTextLength();
  140.  m_pEditBox->SetSel( iLastChar, iLastChar );
  141.  m_pEditBox->ReplaceSel( _T( "rn" ) );
  142.  strString = strString.Mid( strSpan.GetLength()+1 );
  143.   }
  144.    }
  145.    return( *this );
  146. }