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

📄 getlinkview.cpp

📁 對網只操作的函數,很不錯
💻 CPP
字号:
// GetLinkView.cpp : implementation of the CGetLinkView class
//

#include "stdafx.h"
#include "GetLink.h"

#include "GetLinkDoc.h"
#include "GetLinkView.h"
#include "MainFrm.h"
#include "DummyList.h"
#include "NewTypeDlg.h"
#include "EditTypeDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView

IMPLEMENT_DYNCREATE(CGetLinkView, CTreeView)

BEGIN_MESSAGE_MAP(CGetLinkView, CTreeView)
	//{{AFX_MSG_MAP(CGetLinkView)
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_ITEM_ADD, OnItemAdd)
	ON_WM_RBUTTONUP()
	ON_COMMAND(ID_ITEM_DELETE, OnItemDelete)
	ON_COMMAND(ID_ITEM_EDIT, OnItemEdit)
	ON_NOTIFY_REFLECT(TVN_BEGINLABELEDIT, OnBeginlabeledit)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView construction/destruction

CGetLinkView::CGetLinkView()
{
	// TODO: add construction code here
   m_DlgEdit=FALSE;
   m_ReplaceStr = _T("");
   m_SearchStr = _T("");
}

CGetLinkView::~CGetLinkView()
{
}

BOOL CGetLinkView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT|TVS_HASBUTTONS|TVS_EDITLABELS;
	return CTreeView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView drawing

void CGetLinkView::OnDraw(CDC* pDC)
{
	CGetLinkDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CGetLinkView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();
 
	// TODO: You may populate your TreeView with items by directly accessing
	//  its tree control through a call to GetTreeCtrl().
	CTreeCtrl& tc = GetTreeCtrl();
    tc.SelectItem(NULL);

}

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView printing

BOOL CGetLinkView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CGetLinkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CGetLinkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView diagnostics

#ifdef _DEBUG
void CGetLinkView::AssertValid() const
{
	CTreeView::AssertValid();
}

void CGetLinkView::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}

CGetLinkDoc* CGetLinkView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGetLinkDoc)));
	return (CGetLinkDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGetLinkView message handlers

int CGetLinkView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CTreeView::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO: Add your specialized creation code here
	m_pImageList = new CImageList();
	m_pImageList->Create(IDB_IMGLIST,16,2,RGB(0,255,0));

    CTreeCtrl& tc = GetTreeCtrl();
	tc.SetImageList( m_pImageList, TVSIL_NORMAL );

	tc.DeleteAllItems();//删去可能的项
	
  // Set tree control styles
  long style = GetWindowLong(tc.m_hWnd,GWL_STYLE);
    style |= (TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | 
            TVS_SHOWSELALWAYS | TVS_DISABLEDRAGDROP);
  SetWindowLong(tc.m_hWnd,GWL_STYLE,style);

  CGetLinkApp * App = (CGetLinkApp*)AfxGetApp();
  CString filename=App->m_FileName;
  //如果配置ini文件存在,从中读出类别值,否则读入缺省值,并写入ini文件
  
  CHAR inBuf[10]; 
  ::GetPrivateProfileString("网址","Count",0,inBuf,10,(LPCTSTR)filename);
  int nCount1=atol(inBuf);
  HTREEITEM  h,h1;
  h = tc.InsertItem("网址",4,5);

  if(nCount1<=0) return 0;
  for(int i=1;i<=nCount1;i++)
  {
   CHAR type1[20]; //返回大类别键值
   char str[10];  
   itoa(i,str,10);
   CString keyname="大类别"+CString(str);
   ::GetPrivateProfileString("网址",(LPCTSTR)keyname,"?",type1,20,(LPCTSTR)filename);
   CString CStype1=(CString)type1;
   if(CStype1.GetLength()>2)  //大类别名至少应大于或等于两个字节,否则不显示 ,用此法删除或隐藏类别
   { h1 = tc.InsertItem((LPCTSTR)type1,4,5,h);

    //获取该大类中小类的个数nCount2
    ::GetPrivateProfileString((LPCTSTR)type1,"Count",0,inBuf,10,(LPCTSTR)filename);
    int nCount2=atol(inBuf);
    if(nCount2>0)
    {
	   for(int j=1;j<=nCount2;j++)
	   {
        CHAR type2[20]; //返回小类别键值
        char str2[10];  
        itoa(j,str2,10);
        CString keyname2="小类别"+CString(str2);
        ::GetPrivateProfileString((LPCTSTR)type1,(LPCTSTR)keyname2,"?",type2,20,(LPCTSTR)filename);
		CString CStype2=(CString)type2;
		if(CStype2.GetLength()>2)  //小类别至少应大于或等于两个字节
        tc.InsertItem((LPCTSTR)type2,4,5,h1);
        tc.Expand(h1,TVE_EXPAND);
	   }
    }
   }
   tc.Expand(h,TVE_EXPAND);

  }
  tc.SelectItem(NULL);
 

  return 0;
}

void CGetLinkView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent();
	CDummyList* AdrView=(CDummyList*)MainFrame->m_wndSplitter2.GetPane(0,0);

	CTreeCtrl& cDataTree = GetTreeCtrl();
	HTREEITEM hSelect= cDataTree.GetSelectedItem();
	AdrView->DoSelect(cDataTree.GetItemText(hSelect));

	*pResult = 0;
}


void CGetLinkView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	UINT nFlags2;
	CTreeCtrl& cDataTree = GetTreeCtrl();
    m_hPointedItem = cDataTree.HitTest (point, &nFlags2);
    if (m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL)))
    {
      m_bWasSelected = cDataTree.GetItemState (m_hPointedItem, TVIS_SELECTED) != 0;
      if (!m_bWasSelected)
        {
          VERIFY (cDataTree.SetItemState (m_hPointedItem, TVIS_SELECTED, TVIS_SELECTED));
        }
    }
		
	//CTreeView::OnRButtonDown(nFlags, point);
}

void CGetLinkView::OnItemAdd() 
{
	// TODO: Add your command handler code here
	CTreeCtrl& cDataTree = GetTreeCtrl();
	HTREEITEM hSelect= cDataTree.GetSelectedItem();
	CString m_select=cDataTree.GetItemText(hSelect);
	HTREEITEM hParent= cDataTree.GetParentItem(hSelect);
    CString m_parent=cDataTree.GetItemText(hParent);
    //cDataTree.SetItemState(hSelect, TVIS_SELECTED, TVIS_SELECTED);怎样继续加亮选中CTree项?
	CNewTypeDlg dlg;
	if(m_select!="")
    dlg.m_UpType=m_parent; //新类别父类名
	if(hParent!=NULL) //保证父类不为空
	{
	 if(dlg.DoModal()==IDOK)   
	 {
	  CString NewType=dlg.m_NewType;
	  if(NewType.GetLength()>2)
	  {
       HTREEITEM hNewItem=cDataTree.InsertItem((LPCTSTR)NewType,4,5,hParent);
	   if(hNewItem!=NULL)
	   {
         //更新ini文件
           CGetLinkApp * App = (CGetLinkApp*)AfxGetApp();
           CString filename=App->m_FileName; 
		   //Count加一
           CHAR inBuf[10]; 
           ::GetPrivateProfileString((LPCTSTR)m_parent,"Count",0,inBuf,10,(LPCTSTR)filename);
           int nCount=atol(inBuf);
		   nCount++; 
		   CHAR str[20];
		   itoa(nCount,str,10);
           ::WritePrivateProfileString((LPCTSTR)m_parent,"Count",(LPCTSTR)str,(LPCTSTR)filename);
		   //添加SecName
           CString secname;
		   if(m_parent=="网址")
			   secname="大类别";
		   else
			   secname="小类别";
		   secname=secname+CString(str);
           ::WritePrivateProfileString((LPCTSTR)m_parent,(LPCTSTR)secname,(LPCTSTR)NewType,(LPCTSTR)filename);

	   }
	  }

	 }
	}
}

void CGetLinkView::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CTreeCtrl& cDataTree = GetTreeCtrl();

	UINT nFlags2;
    HTREEITEM hItem = cDataTree.HitTest (point, &nFlags2);
    if (m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL)))
    {
      if (hItem == m_hPointedItem)
        {
          CMenu menuItem;
          CMenu *pMenu;
          if (menuItem.LoadMenu (IDM_TYPE_ITEM) && (pMenu = menuItem.GetSubMenu (0)) != NULL)
            {
              pMenu->EnableMenuItem (ID_ITEM_SHOW, MF_BYCOMMAND|MF_ENABLED);
              pMenu->EnableMenuItem (ID_ITEM_ADD, MF_BYCOMMAND|MF_ENABLED);
              pMenu->EnableMenuItem (ID_ITEM_DELETE, MF_BYCOMMAND|MF_ENABLED);
              pMenu->EnableMenuItem (ID_ITEM_EDIT, MF_BYCOMMAND|MF_ENABLED);
              ClientToScreen (&point);
              pMenu->TrackPopupMenu (TPM_LEFTBUTTON|TPM_RIGHTBUTTON/*|TPM_RETURNCMD*/|TPM_LEFTALIGN|TPM_TOPALIGN, point.x, point.y, this);
            }
        }
      if (!m_bWasSelected && m_hPointedItem)
        {
          VERIFY (cDataTree.SetItemState (m_hPointedItem, 0, TVIS_SELECTED));
        }
    }	
	//CTreeView::OnRButtonUp(nFlags, point);
}

void CGetLinkView::OnItemDelete() 
{
	// TODO: Add your command handler code here
	CTreeCtrl& cDataTree = GetTreeCtrl();
	HTREEITEM hSelect= cDataTree.GetSelectedItem();
	CString m_select=cDataTree.GetItemText(hSelect);
	HTREEITEM hParent= cDataTree.GetParentItem(hSelect);
    CString m_parent=cDataTree.GetItemText(hParent);
    //cDataTree.SetItemState(hSelect, TVIS_SELECTED, TVIS_SELECTED);怎样继续加亮选中CTree项?
	if(hParent!=NULL) //保证选中节点父类不为空
	{
      int result=AfxMessageBox("你确认删除该类和它的所有子类吗?",MB_OKCANCEL);
	  if(result==IDOK)
	  {

		if(cDataTree.DeleteItem(hSelect))
		{
		//更新ini文件
        CGetLinkApp * App = (CGetLinkApp*)AfxGetApp();
        CString filename=App->m_FileName; 
        CHAR inBuf[10]; 
        ::GetPrivateProfileString((LPCTSTR)m_parent,"Count",0,inBuf,10,(LPCTSTR)filename);
        int nCount=atol(inBuf);
	     for(int j=1;j<=nCount;j++)
		 {
          CString keyname;
    	  if(m_parent=="网址")
			 keyname="大类别";
		  else
			 keyname="小类别";  
          CHAR type[20]; //返回类别键值
          char str[10];  
          itoa(j,str,10);
          keyname=keyname+CString(str);
          ::GetPrivateProfileString((LPCTSTR)m_parent,(LPCTSTR)keyname,"?",type,20,(LPCTSTR)filename);
          if(m_select==type)
		  {CString CStype="";
          ::WritePrivateProfileString((LPCTSTR)m_parent,(LPCTSTR)keyname,(LPCTSTR)CStype,(LPCTSTR)filename);}
		 }
		}


	  }
	}	
}

void CGetLinkView::OnItemEdit() 
{
	// TODO: Add your command handler code here
	CTreeCtrl& cDataTree = GetTreeCtrl();
	HTREEITEM hSelect= cDataTree.GetSelectedItem();
	CString m_select=cDataTree.GetItemText(hSelect);
	
	HTREEITEM hParent= cDataTree.GetParentItem(hSelect);
    CString m_parent=cDataTree.GetItemText(hParent);
	if(m_select=="网址")
		m_parent="无父类";
	CEditTypeDlg dlg;
	if(m_select!="")
    {
		dlg.m_EditType=m_select; //类别名称
	    CMainFrame* MainFrame=(CMainFrame*)this->GetParentFrame();
	    CDummyList* pAdrView=(CDummyList*)MainFrame->m_wndSplitter2.GetPane(0,0);
    	dlg.m_nCount=pAdrView->m_ctrGetList.GetItemCount();//该类别网址个数
	}
	 if(dlg.DoModal()==IDOK)   
	 {
	  CString NewType=dlg.m_EditType;
	  if(m_select=="网址"&&NewType!="网址")
	  {AfxMessageBox("网址是最高类别名称,请勿修改!"); return;}

	  if(NewType.GetLength()>2)
	  {
        m_DlgEdit=TRUE; //指定由对话框编辑
	   if(cDataTree.SetItemText(hSelect,(LPCTSTR)NewType))
	   {
		   m_DlgEdit=FALSE;
         //更新ini文件
           CGetLinkApp * App = (CGetLinkApp*)AfxGetApp();
           CString filename=App->m_FileName;
           m_SearchStr=m_select;
		   m_ReplaceStr=NewType;
		   FormatFile(filename);       
	   }
	  }

	 }
		
}

void CGetLinkView::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here

    if(!m_DlgEdit)
	{
	 *pResult =1; //取消双击产生的编辑框
	}
    else
	  *pResult =0;  
}

void CGetLinkView::OpenFile(CString File, CStringArray &Content)
{
	CFile file;
	CString sFileData;
	int iReturn = file.Open(File, CFile::modeRead);
	if(iReturn == 0)
		return;
	DWORD DWFileLength = file.GetLength();
	if(DWFileLength != 0)
	{
		file.Read(sFileData.GetBuffer(DWFileLength), DWFileLength);
		sFileData.ReleaseBuffer();
	}
	file.Close();
	CString Line;
	while(!sFileData.IsEmpty())
	{
		//get one line
		Line=sFileData.SpanExcluding("\r\n");
		sFileData=sFileData.Right(sFileData.GetLength()-Line.GetLength()-2);
		Content.Add(Line);
	}
}

void CGetLinkView::FormatWidth(CStringArray &Content)
{
	for(int i=0;i<Content.GetSize();i++)
	{
		CString &Line=Content.ElementAt(i);
		CString LineOld=Line;
		Line.Replace(m_SearchStr,m_ReplaceStr);
	}

}

void CGetLinkView::SaveFile(CString File, CStringArray &Content)
{
	CFile file;
	int iOpenWrite = file.Open(File, CFile::modeCreate|CFile::modeWrite);
	if(iOpenWrite != 0)
	{
		for(int i=0;i<Content.GetSize();i++)
		{
			CString Result=Content[i]+"\r\n";
			int iLength = Result.GetLength();
			file.Write(Result.GetBuffer(0), iLength);
		}
		file.Close();
	}
}

void CGetLinkView::FormatFile(CString File)
{
	CStringArray Content;
	OpenFile( File, Content);
	FormatWidth(Content);
	SaveFile( File, Content);
}

⌨️ 快捷键说明

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