|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
|
|
|
|
#include "OutputWnd.h"
|
|
|
|
|
#include "Resource.h"
|
|
|
|
|
#include "MainFrm.h"
|
|
|
|
|
#include "LogMgr.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#undef THIS_FILE
|
|
|
|
|
static char THIS_FILE[] = __FILE__;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// COutputBar
|
|
|
|
|
|
|
|
|
|
COutputWnd::COutputWnd()
|
|
|
|
|
{
|
|
|
|
|
m_CurLineCnt = 0;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
COutputWnd::~COutputWnd()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COutputWnd, CDockablePane)
|
|
|
|
|
ON_WM_CREATE()
|
|
|
|
|
ON_WM_SIZE()
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
|
|
|
{
|
|
|
|
|
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
CRect rectDummy;
|
|
|
|
|
rectDummy.SetRectEmpty();
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EEBFA8><EFBFBD><EFBFBD>:
|
|
|
|
|
if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 1))
|
|
|
|
|
{
|
|
|
|
|
TRACE0("δ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
return -1; // δ<>ܴ<EFBFBD><DCB4><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|
|
|
|
const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;
|
|
|
|
|
|
|
|
|
|
if (!m_List.Create(dwStyle, rectDummy, &m_wndTabs, 2))
|
|
|
|
|
{
|
|
|
|
|
TRACE0("δ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
return -1; // δ<>ܴ<EFBFBD><DCB4><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateFonts();
|
|
|
|
|
|
|
|
|
|
CString strTabName;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8>ӵ<EFBFBD>ѡ<EFBFBD>:
|
|
|
|
|
strTabName = _T("List");
|
|
|
|
|
m_wndTabs.AddTab(&m_List, strTabName, (UINT)0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void COutputWnd::OnSize(UINT nType, int cx, int cy)
|
|
|
|
|
{
|
|
|
|
|
CDockablePane::OnSize(nType, cx, cy);
|
|
|
|
|
// ѡ<><EFBFBD>ؼ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|
|
|
|
m_wndTabs.SetWindowPos (NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void COutputWnd::AdjustHorzScroll(CListBox& wndListBox)
|
|
|
|
|
{
|
|
|
|
|
CClientDC dc(this);
|
|
|
|
|
CFont* pOldFont = dc.SelectObject(&afxGlobalData.fontRegular);
|
|
|
|
|
|
|
|
|
|
int cxExtentMax = 0;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < wndListBox.GetCount(); i ++)
|
|
|
|
|
{
|
|
|
|
|
CString strItem;
|
|
|
|
|
wndListBox.GetText(i, strItem);
|
|
|
|
|
|
|
|
|
|
cxExtentMax = max(cxExtentMax, dc.GetTextExtent(strItem).cx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wndListBox.SetHorizontalExtent(cxExtentMax);
|
|
|
|
|
dc.SelectObject(pOldFont);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void COutputWnd::UpdateFonts()
|
|
|
|
|
{
|
|
|
|
|
m_List.SetFont(&afxGlobalData.fontRegular);
|
|
|
|
|
}
|
|
|
|
|
void COutputWnd::AddToList(CString str,int MaxLine)
|
|
|
|
|
{
|
|
|
|
|
if(m_CurLineCnt>MaxLine)
|
|
|
|
|
{
|
|
|
|
|
m_List.ResetContent();
|
|
|
|
|
m_CurLineCnt = 0;
|
|
|
|
|
}
|
|
|
|
|
m_List.AddString(str);
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
m_List.SetTopIndex(m_List.GetCount()-1);
|
|
|
|
|
m_CurLineCnt++;
|
|
|
|
|
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
m_List.SetCurSel(m_CurLineCnt-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// COutputList1
|
|
|
|
|
|
|
|
|
|
COutputList::COutputList()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
COutputList::~COutputList()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COutputList, CListBox)
|
|
|
|
|
ON_WM_CONTEXTMENU()
|
|
|
|
|
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
|
|
|
|
|
ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
|
|
|
|
|
ON_COMMAND(ID_OUTPUT_CMD, OnViewOutput)
|
|
|
|
|
ON_COMMAND(ID_OUTPUT_LOG, OnViewOutput)
|
|
|
|
|
ON_WM_WINDOWPOSCHANGING()
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// COutputList <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
void COutputList::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
|
|
|
|
|
{
|
|
|
|
|
CMenu menu;
|
|
|
|
|
menu.LoadMenu(IDR_OUTPUT_POPUP);
|
|
|
|
|
|
|
|
|
|
CMenu* pSumMenu = menu.GetSubMenu(0);
|
|
|
|
|
|
|
|
|
|
if (AfxGetMainWnd()->IsKindOf(RUNTIME_CLASS(CMDIFrameWndEx)))
|
|
|
|
|
{
|
|
|
|
|
CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;
|
|
|
|
|
|
|
|
|
|
if (!pPopupMenu->Create(this, point.x, point.y, (HMENU)pSumMenu->m_hMenu, FALSE, TRUE))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
((CMDIFrameWndEx*)AfxGetMainWnd())->OnShowPopupMenu(pPopupMenu);
|
|
|
|
|
UpdateDialogControls(this, FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void COutputList::OnEditCopy()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־Ŀ¼
|
|
|
|
|
gLogMgr->OpenLogFileDir();
|
|
|
|
|
}
|
|
|
|
|
void COutputList::OnEditClear()
|
|
|
|
|
{
|
|
|
|
|
ResetContent();
|
|
|
|
|
}
|
|
|
|
|
void COutputList::OnViewOutput()
|
|
|
|
|
{
|
|
|
|
|
CDockablePane* pParentBar = DYNAMIC_DOWNCAST(CDockablePane, GetOwner());
|
|
|
|
|
CMDIFrameWndEx* pMainFrame = DYNAMIC_DOWNCAST(CMDIFrameWndEx, GetTopLevelFrame());
|
|
|
|
|
|
|
|
|
|
if (pMainFrame != NULL && pParentBar != NULL)
|
|
|
|
|
{
|
|
|
|
|
pMainFrame->SetFocus();
|
|
|
|
|
pMainFrame->ShowPane(pParentBar, FALSE, FALSE, FALSE);
|
|
|
|
|
pMainFrame->RecalcLayout();
|
|
|
|
|
}
|
|
|
|
|
}
|