📄 filebar.cpp
字号:
// FileBar.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "miniSQL.h"
#include "FileBar.h"
#include "Resource.h"
#include "table.h"
//#include "MSLDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CMiniSQLApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CFileBar
CFileBar::CFileBar()
{
}
CFileBar::~CFileBar()
{
}
#define IDC_TREE_CTRL 1000
BEGIN_MESSAGE_MAP(CFileBar, CControlBar)
//{{AFX_MSG_MAP(CFileBar)
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_WM_CREATE()
ON_WM_WINDOWPOSCHANGED()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileBar message handlers
int CFileBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CControlBar::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
if( !m_TreeCtrl.Create(WS_CHILD | WS_VISIBLE | WS_THICKFRAME | TVS_HASBUTTONS |
TVS_HASLINES | TVS_LINESATROOT, CRect(0,0,0,0), this ,IDC_TREE_CTRL) )
{
TRACE0("Failed to create view for CFileBar\n");
return -1;
}
////////////////////////////////////////////////////////////////
m_TreeCtrl.SetMenuID(IDR_POPUP1, IDR_POPUP2);
m_TreeCtrl.ModifyStyleEx(0, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
m_ImageList.Create (IDB_IMAGE_FILE, 16, 1, RGB(0,255,0));
m_TreeCtrl.SetImageList (&m_ImageList, TVSIL_NORMAL);
//Construct the trees____
hitem0 = m_TreeCtrl.InsertItem( "MiniSQL关系库", 3, 3 );
m_TreeCtrl.SetItemState( hitem0, TVIS_BOLD, TVIS_BOLD );
PreInsertTree();
m_TreeCtrl.Expand (hitem0, TVE_EXPAND);
return 0;
}
void CFileBar::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
CCJControlBar::OnWindowPosChanged(lpwndpos);
// TODO: Add your message handler code here
if (IsFloating()) {
m_TreeCtrl.MoveWindow( 5, 5, lpwndpos->cx-10, lpwndpos->cy-10 );
}
else if (IsHorzDocked()) {
m_TreeCtrl.MoveWindow( 17, 3, lpwndpos->cx-25, lpwndpos->cy-17 );
}
else {
m_TreeCtrl.MoveWindow( 3, 17, lpwndpos->cx-17, lpwndpos->cy-30 );
}
}
BOOL CFileBar::add_item(Item &item)
{
if( item_list.IsEmpty() )
{
item_list.AddHead(item);
return TRUE;
}
int flag=0;
POSITION pos = item_list.GetHeadPosition();
for(int i=0; i<item_list.GetCount(); i++)
if( item_list.GetNext(pos).name == item.name )
{
flag = 1;break;
}
if(flag)
return FALSE;
else
{
item_list.AddTail(item);
return TRUE;
}
}
void CFileBar::insert_tree(Item &item, HTREEITEM hitem){
if( add_item(item) ){
int n = item.name.GetLength();
m_TreeCtrl.InsertItem( item.name.Left(n-4), 4, 4, hitem, TVI_LAST );
}
}
void CFileBar::PreInsertTree()
{
WIN32_FIND_DATA FileData;
HANDLE hFind;
Item *temp;
CString dir = theApp.dir;
//char ch[50];
if( dir.GetLength() ){
hFind = ::FindFirstFile( dir + "\\*.msl", &FileData);
if(hFind != INVALID_HANDLE_VALUE){
temp = new Item;
temp->path = (CString)dir + '\\' + FileData.cFileName;
//AfxMessageBox(temp->path);
//::GetFileTitle(temp->path, ch, 50);
//temp->name = ch;
temp->name = FileData.cFileName;
insert_tree(*temp, hitem0);
delete temp;
temp = NULL;
while( ::FindNextFile(hFind, &FileData) ){
temp = new Item;
temp->path = (CString)dir + '\\' + FileData.cFileName;
//::GetFileTitle(temp->path, ch, 50);
//temp->name = ch;
temp->name = FileData.cFileName;
insert_tree(*temp, hitem0);
delete temp;
temp = NULL;
}
}
}
}
void CFileBar::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CFileBar::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CFileBar::ExpandTree()
{
m_TreeCtrl.Expand (hitem0, TVE_EXPAND);
}
void CFileBar::Property()
{
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
POSITION pos = item_list.GetHeadPosition();
Item temp;
CString name = m_TreeCtrl.GetItemText(hItem);
int n;
for( int i = 0; i < item_list.GetCount(); i++){
temp = item_list.GetNext(pos);
n = temp.name.GetLength();
if( temp.name.Left(n-4) == name )break;
}
SHELLEXECUTEINFO sei;
ZeroMemory(&sei,sizeof(sei));
sei.cbSize = sizeof(sei);
sei.lpFile = temp.path;
sei.lpVerb = "properties";
sei.fMask = SEE_MASK_INVOKEIDLIST /*| SEE_MASK_FLAG_NO_UI*/;
ShellExecuteEx(&sei);
}
void CFileBar::ViewDb()
{
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
CString name = m_TreeCtrl.GetItemText( hItem );
POSITION pos = item_list.GetHeadPosition();
Item temp;
while( pos )
{
temp = item_list.GetNext(pos);
if( temp.name.Left( temp.name.GetLength() - 4 ) == name )
break;
}
CMSLDoc* pDoc;
if( pDoc = theApp.IsDocExist( name + ".msl" ) )
pDoc->OnCloseDocument();
theApp.OpenDocumentFile( temp.path );
}
void CFileBar::DelFile(const CString &fname)
{
POSITION pos = item_list.GetHeadPosition();
POSITION old;
bool flag = false;
while( pos )
{
old = pos;
Item temp = item_list.GetNext( pos );
if( temp.name.Left( temp.name.GetLength() - 4 ) == fname )
{
item_list.RemoveAt( old );
flag = true;
break;
}
}
if( !flag )
return ;
HTREEITEM hItem;
hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
if( hItem )
{
if( m_TreeCtrl.GetItemText( hItem ) == fname )
{
m_TreeCtrl.DeleteItem( hItem );
return ;
}
while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
if( m_TreeCtrl.GetItemText( hItem ) == fname )
{
m_TreeCtrl.DeleteItem( hItem );
return ;
}
}
}
void CFileBar::Expanding()
{
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if( m_TreeCtrl.ItemHasChildren( hItem ) )
return ;
CString name = m_TreeCtrl.GetItemText( hItem );
CTable table( (LPCTSTR) name );
for( int i = 0; i < table.attr.attr.num; i++ )
{
CString str;
str = table.attr.attr.attr[i].name;
str += ":";
switch( table.attr.attr.attr[i].type.id )
{
case _INT: str += "int"; break;
case _LONG: str += "long"; break;
case _FLOAT: str += "float"; break;
case _DATE: str += "date"; break;
case _STRING:
CString temp;
temp.Format( "char[%d]", table.attr.attr.attr[i].type.size - 2 );
str += temp;
break;
}
m_TreeCtrl.InsertItem( str, 5, 5, hItem, TVI_LAST );
}
for( i = 0; i < table.attr.index_num; i++ )
{
CString str( _T("index:") );
str += table.attr.index_table[i];
m_TreeCtrl.InsertItem( str, 6, 6, hItem, TVI_LAST );
}
m_TreeCtrl.Expand (hItem, TVE_EXPAND);
}
void CFileBar::InsertIndex( LPCTSTR tname, LPCTSTR iname )
{
HTREEITEM hItem;
hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
if( hItem )
{
if( m_TreeCtrl.GetItemText( hItem ) == tname )
;
else
while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
if( m_TreeCtrl.GetItemText( hItem ) == tname )
break;
}
if( m_TreeCtrl.ItemHasChildren( hItem ) )
{
CString str( _T("index:") );
str += iname;
m_TreeCtrl.InsertItem( str, 6, 6, hItem, TVI_LAST );
}
}
void CFileBar::DropIndex( LPCTSTR tname, LPCTSTR iname )
{
HTREEITEM hItem;
hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
if( hItem )
{
if( m_TreeCtrl.GetItemText( hItem ) == tname )
;
else
while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
if( m_TreeCtrl.GetItemText( hItem ) == tname )
break;
}
CString text( _T("index:") );
text += iname;
if( m_TreeCtrl.ItemHasChildren( hItem ) )
{
hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_CHILD );
if( m_TreeCtrl.GetItemText( hItem ) == text )
{
m_TreeCtrl.DeleteItem( hItem );
return;
}
while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
if( m_TreeCtrl.GetItemText( hItem ) == text )
{
m_TreeCtrl.DeleteItem( hItem );
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -