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

📄 association.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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 + -