classbrowsertree.cpp

来自「用bcg库编写的java IDE 源码」· C++ 代码 · 共 120 行

CPP
120
字号
// ClassBrowserTree.cpp : implementation file
//

#include "stdafx.h"
#include "VisualJava.h"
#include "ClassBrowserTree.h"
#include "JavaDeclManager.h"
#include "VisualJavaView.h"
#include "VisualJavaDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



// Sort the item in reverse alphabetical order.
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
   // lParamSort contains a pointer to the tree control.
   // The lParam of an item is just its handle, 
// as specified with SetItemData
   CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
   CString    strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
   CString    strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2);

   return strcmp(strItem2, strItem1);
}

/////////////////////////////////////////////////////////////////////////////
// CClassBrowserTree
IMPLEMENT_DYNAMIC(CClassBrowserTree,CJavaTreeCtrl)

CClassBrowserTree::CClassBrowserTree()
{
}

CClassBrowserTree::~CClassBrowserTree()
{
}


BEGIN_MESSAGE_MAP(CClassBrowserTree, CJavaTreeCtrl)
	//{{AFX_MSG_MAP(CClassBrowserTree)

	//}}AFX_MSG_MAP
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClassBrowserTree message handlers

void CClassBrowserTree::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	CTreeCtrl::DefWindowProc(WM_PAINT,(WPARAM)dc.m_hDC,0);
	// Do not call CTreeCtrl::OnPaint() for painting messages
}

BOOL CClassBrowserTree::OnEraseBkgnd(CDC* pDC) 
{
	return TRUE;
}

int CClassBrowserTree::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CJavaTreeCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;

   TVSORTCB tvs;
   // Sort the tree control's items using my
   // callback procedure.
   tvs.hParent = TVI_ROOT;
   tvs.lpfnCompare = MyCompareProc;
   tvs.lParam = (LPARAM)this;
   SortChildrenCB(&tvs);	
   return 0;
}

void CClassBrowserTree::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
   HTREEITEM hItem = GetSelectedItem();
   if(hItem != NULL)
   {
     __CBaseDecl* pDecl = (__CBaseDecl*)GetItemData(hItem);
	 if(pDecl)
	 {
        CVisualJavaApp *pApp = (CVisualJavaApp*)AfxGetApp();
		CString strPath = pDecl->m_pDeclMgr->GetPathName();
		CVisualJavaDoc* pDoc = pApp->GetDocument(strPath);
		if(pDoc == NULL)
		    pDoc = (CVisualJavaDoc*)pApp->OpenDocumentFileEx(strPath,0);

         //scroll to clicked item
		 if(pDoc)
		 {
            CVisualJavaView* pView = (CVisualJavaView*)pDoc->getBuffer()->getHeadView();
            int lines = pView->GetScreenLinesExt();

			//scroll such that the line the item is on, is in the middle of the view
			int scrollto = pDecl->GetBound()->m_nStartLine - (lines/2);
            pView->ScrollToLineExt(scrollto);

		    CPoint ptStart(0,pDecl->GetBound()->m_nStartLine);
            CPoint ptEnd(pDoc->getBuffer()->GetLineLength(pDecl->GetBound()->m_nStartLine),
			pDecl->GetBound()->m_nStartLine);

            pView->SetFocus();
		    pView->SetCursorPos(ptEnd);
		    pView->SetSelectionExt(ptStart,ptEnd);
		 }
	 }
   }*pResult = 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?