📄 association.cpp
字号:
if(nType == FINDTYPE_EXT &&
0==wcscmp(szBuf, lpList->lpszExt))
{
nItem = i;
break;
}
lpList = lpList->lpNext;
}//End of for
//傾僀僥儉偑尒偮偐傜側偄(僶僌)
if(-1 == nItem) return NULL;
return lpList;
}
///////////////////////////////////////////////////////////////
int CAssociation::OpenChoose(LPTSTR lpszPath, LPTSTR lpszName, BOOL bReg, BOOL bOpen)
{
//僀儞僗僞儞僗偺曐懚
g_pChoose = this;
//僷儔儊乕僞偺曐懚
if(lpszPath)
wcscpy(m_szCurrent, lpszPath);
else
m_szCurrent[0]=0x00;
wcscpy(m_szName, lpszName);
m_lpszExt = wcsrchr(m_szName, _T('.'));
m_bReg = bReg;
m_bOpen = bOpen;
//奼挘巕偺庢摼偵幐攕
if(!m_lpszExt) return (INT)FALSE;
//僂傿儞僪僂嶌惉
int rtn = DialogBox(m_hInst, (LPCTSTR)IDD_CHOOSE_DLG,
m_hparWnd, (DLGPROC)ChooseProc);
return rtn;
}
///////////////////////////////////////////////////////////////
void CAssociation::OnInitChoose()
{
#ifdef __POCKET_PC
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = m_hWnd;
SHInitDialog(&shidi);
#endif
//僂傿儞僪僂僞僀僩儖
TCHAR szBuf[MAX_PATH];
wsprintf(szBuf, IDS_TITLE_CHOOSEPROC, m_szName);
SetWindowText(m_hWnd, szBuf);
//僂傿儞僪僂弶婜壔
//僇儔儉僿僢僟偺嶌惉
RECT rc;
GetClientRect(m_hListView, &rc);
LVCOLUMN lvclm;
lvclm.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
lvclm.fmt = LVCFMT_LEFT;
lvclm.cx = rc.right - rc.left;
lvclm.pszText = _T("");
lvclm.cchTextMax = 0;
lvclm.iSubItem = 0;
ListView_InsertColumn(m_hListView, 0, &lvclm);
//娭楢晅偗僠僃僢僋愝掕
if(m_bReg)
{
HWND hChk = GetDlgItem(m_hWnd, IDC_CHK_ASSOCIATION);
SendMessage(hChk, BM_SETCHECK, (m_bReg?1:0), 0);
EnableWindow(hChk, FALSE);
}
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList();
//儕僗僩價儏乕愝掕
LoadAppList();
}
///////////////////////////////////////////////////////////////
void CAssociation::OnEndChoose()
{
//僀儊乕僕儕僗僩嶍彍
DeleteAppImageList();
//傾僾儕働乕僔儑儞儕僗僩嶍彍
DeleteAppList();
}
///////////////////////////////////////////////////////////////
void CAssociation::OnBrowseChoose()
{
//ADD START TODA (from GSFinder ver.1.99)
BOOL fRet;
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
*szFile = NULL;
//慖戰僟僀傾儘僌僆乕僾儞
memset(&(ofn), 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = IDS_OPEN_APP;
ofn.lpstrFilter = IDS_OPEN_APP_FILTER;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrInitialDir = g_MainWnd.m_szWindowsPath;
BOOL (*gsGetOpenFileName)(OPENFILENAME*) = NULL;
HINSTANCE hInst = LoadLibrary(_T("gsgetfile.dll"));
if (hInst) {
(FARPROC&)gsGetOpenFileName = GetProcAddress(hInst, _T("gsGetOpenFileName"));
}
if (gsGetOpenFileName)
fRet = gsGetOpenFileName(&ofn);
else
fRet = GetOpenFileName(&ofn);
if (hInst) FreeLibrary(hInst);
if (!fRet) return;
//ADD END
//傾僾儕働乕僔儑儞偺搊榐
if(!SetApplication(szFile)) return;
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList();
//儕僗僩價儏乕愝掕
LoadAppList(szFile);
return;
}
///////////////////////////////////////////////////////////////
void CAssociation::OnOKChoose()
{
//慖戰傾僀僥儉庢摼
APPLICATIONLIST *lpList = GetSelectItem(m_hListView, 0);
//傾僀僥儉偑尒偮偐傜側偄(僶僌)
if(!lpList) return;
//娭楢晅偗
if(IsDlgButtonChecked(m_hWnd, IDC_CHK_ASSOCIATION))
SetAssociation(lpList->lpszKeyName);
//僆乕僾儞僠僃僢僋(娭楢晅偗偺傒偺応崌偼僆乕僾儞偟側偄)
if(!m_bOpen) return;
//僆乕僾儞僼傽僀儖柤嶌惉
TCHAR szPath[MAX_PATH];
if(0!=wcslen(m_szCurrent))
wsprintf(szPath, _T("%s\\%s"), m_szCurrent, m_szName);
else
wsprintf(szPath, _T("\\%s"), m_szName);
//僷儔儊乕僞偺曇廤
TCHAR szBuf[MAX_PATH];
LPTSTR lpszTemp = wcsstr(lpList->lpszCommand, _T("%1"));
if(lpszTemp)
{
*(lpszTemp+1) = _T('s');
wsprintf(szBuf, lpList->lpszCommand, szPath);
}
else
wcscpy(szBuf, lpList->lpszCommand);
//傾僾儕働乕僔儑儞偺婲摦
SHELLEXECUTEINFO sei;
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = 0;
sei.hwnd = g_MainWnd.m_hWnd;
sei.lpVerb = _T("open");
sei.lpFile = lpList->lpszAppPath;
sei.lpParameters = szBuf;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOW;
sei.hInstApp = g_hInst;
ShellExecuteEx(&sei);
}
///////////////////////////////////////////////////////////////
void CAssociation::OnInitFiletype()
{
//僂傿儞僪僂弶婜壔
//儕僗僩價儏乕偺峴慖戰壔
ListView_SetExtendedListViewStyle(m_hListView2,
(ListView_GetExtendedListViewStyle(m_hListView2)|LVS_EX_FULLROWSELECT));
//僇儔儉僿僢僟偺嶌惉
RECT rc;
GetClientRect(m_hListView2, &rc);
LVCOLUMN lvclm;
lvclm.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
lvclm.fmt = LVCFMT_LEFT;
lvclm.cx = 80;
lvclm.pszText = IDS_COLUMN_OPT_EXT;
lvclm.cchTextMax = 0;
lvclm.iSubItem = 0;
ListView_InsertColumn(m_hListView2, 0, &lvclm);
lvclm.fmt = LVCFMT_LEFT;
lvclm.cx = rc.right - rc.left - 80;
lvclm.pszText = IDS_COLUMN_OPT_TYPE;
lvclm.cchTextMax = 1;
lvclm.iSubItem = 1;
ListView_InsertColumn(m_hListView2, 1, &lvclm);
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList2();
//儕僗僩價儏乕愝掕
LoadAppList2();
//儃僞儞愝掕
OnClickFiletype();
}
///////////////////////////////////////////////////////////////
void CAssociation::OnEndFiletype()
{
//僀儊乕僕儕僗僩嶍彍
DeleteAppImageList();
//傾僾儕働乕僔儑儞儕僗僩嶍彍
DeleteAppList();
}
///////////////////////////////////////////////////////////////
void CAssociation::OnClickFiletype()
{
if(ListView_GetSelectedCount(m_hListView2))
{
EnableWindow(GetDlgItem(m_hWnd, IDC_BTN_DEL), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_BTN_DETAIL), TRUE);
}
else
{
EnableWindow(GetDlgItem(m_hWnd, IDC_BTN_DEL), FALSE);
EnableWindow(GetDlgItem(m_hWnd, IDC_BTN_DETAIL), FALSE);
}
}
///////////////////////////////////////////////////////////////
void CAssociation::OnChangeFiletype(LPTSTR lpszExt)
{
TCHAR szExt[MAX_PATH];
if(lpszExt)
wcscpy(szExt, lpszExt);
else
{
//慖戰傾僀僥儉庢摼
APPLICATIONLIST *lpList = GetSelectItem(m_hListView2, 1);
//傾僀僥儉偑尒偮偐傜側偄(僶僌)
if(!lpList) return;
wsprintf(szExt, _T(".%s"), lpList->lpszExt);
}
//傾僾儕働乕僔儑儞慖戰僟僀傾儘僌嶌惉
CAssociation *pDlg = new CAssociation(m_hparWnd, m_hInst);
int nRtn = pDlg->OpenChoose(_T(""), szExt, TRUE, FALSE);
delete pDlg;
if(nRtn)
{
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList2();
//儕僗僩價儏乕愝掕
LoadAppList2();
}
}
////////////////////////////////////////////////////////////////
void CAssociation::OnColumnClick(NMLISTVIEW* lpnmlv)
{
m_nbSortRaise = !m_nbSortRaise;
switch(lpnmlv->iSubItem)
{
case 0:
ListView_SortItems(m_hListView2, SortFileExt, m_nbSortRaise);
break;
case 1:
ListView_SortItems(m_hListView2, SortAppName, m_nbSortRaise);
break;
}
}
///////////////////////////////////////////////////////////////
void CAssociation::OpenNewFiletype()
{
//僂傿儞僪僂嶌惉(奼挘巕偺庢摼)
int rtn = DialogBox(m_hInst, (LPCTSTR)IDD_NEW_FILETYPE_DLG,
m_hparWnd, (DLGPROC)NewFiletypeProc);
//惉岟偟偨応崌
if(rtn)
OnChangeFiletype(m_szNewFileType);
return;
}
///////////////////////////////////////////////////////////////
void CAssociation::OnInitNewFiletype(HWND hDlg)
{
//僂傿儞僪僂僞僀僩儖
SetWindowText(hDlg, IDS_TITLE_NEWFILETYPE);
//僼僅乕僇僗偺愝掕
SetFocus(GetDlgItem(hDlg, IDC_FITETYPE));
//擖椡僨乕僞奿擺椞堟偺弶婜壔
memset(m_szNewFileType, 0x00, sizeof(m_szNewFileType));
}
///////////////////////////////////////////////////////////////
BOOL CAssociation::OnOKNewFiletype(HWND hDlg)
{
//擖椡僨乕僞偺庢摼
TCHAR szBuf[MAX_PATH];
GetWindowText(GetDlgItem(hDlg, IDC_FITETYPE), szBuf, sizeof(szBuf));
//擖椡僨乕僞偺僠僃僢僋
if(!wcslen(szBuf)) return FALSE;
//擖椡僨乕僞偺奿擺
if(szBuf[0] == _T('.'))
wcscpy(m_szNewFileType, szBuf);
else
wsprintf(m_szNewFileType, _T(".%s"), szBuf);
return TRUE;
}
///////////////////////////////////////////////////////////////
void CAssociation::OpenDeleteFiletype()
{
//妋擣僟僀傾儘僌昞帵
if(IDNO==MessageBox(m_hWnd, IDS_MSG_DELFILETYPE, IDS_OPTION_FILETYPE, MB_YESNO|MB_ICONQUESTION))
return;
//慖戰傾僀僥儉庢摼
APPLICATIONLIST *lpList = GetSelectItem(m_hListView2, 0, FINDTYPE_EXT);
//傾僀僥儉偑尒偮偐傜側偄(僶僌)
if(!lpList) return;
//儗僕僗僩儕僉乕偺嶍彍
TCHAR szExt[MAX_PATH];
wsprintf(szExt, _T(".%s"), lpList->lpszExt);
if(DeleteSubKey(szExt))
{
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList2();
//儕僗僩價儏乕愝掕
LoadAppList2();
}
}
///////////////////////////////////////////////////////////////
void CAssociation::OpenDetailSetting()
{
//慖戰傾僀僥儉庢摼
APPLICATIONLIST *lpList = GetSelectItem(m_hListView2, 0, FINDTYPE_EXT);
//傾僀僥儉偑尒偮偐傜側偄(枹慖戰)
if(!lpList) return;
//僂傿儞僪僂嶌惉(奼挘巕偺庢摼)
int rtn = DialogBox(m_hInst, (LPCTSTR)IDD_DETAIL_DLG,
m_hparWnd, (DLGPROC)DetailFiletypeProc);
//惉岟偟偨応崌
if(rtn)
{
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList2();
//儕僗僩價儏乕愝掕
LoadAppList2();
}
return;
}
///////////////////////////////////////////////////////////////
void CAssociation::OnInitDetailSetting(HWND hDlg)
{
//慖戰傾僀僥儉庢摼
m_lpActiveList = GetSelectItem(m_hListView2, 0, FINDTYPE_EXT);
//傾僀僥儉偑尒偮偐傜側偄(枹慖戰)
if(!m_lpActiveList) return;
//僂傿儞僪僂僞僀僩儖
SetWindowText(hDlg, IDS_TITLE_DETAIL);
//奼挘巕
TCHAR szExt[MAX_PATH];
wsprintf(szExt, _T(".%s"), m_lpActiveList->lpszExt);
SetWindowText(GetDlgItem(hDlg, IDC_FITETYPE), szExt);
//傾僾儕働乕僔儑儞僷僗
SetWindowText(GetDlgItem(hDlg, IDC_APPPATH), m_lpActiveList->lpszAppPath);
//傾僾儕働乕僔儑儞柤
SetWindowText(GetDlgItem(hDlg, IDC_APPNAME), m_lpActiveList->lpszAppName);
//婲摦僷儔儊乕僞
SetWindowText(GetDlgItem(hDlg, IDC_COMMAND), m_lpActiveList->lpszCommand);
//僼僅乕僇僗偺愝掕
SetFocus(GetDlgItem(hDlg, IDC_COMMAND));
}
///////////////////////////////////////////////////////////////
void CAssociation::OnChangeDetailSetting(HWND hDlg)
{
TCHAR szExt[MAX_PATH];
wsprintf(szExt, _T(".%s"), m_lpActiveList->lpszExt);
//傾僾儕働乕僔儑儞慖戰僟僀傾儘僌嶌惉
CAssociation *pDlg = new CAssociation(m_hparWnd, m_hInst);
int nRtn = pDlg->OpenChoose(_T(""), szExt, TRUE, FALSE);
delete pDlg;
if(!nRtn) return;
//傾僾儕働乕僔儑儞儕僗僩嶌惉
CreateAppList2();
//傾僾儕働乕僔儑儞慖戰
m_lpActiveList = NULL;
APPLICATIONLIST *lpList = m_lpAppList;
for(int i=0; lpList; i++)
{
if(0==wcsicmp((szExt+1), lpList->lpszExt))
{
m_lpActiveList = lpList;
break;
}
lpList = lpList->lpNext;
}//End of for
//夋柺嵞愝掕
SetWindowText(GetDlgItem(hDlg, IDC_APPPATH), m_lpActiveList->lpszAppPath);
SetWindowText(GetDlgItem(hDlg, IDC_APPNAME), m_lpActiveList->lpszAppName);
SetWindowText(GetDlgItem(hDlg, IDC_COMMAND), m_lpActiveList->lpszCommand);
SetFocus(GetDlgItem(hDlg, IDC_COMMAND));
}
///////////////////////////////////////////////////////////////
BOOL CAssociation::OnOKDetailSetting(HWND hDlg)
{
//傾僾儕働乕僔儑儞柤庢摼
TCHAR szAppName[MAX_PATH];
GetWindowText(GetDlgItem(hDlg, IDC_APPNAME), szAppName, sizeof(szAppName));
//婲摦僷儔儊乕僞庢摼
TCHAR szCommand[MAX_PATH];
GetWindowText(GetDlgItem(hDlg, IDC_COMMAND), szCommand, sizeof(szCommand));
//僷儔儊乕僞擖椡晄惓偺応崌
if(0==wcslen(szAppName) || 0==wcslen(szCommand))
{
//夋柺嵞愝掕
SetWindowText(GetDlgItem(hDlg, IDC_APPNAME), m_lpActiveList->lpszAppName);
SetWindowText(GetDlgItem(hDlg, IDC_COMMAND), m_lpActiveList->lpszCommand);
SetFocus(GetDlgItem(hDlg, IDC_COMMAND));
//僄儔乕儊僢僙乕僕
MessageBox(m_hWnd, IDS_MSG_NOTFOUND_PATH, NULL, MB_OK|MB_ICONSTOP);
return FALSE;
}
//僷儔儊乕僞偺曄峏偑偁傞応崌
if((0!=wcscmp(szAppName, m_lpActiveList->lpszAppName)) ||
(0!=wcscmp(szCommand, m_lpActiveList->lpszCommand)))
//儗僕僗僩儕曄峏
SetApplication(m_lpActiveList->lpszAppPath, m_lpActiveList->lpszKeyName, szAppName, szCommand, m_lpActiveList->lpszIconPath, m_lpActiveList->nIconID);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -