Esempio n. 1
0
void ConsoleMedia::Write(ELogMessageType type,
                          ELogMessageLevel nLevel,
                          LPCTSTR pszDate,
                          LPCTSTR pszTime,
                          LPCTSTR pszThreadId,
                          LPCTSTR pszThreadName,
                          LPCTSTR pszModule,
                          LPCTSTR pszMessage)
{
    if (m_hConsole==NULL)
        return;
    WORD color = FOREGROUND_GREEN|FOREGROUND_INTENSITY;
    //FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY;
    switch (type)
    {
    case eLM_Debug:
        color = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE;
        break;
    case eLM_Warning:
        color = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY;
        break;
    case eLM_Error:
        color = FOREGROUND_RED|FOREGROUND_INTENSITY;
        break;
    }

    CString output;
    FormatLogMessage(type, nLevel, pszDate, pszTime, pszThreadId, pszThreadName, pszModule, pszMessage, output);

    if (m_bRedirectedToFile)
    {
        output += _T("\n");
        CStringA outputA = output;
        outputA.AnsiToOem();

        CriticalSection::SyncLock lock(m_cs);
        DWORD dwWritten;
        WriteFile(m_hConsole, (LPCSTR)outputA, (DWORD)outputA.GetLength(), &dwWritten, NULL);
    }
    else
    {
#ifndef _UNICODE
        output.AnsiToOem();
#endif
        CriticalSection::SyncLock lock(m_cs);
        SetConsoleTextAttribute(m_hConsole, color);
        DWORD dwWritten;
        WriteConsole(m_hConsole, (LPCTSTR)output, (DWORD)output.GetLength(), &dwWritten, NULL);

        SetConsoleTextAttribute(m_hConsole, m_info.wAttributes);
        WriteConsole(m_hConsole, _T("\n"), 1, &dwWritten, NULL);
    }
}