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