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

📄 linklistview.cpp

📁 一个快捷面板,可以将自己常用的程序放在其中!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	GetListCtrl().SetColumnWidth(2, 4* 5);

	GetListCtrl().SetRedraw(TRUE);
}

void CLinkListView::OnOpenFolder()
{
	if(m_nHotItem != LB_ERR)
	{
		CString sFold = m_arItemInfo.GetAt(m_nHotItem);
		sFold = sFold.Left(sFold.ReverseFind('\\'));
		if(!sFold.IsEmpty())
			ShellExecute(GetSafeHwnd(), "open", sFold, "", "", SW_SHOW);

	}
}

void CLinkListView::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult)
{
	OnNMHover(pNMHDR, pResult);

	*pResult = 0;
}


void CLinkListView::OnFileSave()
{
	CFile		SaveFile;
	TCHAR		szPath[MAX_PATH];
	CString		sPath = _T(""), sTemp = _T("");
	ZeroMemory(szPath, sizeof(szPath));
	::GetModuleFileName(AfxGetInstanceHandle(), szPath, sizeof(szPath));
	sPath		= szPath;
	sPath		= sPath.Left(sPath.ReverseFind('\\') + 1);

	if(m_sSavePath.IsEmpty())
		sPath += SAVENAME;
	else if(m_sSavePath.Right(1).CompareNoCase("\\") == 0)
		sPath = m_sSavePath + SAVENAME;
	else
		sPath = m_sSavePath + _T("\\") + SAVENAME;

	try
	{
		if(SaveFile.Open(sPath, CFile::modeCreate | CFile::modeWrite))
		{
			CArchive	ar(&SaveFile, CArchive::store);
			Serialize(ar);
			ar.Close();
			SaveFile.Close();
		}
	}
	catch(...)
	{
		AfxMessageBox(IDS_SAVEFILE_ERROR);
	}

}

void CLinkListView::LoadExistFile()
{
	CFile		ReadFile;
	TCHAR		szPath[MAX_PATH];
	CString		sPath = _T(""), sTemp = _T("");
	ZeroMemory(szPath, sizeof(szPath));
	::GetModuleFileName(AfxGetInstanceHandle(), szPath, sizeof(szPath));
	sPath		= szPath;
	sPath		= sPath.Left(sPath.ReverseFind('\\') + 1);

	if(m_sSavePath.IsEmpty())
		sPath += SAVENAME;
	else if(m_sSavePath.Right(1).CompareNoCase("\\") == 0)
		sPath = m_sSavePath + SAVENAME;
	else
		sPath = m_sSavePath + _T("\\") + SAVENAME;

	try
	{
		if(ReadFile.Open(sPath, CFile::modeRead))
		{
			CArchive	ar(&ReadFile, CArchive::load);
			Serialize(ar);
			ar.Close();
			ReadFile.Close();
		}
	}
	catch(CFileException *e)
	{
		e->ReportError();
	}

}

void CLinkListView::Serialize(CArchive &ar)
{
	if (ar.IsStoring())
	{
		if(m_arItemInfo.GetCount() <= 0)
			return;
		ar << (long)m_arItemInfo.GetCount();
		for(long n = 0; n < m_arItemInfo.GetCount(); n++)
			ar << m_arItemInfo.GetAt(n);

	}
	else
	{
		long lCount = 0;
		ar >> lCount;
		if(lCount > 0)
		{
			m_arItemInfo.RemoveAll();
			for(long n = 0; n < lCount; n++)
			{
				CString sPath = _T("");
				ar >> sPath;
				m_arItemInfo.Add(sPath);
			}
		}

	}
}


void CLinkListView::OnDestroy()
{
	CListView::OnDestroy();

	DragAcceptFiles(FALSE);

	WINDOWPLACEMENT WinPlace;
	ZeroMemory(&WinPlace, sizeof(WinPlace));

	GetWindowPlacement(&WinPlace);

	WriteKeySetting(WinPlace);
}



void CLinkListView::OnAddLink()
{
	CFileDialog dlg(TRUE);
	if(dlg.DoModal() == IDOK)
		InsertItem(dlg.GetPathName());
}

void CLinkListView::OnDeleteItem()
{
	int nItem = 0;
	POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
	while(pos)
	{
		nItem = GetListCtrl().GetNextSelectedItem(pos);
		if(nItem != LB_ERR) GetListCtrl().SetItemData(nItem, DELETEMARK);
	}

	for(INT_PTR n = m_arItemInfo.GetCount() - 1; n >= 0; n--)
	{
		if(GetListCtrl().GetItemData(n) == DELETEMARK)
		{
			GetListCtrl().DeleteItem(n);
			m_arItemInfo.RemoveAt(n);
		}
	}

	GetListCtrl().Arrange(LVA_DEFAULT);
}

void CLinkListView::OnFileUpdate()
{
	GetListCtrl().Arrange(LVA_DEFAULT);
}

void CLinkListView::OnSize(UINT nType, int cx, int cy)
{
	CListView::OnSize(nType, cx, cy);

	GetListCtrl().Arrange(LVA_DEFAULT);
}

// 将个性化设置存入注册表
void CLinkListView::WriteKeySetting(WINDOWPLACEMENT &WinPlace)
{
	//CRegistry Key(HKEY_CURRENT_USER);
	//if(Key.Open(_T("Software\\Xiaoqiang Studio\\LinkPanel\\Settings"))
	//	&& Key.CreateKey("Windows Position"))
	//{
	//	//Key.Write("length", (DWORD)WinPlace.length);
	//	//Key.Write("flags", (DWORD)WinPlace.flags);
	//	//Key.Write("showCmd", (DWORD)WinPlace.showCmd);
	//	//CPoint pt1(WinPlace.ptMinPosition);
	//	//CPoint pt2(WinPlace.ptMaxPosition);
	//	//CRect  rc(WinPlace.rcNormalPosition);
	//	//Key.WritePoint("MinPosition", &pt1);
	//	//Key.WritePoint("MaxPosition", &pt2);
	//	Key.WriteRect("NormalPosition", &rc);
	//}
}

// 从注册表中读出个性化设置
void CLinkListView::ReadKeySetting(WINDOWPLACEMENT &WinPlace)
{
	//ZeroMemory(&WinPlace, sizeof(WinPlace));


	//CRegistry Key(HKEY_CURRENT_USER);
	//if(Key.Open(_T("Software\\Xiaoqiang Studio\\LinkPanel\\Settings\\Window Position")))
	//{
		//Key.Read("length", (DWORD*)&WinPlace.length);
		//Key.Read("flags", (DWORD*)&WinPlace.flags);
		//Key.Read("showCmd", (DWORD*)&WinPlace.showCmd);
		//CPoint pt1(WinPlace.ptMinPosition);
		//CPoint pt2(WinPlace.ptMaxPosition);
		//CRect  rc(WinPlace.rcNormalPosition);
		//Key.Read("MinPosition", &pt1);
		//Key.Read("MaxPosition", &pt2);
		//Key.Read("NormalPosition", &rc);

		//WinPlace.ptMinPosition.x = pt1.x;
		//WinPlace.ptMinPosition.y = pt1.y;

		//WinPlace.ptMaxPosition.x = pt2.x;
		//WinPlace.ptMaxPosition.y = pt2.y;

		//WinPlace.rcNormalPosition.left = rc.left;
		//WinPlace.rcNormalPosition.right = rc.right;
		//WinPlace.rcNormalPosition.top = rc.top;
		//WinPlace.rcNormalPosition.bottom = rc.bottom;

	//}

}

// 接收拖动过程中的消息
void CLinkListView::OnDropFiles(HDROP DropInfo)
{
	// 得到Drag&Drop的文件个数
	UINT nNumFilesDropped = DragQueryFile(DropInfo, -1, NULL, 0);

	CString sDragFileName = _T(""), sPath = _T("");

	// 
	for (UINT n = 0 ; n < nNumFilesDropped; n++) 
	{
		// 得到PathName的长度,由于第三个参数为NULL,所以调用会失败并返回所需长度
		UINT nPathSize = DragQueryFile(DropInfo, n, NULL, 0);

		// 分配memory
		TCHAR *pszFile = (char *) LocalAlloc(LPTR, nPathSize += 1);

		// 分配错
		if (pszFile == NULL) continue;

		// 再次得到文件名
		DragQueryFile(DropInfo, n, pszFile, nPathSize);

		sDragFileName = pszFile;


		// 如果是shortCut则进行转换得到正确的文件名,expandedFile为最后的文件名
		if(sDragFileName.Right(3).CompareNoCase(_T("lnk")) == 0)
			sPath = ExpandShortcut(sDragFileName);
		else
			sPath = sDragFileName;

		// 释放memory
		LocalFree(pszFile);

		// 添加到窗口中
		if(!sPath.IsEmpty()) InsertItem(sPath);
	}

	//完成
	DragFinish(DropInfo);


}
void CLinkListView::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
	CListView::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

	//if(!bSysMenu)
	//	m_Menu.InitPopupMenu(pPopupMenu, IDR_TRACK_MENU, NULL);
}

void CLinkListView::OnViewStyle(UINT nID)
{
	switch(nID) 
	{
	case ID_SMALL_ICON :
		m_dwViewStyle = LVS_SMALLICON;
		break;
	case ID_LIST_ICON :
		m_dwViewStyle = LVS_LIST;
		break;
	case ID_REPORT :
		m_dwViewStyle = LVS_REPORT;
		break;
	case ID_LARGE_ICON :
		m_dwViewStyle = LVS_ICON;
		break;
	}
	GetListCtrl().ModifyStyle(LVS_TYPEMASK, m_dwViewStyle);

	if(m_dwViewStyle == LVS_REPORT) AutoSizeListCtrl();

}

void CLinkListView::OnViewStyleUI(CCmdUI *pCmdUI)
{
	BOOL bCheck = FALSE;
	switch(pCmdUI->m_nID)
	{
	case ID_SMALL_ICON :
		bCheck = LVS_SMALLICON == m_dwViewStyle ? TRUE : FALSE;
		break;
	case ID_LIST_ICON :
		bCheck = LVS_LIST == m_dwViewStyle ? TRUE : FALSE;
		break;
	case ID_REPORT :
		bCheck = LVS_REPORT == m_dwViewStyle ? TRUE : FALSE;
		break;
	case ID_LARGE_ICON :
		bCheck = LVS_ICON == m_dwViewStyle ? TRUE : FALSE;
		break;
	}
	pCmdUI->SetRadio(bCheck);
}


void CLinkListView::OnAppExit()
{
	CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	if(pFrame)
	{
		pFrame->m_bShutdown = TRUE;
		m_arItemInfo.RemoveAll();
		for(int n = 0; n < GetListCtrl().GetItemCount(); n++)
		{
			CString sPath = GetListCtrl().GetItemText(n, 1);
			m_arItemInfo.Add(sPath);
		}
		if(pFrame->m_bSave)
			OnFileSave();

		pFrame->SendMessage(WM_CLOSE);
	}
}

void CLinkListView::OnAbout()
{
	CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	if(pFrame)
	{
		CAboutDlg aboutDlg(pFrame->m_bStyle);
		aboutDlg.DoModal();
	}
}

void CLinkListView::EnableBkImage(BOOL bEnable)
{
	if (bEnable)
	{
		// Load the resource and apply it to the background
		TCHAR szBuffer[_MAX_PATH]; 
		VERIFY(::GetModuleFileName(AfxGetInstanceHandle(), szBuffer, _MAX_PATH));
		CString sPath;
		sPath.Format(_T("res://%s/#2/#136"),szBuffer);

		LVBKIMAGE bki;
		bki.ulFlags = LVBKIF_STYLE_TILE | LVBKIF_SOURCE_URL ;
		bki.pszImage = sPath.GetBuffer(sPath.GetLength());
		bki.cchImageMax = sPath.GetLength();
		VERIFY(GetListCtrl().SetBkImage( &bki));

		// Whichever one you choose, log the path used
		CString str;
		str.Format(_T("Set background image: %s"), sPath.GetBuffer(sPath.GetLength()));
		sPath.ReleaseBuffer();

	}
	else
	{
		GetListCtrl().SetBkImage( HBITMAP(0));
	}
}

⌨️ 快捷键说明

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