⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 一个源代码管理工具,支持悬浮框拖曳,后台数据库管理,代码高亮显示灯功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "CodeManager.h"
#include "CodeManagerDoc.h"
#include "CodeManagerView.h"

#include "MainFrm.h"
#include "FindDlg.h"
#include "InfoDlg.h"
#include "SetDlg.h"
#include "SelectDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
CString FileExp[] = {".c", ".cpp", ".dsw", ".h", ".rc", ".rc2", ".dsp", ".ico", ".bmp"};
//CTypedPtrArray<CString, CString> FileExp;

DWORD CALLBACK EditStreamCallbackWriteToFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
DWORD CALLBACK EditStreamCallbackOut(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_COMMAND(ID_VIEW_SET, OnViewSet)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_MYSAVE, OnFileMysave)
	ON_COMMAND(ID_VIEW_LIST, OnViewList)
	ON_UPDATE_COMMAND_UI(ID_VIEW_LIST, OnUpdateViewList)
	ON_COMMAND(ID_VIEW_FILE, OnViewFile)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FILE, OnUpdateViewFile)
	ON_COMMAND(ID_DB_VIEW, OnDbView)
	ON_COMMAND(ID_TEST_GET, OnTestGet)
	ON_COMMAND(ID_FILE_FILEIMPORT, OnFileFileimport)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_TEST_READ, OnTestRead)
	ON_COMMAND(ID_FILE_DIRIMPORT, OnFileDirimport)
	ON_COMMAND(ID_EDITCUT, OnEditcut)
	ON_COMMAND(ID_EDITUNDO, OnEditundo)
	ON_COMMAND(ID_VIEWDO, OnViewdo)
	ON_COMMAND(ID_EDITCOPY, OnEditcopy)
	ON_COMMAND(ID_EDITPASTE, OnEditpaste)
	ON_COMMAND(ID_EDIT_SELECTALL, OnEditSelectall)
	ON_COMMAND(ID_EDITFIND, OnEditfind)
	ON_COMMAND(ID_EDITREPEAT, OnEditrepeat)
	ON_COMMAND(ID_EDITREPEATNEXT, OnEditrepeatnext)
	ON_COMMAND(ID_EDITSELECTALL, OnEditselectall)
	ON_COMMAND(ID_EDITREPLACE, OnEditreplace)
	ON_COMMAND(ID_FILE_MYSAVE_AS, OnFileMysaveAs)
	ON_COMMAND(ID_VIEW_FLOAT, OnViewFloat)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FLOAT, OnUpdateViewFloat)
	ON_COMMAND(ID_VIEW_FONT, OnViewFont)
	ON_COMMAND(ID_SHOW, OnShow)
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame():dlg(NULL),m_SelectFlag(1),m_NewFlag(0),m_Fs(TRUE),m_bChange(FALSE)
{
	// TODO: add member initialization code here
	m_pFindDialog = NULL;
	m_pReplaceDialog = NULL;
	m_bdType = FALSE;
	m_bIcon = TRUE;
	m_bClose = FALSE;
	m_bMini = TRUE;
	NewFileExp = FileExp;
	m_nFileNum = 9;
	m_bStyle = TRUE;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	ReadConfigure();//读取配置文件
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	//悬浮框处理
	dlg = new CFloatDlg(); 
	dlg->Create(IDD_FLOATDIALOG, NULL);
	CRect rect1,rect2;
	dlg->GetWindowRect(&rect2);
	dlg->SetWindowPos(&wndTopMost, rect2.left, rect2.top, rect2.Width(), rect2.Height(), SWP_SHOWWINDOW);
	this->GetWindowRect(&rect1);
	dlg->MoveWindow(rect1.right - rect2.Width() - 80, rect1.top + 2, rect2.Width(), rect2.Height(), TRUE);
	dlg->ShowWindow(SW_SHOW); //显示对话框 
	dlg->UpdateWindow();

	if(!m_LeftBar.Create("数据浏览条",this, CSize(260,200), TRUE, 123))
	{
		TRACE0("Failed to create Leftbar\n");
		return -1;
	}
	m_LeftBar.SetBarStyle(m_LeftBar.GetBarStyle()|
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	m_LeftBar.EnableDocking(CBRS_ALIGN_ANY);


	if(!m_DownBar.Create("文件浏览条",this, CSize(200,230),TRUE,124))
	{
		TRACE0("Failed to create Downbar\n");
		return -1;
	}
	m_DownBar.SetBarStyle(m_DownBar.GetBarStyle()|
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	m_DownBar.EnableDocking(CBRS_ALIGN_ANY);

	DockControlBar(&m_LeftBar,AFX_IDW_DOCKBAR_LEFT); 
	RecalcLayout();
	CRect rect;
	m_LeftBar.GetWindowRect(rect);

	rect.OffsetRect(0,1);
	DockControlBar(&m_DownBar, AFX_IDW_DOCKBAR_LEFT,rect);

	if(!m_TabCtrl.Create(TCS_DOWN|WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),&m_LeftBar,125))
	{
		TRACE0("Failed to create TabCtrl\n");
		return -1;
	}

	if(m_bStyle)
		m_TabCtrl.SetStyle(TCS_UP);
	else
		m_TabCtrl.SetStyle(TCS_DOWN);

	if (!m_wndTree.Create(WS_CHILD|WS_VISIBLE|
		TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,
		CRect(0, 0, 0, 0), &m_TabCtrl, IDC_MYTREECTRL))
	{
		TRACE0("Failed to create TreeCrl child\n");
		return -1;
	}


//	m_wndTree.SetTextColor (RGB(7,145,13));

	m_wndTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE);//3D
//	HTREEITEM ht,hti = m_wndTree.InsertItem(_T("源码目录"));

//	ht = m_wndTree.InsertItem(_T("OnlyATest"),hti);
//	m_wndTree.SetItemData(ht,991230999);

//	m_wndTree.InsertItem(_T("VCProject"),hti);

	m_wndTree.ModifyStyle(0, TVS_EDITLABELS);
	m_wndTree.ModifyStyle(0,TVS_EDITLABELS|TVS_HASLINES|TVS_HASBUTTONS|TVS_SHOWSELALWAYS);

	


	m_wndTree.SetMyImageList();


	m_TabCtrl.AddPage(&m_wndTree,"目录", IDI_DIR);//添加第一页
	m_TabCtrl.AddPage(RUNTIME_CLASS(CFindDlg),IDD_FINDDIALOG,"查询", IDI_FIND);//添加第二页
	m_TabCtrl.AddPage(RUNTIME_CLASS(CInfoDlg),IDD_INFODIALOG,"属性", IDI_PROPERTY);//添加第三页
	

	m_TabCtrl.UpdateWindow();
	m_TabCtrl.SetActivePage(0);

	if (!m_wndList.Create(WS_CHILD|WS_VISIBLE|
		TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,
		CRect(0, 0, 0, 0), &m_DownBar, 1))
	{
		TRACE0("Failed to create ListCrl child\n");
		return -1;
	}
	m_wndList.ModifyStyleEx(0, WS_EX_CLIENTEDGE);//3D

	HRESULT hr;
	try
	{
		hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		if(SUCCEEDED(hr))
			hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB//Codedb.mdb","","",adModeUnknown);
	}
	catch(_com_error e)//捕捉异常
	{
		CString errormessage;
		errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
		AfxMessageBox(errormessage);///显示错误信息
	}

	m_DbObject.InitConnection();
	m_DbObject.GetValue("select * from CodeTable where ParentID is NULL");


/*	TV_INSERTSTRUCT tvstruct;
	tvstruct.item.pszText = "szC";
	tvstruct.hParent = NULL;
		tvstruct.hInsertAfter = TVI_LAST;
		tvstruct.item.iImage = 2;
		tvstruct.item.iSelectedImage = 2;
		tvstruct.item.lParam = 2;
		tvstruct.item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM;
	m_wndTree.InsertItem(&tvstruct);*/
	

	CString str;
	long lt, ldir, ltype;
	_variant_t vname, vtemp, vt;
	HTREEITEM ht;
	while(!m_DbObject.m_pRecordset->adoEOF)
	{
		vname = m_DbObject.m_pRecordset->GetCollect("CodeName");
		vtemp = m_DbObject.m_pRecordset->GetCollect("CodeID");
		ldir = (long)m_DbObject.m_pRecordset->GetCollect("IsDir");
	//	ltype = (long)m_DbObject.m_pRecordset->GetCollect("IconFlag");
		str = (LPCTSTR)(_bstr_t)vname;
		lt = (long)vtemp;
		ht = m_wndTree.InsertItem(str);

		if(ldir)
		{
			m_wndTree.SetItemImage(ht, 0, 0);
		}
		else
		{
			m_wndTree.SetMyItemImage(ht, str);
		}
		m_wndTree.SetItemData(ht,lt);
		m_DbObject.m_pRecordset->MoveNext();
	}

//	AddSubDir(ht);//添加一级子节点

	CString s;


	HTREEITEM hChild = m_wndTree.GetChildItem(NULL);

	s = m_wndTree.GetItemText(hChild);
	while(hChild)
	{
		AddSubDir(hChild);

		HTREEITEM hhChild = m_wndTree.GetChildItem(hChild);
		while(hhChild)
		{
			AddSubDir(hhChild);
			hhChild = m_wndTree.GetNextItem(hhChild,TVGN_NEXT);
		}
		hChild = m_wndTree.GetNextItem(hChild,TVGN_NEXT);
		s = m_wndTree.GetItemText(hChild);
	}

//	HTREEITEM hChild = m_wndTree.GetChildItem(m_wndTree.GetRootItem());

	if(m_bIcon)
	{//添加系统栏图标
		HICON hIcon = AfxGetApp()->LoadIcon(IDI_DIR);
		m_tIcon.Create(this,WM_ICON_NOTIFY,"源码利器",hIcon,IDR_FLOATMENU);
	}


	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bClose && m_bCloseRe)
	{//关闭到系统图标
		ShowWindow(SW_SHOWMINIMIZED);
		ShowWindow(SW_HIDE);
		return;
	}
//	delete []NewFileExp;
	//此处需添加文件修改后的处理
	CCodeManagerView *EditView = (CCodeManagerView *)GetActiveView();
	CRichEditCtrl &edit = EditView->GetRichEditCtrl();
	if(edit.GetModify())
	{
		if(m_bdType)
		{
			HTREEITEM hs = m_wndTree.GetSelectedItem();
			CString str = "文件";
			str += m_wndTree.GetItemText(hs);
			str += "内容已发生改变,是否保存到数据库?";
			int ret = MessageBox(str, "代码利器", MB_YESNOCANCEL|MB_ICONQUESTION);
			if(ret == IDYES)
			{
				CCodeManagerView *EditView = (CCodeManagerView *)GetActiveView();
				CRichEditCtrl &edit = EditView->GetRichEditCtrl();
				CString strText;
				edit.GetWindowText(strText);
				BYTE *pBuf = (BYTE*)strText.GetBuffer(strText.GetLength());
				CString strvalue = "select * from CodeTable where CodeID = ", strdata;
				long lvalue = m_wndTree.GetItemData(m_wndTree.GetSelectedItem());
				strdata.Format("%ld", lvalue);
				strvalue = strvalue + "" + strdata +"";
				m_DbObject.GetValue(strvalue);

				m_DbObject.SetDataChunk(pBuf);
				m_DbObject.Update();
				strText.ReleaseBuffer();

				edit.SetModify(FALSE);
			}
			if(ret == IDCANCEL)
				return;

		}
		else
		{
			if(m_strFileName.IsEmpty())
			{
				CFileDialog fd (FALSE, _T(""), NULL, OFN_HIDEREADONLY|OFN_EXPLORER|OFN_NOCHANGEDIR, "*.*|*.*||"); 
				if(fd.DoModal() == IDOK)
				{
					m_strFileName = fd.GetPathName();
					SaveContext();
				}
			}
			else
			{
				CString str = "文件";
				str += m_strFileName;
				str += "内容已发生改变,想保存文件吗?";
				int ret = MessageBox(str, "代码利器", MB_YESNOCANCEL|MB_ICONQUESTION);

				if(ret == IDYES)
					SaveContext();
				if(ret == IDCANCEL)
					return ;

			}
				
		}
	}
	//去掉系统自带的修改标记
	CFrameWnd *pFrame = (CFrameWnd*)AfxGetApp()->m_pMainWnd;
	CCodeManagerDoc *pDoc = (CCodeManagerDoc*) pFrame->GetActiveDocument();
	pDoc->SetModifiedFlag(FALSE);

	if(dlg !=NULL)
	{
		dlg->DestroyWindow(); //销毁对话框 
		delete dlg;
	}
	SaveConfigure();
	CFrameWnd::OnClose();
}

void CMainFrame::OnViewSet() 
{
	// TODO: Add your command handler code here
	CSetDlg setDlg;
	setDlg.DoModal();
}

void CMainFrame::OnFileOpen() 
{
	// TODO: Add your command handler code here
	CCodeManagerView *EditView = (CCodeManagerView *)GetActiveView();
	
	CRichEditCtrl &edit = EditView->GetRichEditCtrl();
	if(edit.GetModify())
	{
		if(m_bdType)
		{
			HTREEITEM hs = m_wndTree.GetSelectedItem();
			CString str = "文件";
			str += m_wndTree.GetItemText(hs);
			str += "内容已发生改变,是否保存到数据库?";
			int ret = MessageBox(str, "代码利器", MB_YESNOCANCEL|MB_ICONQUESTION);
			if(ret == IDYES)
			{
				CCodeManagerView *EditView = (CCodeManagerView *)GetActiveView();
				CRichEditCtrl &edit = EditView->GetRichEditCtrl();
				CString strText;
				edit.GetWindowText(strText);
				BYTE *pBuf = (BYTE*)strText.GetBuffer(strText.GetLength());
				CString strvalue = "select * from CodeTable where CodeID = ", strdata;
				long lvalue = m_wndTree.GetItemData(m_wndTree.GetSelectedItem());
				strdata.Format("%ld", lvalue);
				strvalue = strvalue + "" + strdata +"";
				m_DbObject.GetValue(strvalue);

				m_DbObject.SetDataChunk(pBuf);
				m_DbObject.Update();
				strText.ReleaseBuffer();

				edit.SetModify(FALSE);
			}
			if(ret == IDCANCEL)
				return;

		}
		else
		{
			if(m_strFileName.IsEmpty())
			{
				int ret2 = MessageBox("文件内容已发生改变,想保存文件吗?", "代码利器", MB_YESNOCANCEL|MB_ICONQUESTION);
				if(ret2 == IDYES)
				{					
					CFileDialog fd (TRUE, _T(""), NULL, OFN_HIDEREADONLY|OFN_EXPLORER|OFN_NOCHANGEDIR, "*.*|*.*||"); 
					if(fd.DoModal() == IDOK)
					{
						m_strFileName = fd.GetPathName();
						SaveContext();
					}
				}
				if(ret2 == IDCANCEL)
					return ;
			}
			else
			{
				CString str = "文件";
				str += m_strFileName;
				str += "内容已发生改变,想保存文件吗?";
				int ret = MessageBox(str, "代码利器", MB_YESNOCANCEL|MB_ICONQUESTION);

				if(ret == IDYES)
					SaveContext();

⌨️ 快捷键说明

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