📄 workspacebar.cpp
字号:
// mybar.cpp : implementation file
//
#include "stdafx.h"
#include "WorkSpaceBar.h"
#include "Resource.h"
#include "IDEView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWorkSpaceBar
CWorkSpaceBar::CWorkSpaceBar()
{
m_pIDEView=0;
}
CWorkSpaceBar::~CWorkSpaceBar()
{
}
BEGIN_MESSAGE_MAP(CWorkSpaceBar, baseCWorkSpaceBar)
//{{AFX_MSG_MAP(CWorkSpaceBar)
ON_WM_CREATE()
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_TREE, OnDblclkTree)
ON_COMMAND(IDM_HIDE_WORKSPACEBAR, OnHideWorkspacebar)
ON_NOTIFY(NM_RCLICK, IDC_TREE, OnRclickTree)
ON_COMMAND(IDM_EXPAND, OnExpand)
ON_COMMAND(IDM_EXPANDALL, OnExpandall)
ON_COMMAND(IDM_PINCH, OnPinch)
ON_COMMAND(IDM_PINCHALL, OnPinchall)
ON_COMMAND(IDM_DEL, OnDel)
ON_COMMAND(IDM_DELALL, OnDelall)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWorkSpaceBar message handlers
int CWorkSpaceBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (baseCWorkSpaceBar::OnCreate(lpCreateStruct) == -1)
return -1;
m_TreeCtrl.Create(WS_CHILD | WS_VISIBLE | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | LBS_NOTIFY
| WS_BORDER | WS_TABSTOP | WS_VSCROLL | WS_EX_CLIENTEDGE,
CRect(0,0,0,0),this,IDC_TREE);
m_TreeCtrl.ModifyStyle(NULL, WS_VISIBLE|WS_CHILD|TVS_HASLINES|
TVS_LINESATROOT|TVS_HASBUTTONS);
return 0;
}
void CWorkSpaceBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
baseCWorkSpaceBar::OnUpdateCmdUI(pTarget, bDisableIfNoHndler);
UpdateDialogControls(pTarget, bDisableIfNoHndler);
}
void CWorkSpaceBar::OnSize(UINT nType, int cx, int cy)
{
baseCWorkSpaceBar::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rc;
GetClientRect(rc);
m_TreeCtrl.MoveWindow(rc);
}
void CWorkSpaceBar::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
HTREEITEM hTreeItem=m_TreeCtrl.GetSelectedItem();
int nRetView=FindView(hTreeItem);
int nRetTreeItem;
int nStartChar,nEndChar;
POSITION p;
if(nRetView==-1)
return;
nRetTreeItem=FindTreeItem(m_vectorTree_View[nRetView].vectorTnl,hTreeItem);
nStartChar=m_vectorTree_View[nRetView].vectorTnl[nRetTreeItem].lpv.nStrPos;
nEndChar=nStartChar+m_vectorTree_View[nRetView].vectorTnl[nRetTreeItem].lpv.nStrLen;
//--------------激活根节点对应的视图--------------
m_pIDEDoc=(CIDEDoc*)(::AfxGetApp()->OpenDocumentFile(m_vectorTree_View[nRetView].szFile));
if(!m_pIDEDoc)//该文件已被删除
{
//根据不存在的文件删掉这个文件对应的工作空间的树
DelTreeByFile(m_vectorTree_View[nRetView].szFile);
return;
}
p=m_pIDEDoc->GetFirstViewPosition();
m_pIDEView=(CIDEView*)m_pIDEDoc->GetNextView(p);
//------------------------------------------------
m_pIDEView->GetEditCtrl().SetSel(nStartChar,nEndChar,1);//选中视图中的文本
m_pIDEView->SendMessage(MSG_PAINTLEFT,0,0);//发送消息到视图更新左边
*pResult = 0;
}
void CWorkSpaceBar::AddTRF(TREE_FILE trf)
{
int nRet=FindView(trf.szFile);
TREE_FILE trfTemp;
if(nRet==-1)
{
trfTemp.vectorTnl=trf.vectorTnl;
trfTemp.szFile=new char[strlen(trf.szFile)];
strcpy(trfTemp.szFile,trf.szFile);
m_vectorTree_View.push_back(trfTemp);
}
else
m_vectorTree_View[nRet].vectorTnl=trf.vectorTnl;
}
int CWorkSpaceBar::FindView(char *szFile)
{
int nSize=m_vectorTree_View.size();
for(int i=0;i<nSize;i++)
{
if(!strcmp(szFile,m_vectorTree_View[i].szFile))
return i;
}
return -1;
}
void CWorkSpaceBar::OnHideWorkspacebar()
{
// TODO: Add your command handler code here
CMainFrame* pMainFrame=((CMainFrame*)::AfxGetMainWnd());
pMainFrame->ShowControlBar(pMainFrame->GetWorkSapceBar(),0,1);
}
void CWorkSpaceBar::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
BCMenu *menuPopup;
BCMenu menu;
POINT point;
GetCursorPos(&point);
menu.LoadMenu(IDR_MENU_WORKSPACEBAR);
menuPopup=(BCMenu*)menu.GetSubMenu(0);
menuPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
menuPopup->DestroyMenu();
*pResult = 0;
}
void CWorkSpaceBar::OnExpand()
{
// TODO: Add your command handler code here
m_TreeCtrl.Expand(m_TreeCtrl.GetSelectedItem(),TVE_EXPAND);
}
void CWorkSpaceBar::OnExpandall()
{
// TODO: Add your command handler code here
HTREEITEM hFindRoot=m_TreeCtrl.GetRootItem();
while(hFindRoot)
{
ExpandNode(&m_TreeCtrl,hFindRoot,TVE_EXPAND);
hFindRoot=m_TreeCtrl.GetNextItem(hFindRoot,TVGN_NEXT);
}
}
void CWorkSpaceBar::OnPinch()
{
// TODO: Add your command handler code here
m_TreeCtrl.Expand(m_TreeCtrl.GetSelectedItem(),TVE_COLLAPSE);
}
void CWorkSpaceBar::OnPinchall()
{
// TODO: Add your command handler code here
HTREEITEM hFindRoot=m_TreeCtrl.GetRootItem();
while(hFindRoot)
{
ExpandNode(&m_TreeCtrl,hFindRoot,TVE_COLLAPSE);
hFindRoot=m_TreeCtrl.GetNextItem(hFindRoot,TVGN_NEXT);
}
}
void CWorkSpaceBar::OnDel()
{
// TODO: Add your command handler code here
m_TreeCtrl.DeleteItem(m_TreeCtrl.GetSelectedItem());
}
void CWorkSpaceBar::OnDelall()
{
// TODO: Add your command handler code here
m_TreeCtrl.DeleteAllItems();
}
int CWorkSpaceBar::FindView(HTREEITEM hTreeItem)
{
int nBigSize=m_vectorTree_View.size();
int nSmallSize;
int i,j;
for(i=0;i<nBigSize;i++)
{
nSmallSize=m_vectorTree_View[i].vectorTnl.size();
for(j=0;j<nSmallSize;j++)
{
if(hTreeItem==m_vectorTree_View[i].vectorTnl[j].hTreeItem)
return i;
}
}
return -1;
}
int CWorkSpaceBar::FindTreeItem(vector<TREENODE_LPV> vectorTnl,HTREEITEM hTreeItem)
{
int nSize=vectorTnl.size();
for(int i=0;i<nSize;i++)
{
if(hTreeItem==vectorTnl[i].hTreeItem)
return i;
}
return -1;
}
void CWorkSpaceBar::ExpandNode(CTreeCtrl* pTree, HTREEITEM hTreeItem,UINT nCode)
{
pTree->Expand(hTreeItem,nCode);
hTreeItem=pTree->GetChildItem(hTreeItem);
while(hTreeItem)
{
ExpandNode(pTree,hTreeItem,nCode);
hTreeItem=pTree->GetNextItem(hTreeItem,TVGN_NEXT);
}
}
void CWorkSpaceBar::DelTreeByFile(char *szFile)
{
HTREEITEM hFindRoot=m_TreeCtrl.GetRootItem();
while(hFindRoot)
{
if(!strcmp((LPSTR)(LPCSTR)m_TreeCtrl.GetItemText(hFindRoot),szFile))
m_TreeCtrl.DeleteItem(hFindRoot);
hFindRoot=m_TreeCtrl.GetNextItem(hFindRoot,TVGN_NEXT);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -