?? tracepage.cpp
字號:
/****************************************************************/
/* */
/* TracePage.cpp */
/* */
/* Implementation of the CTracePage class. */
/* This class is a part of the FTP Server Application */
/* */
/* Programmed by Pablo van der Meer */
/* Copyright Pablo Software Solutions 2002 */
/* http://www.pablovandermeer.nl */
/* */
/* Last updated: 10 july 2002 */
/* */
/****************************************************************/
#include "stdafx.h"
#include "FTPServerApp.h"
#include "TracePage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CTracePage, CDialog)
CTracePage::CTracePage() : CDialog(CTracePage::IDD)
{
//{{AFX_DATA_INIT(CTracePage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CTracePage::~CTracePage()
{
while(!m_LogQueue.IsEmpty())
{
CLogMsg *pLogMsg = (CLogMsg *)m_LogQueue.RemoveHead();
delete pLogMsg;
}
}
void CTracePage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTracePage)
DDX_Control(pDX, IDC_TRACE, m_TraceList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTracePage, CDialog)
//{{AFX_MSG_MAP(CTracePage)
ON_WM_SIZE()
ON_COMMAND(ID_TRACE_CLEAR, OnTraceClear)
ON_WM_CONTEXTMENU()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_ADDTRACELINE, OnAddTraceLine)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTracePage message handlers
void CTracePage::AddTraceLine(int nLevel, LPCTSTR pstrFormat, ...)
{
CString str;
// format and write the data we were given
va_list args;
va_start(args, pstrFormat);
str.FormatV(pstrFormat, args);
try
{
// create new message
CLogMsg *pLogMsg = new CLogMsg;
GetLocalTime(&pLogMsg->m_sysTime);
pLogMsg->m_nLevel = nLevel;
pLogMsg->m_strText = str;
m_QueueLock.Lock();
m_LogQueue.AddTail(pLogMsg);
m_QueueLock.Unlock();
// schedule log action
PostMessage(WM_ADDTRACELINE);
}
catch(...)
{
}
}
LRESULT CTracePage::OnAddTraceLine(WPARAM, LPARAM)
{
CLogMsg *pLogMsg;
try
{
// get first message in the queue
// m_QueueLock.Lock();
pLogMsg = (CLogMsg *)m_LogQueue.RemoveHead();
// m_QueueLock.Unlock();
switch(pLogMsg->m_nLevel)
{
case 1:
m_TraceList.AddString(pLogMsg->m_strText, RGB(0,130,0));
break;
case 2:
m_TraceList.AddString(pLogMsg->m_strText, RGB(0,0,255));
break;
case 3:
m_TraceList.AddString(pLogMsg->m_strText, RGB(255,0,0));
break;
default:
m_TraceList.AddString(pLogMsg->m_strText, RGB(0,0,0));
break;
}
/* CString strDateTime;
strDateTime.Format("%02d/%02d/%02d %02d:%02d:%02d.%03d ",
pLogMsg->m_sysTime.wDay, pLogMsg->m_sysTime.wMonth, pLogMsg->m_sysTime.wYear,
pLogMsg->m_sysTime.wHour, pLogMsg->m_sysTime.wMinute, pLogMsg->m_sysTime.wSecond,
pLogMsg->m_sysTime.wMilliseconds);
switch(pLogMsg->m_nLevel)
{
case 1:
m_LogFile << error_lvl << strDateTime << pLogMsg->m_strText << endl;
break;
case 2:
m_LogFile << warning_lvl << strDateTime << pLogMsg->m_strText << endl;
break;
case 3:
default:
m_LogFile << trace_lvl << strDateTime << pLogMsg->m_strText << endl;
break;
} */
delete pLogMsg;
}
catch(...)
{
// something is wrong...
}
return TRUE;
}
void CTracePage::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (IsWindow(::GetDlgItem(m_hWnd, IDC_TRACE)))
{
CRect rect;
GetClientRect(rect);
// rect.DeflateRect(5,5,10,10);
m_TraceList.MoveWindow(rect);
}
}
void CTracePage::OnTraceClear()
{
m_TraceList.ResetContent();
}
void CTracePage::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(MAKEINTRESOURCE(IDR_TRACE_MENU));
menu.GetSubMenu(0)->TrackPopupMenu(0, point.x, point.y, this, NULL);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -