📄 mainfrm.cpp
字号:
// 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 + -