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

📄 associatedlg.cpp

📁 所有压缩格式的压缩解压缩。
💻 CPP
字号:
// AssociateDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Compress.h"
#include "AssociateDlg.h"
#include <comdef.h>
#include <atlbase.h>

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

_COM_SMARTPTR_TYPEDEF(IShellLink,IID_IShellLink);	//用智能指针包装IShellLink接口

/////////////////////////////////////////////////////////////////////////////
// CAssociateDlg dialog

CAssociateDlg::CAssociateDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAssociateDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAssociateDlg)
	m_bDesktop = TRUE;
	m_bFile = TRUE;
	m_bFolder = TRUE;
	m_bGroup = TRUE;
	m_bStart = FALSE;
	//}}AFX_DATA_INIT
}


void CAssociateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAssociateDlg)
	DDX_Control(pDX, IDC_TYPE_LIST, m_TypeList);
	DDX_Check(pDX, IDC_CHECK_DESKTOP, m_bDesktop);
	DDX_Check(pDX, IDC_CHECK_FILE, m_bFile);
	DDX_Check(pDX, IDC_CHECK_FOLDER, m_bFolder);
	DDX_Check(pDX, IDC_CHECK_GROUP, m_bGroup);
	DDX_Check(pDX, IDC_CHECK_START, m_bStart);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAssociateDlg, CDialog)
	//{{AFX_MSG_MAP(CAssociateDlg)
	ON_BN_CLICKED(IDC_CHECK_ALL, OnCheckAll)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAssociateDlg message handlers

BOOL CAssociateDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	DWORD style=m_TypeList.GetExStyle();
	style|=LVS_EX_CHECKBOXES;
	m_TypeList.SetExtendedStyle(style);

	CLibManager *pLibmgr=THEAPP->m_pLibmgr;
	int i,n=pLibmgr->GetNoCDL();
	m_TypeList.InsertColumn(0,"扩展名",LVCFMT_LEFT,80);
	m_TypeList.InsertColumn(1,"类型名",LVCFMT_LEFT,100);
	for (i=0;i<n;i++)
	{
		m_TypeList.InsertItem(i,pLibmgr->GetCDLInfo(i)->szFileFilter);
		m_TypeList.SetItemText(i,1,pLibmgr->GetCDLInfo(i)->szFileType);
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CAssociateDlg::OnOK() 
{
	CDialog::OnOK();

	// TODO: Add extra validation here
	CreateShortCut();
	SetFileAssociate();
}

void CAssociateDlg::CreateShortCut()
{
	if (!m_bDesktop&&!m_bGroup&&!m_bStart) return;

	IShellLinkPtr psl;
	IPersistFilePtr ppf;
	HRESULT hr;

	hr=psl.CreateInstance(CLSID_ShellLink);
	if (hr!=S_OK)
	{
		CString out;
		out.Format("不能创建COM对象IShellLink, hr==0x%x",hr);
		MessageBox(out);
		return;
	}

	char PathName[MAX_PATH];
	CString LinkName;

	GetModuleFileName((HMODULE)THEAPP->m_hInstance,PathName,MAX_PATH);
	LinkName.LoadString(IDS_SHORTCUT_NAME);
	psl->SetPath(PathName);
	psl->SetDescription(LinkName);
	
	hr=psl->QueryInterface(IID_IPersistFile,(LPVOID*)&ppf);
	if (hr!=S_OK)
	{
		CString out;
		out.Format("找不到接口IPersistFile, hr==0x%x",hr);
		MessageBox(out);
		return;
	}

	if (m_bDesktop)
	{
		char DesktopPath[MAX_PATH];
		SHGetSpecialFolderPath(m_hWnd,DesktopPath,CSIDL_DESKTOP,0);
		lstrcat(DesktopPath,"\\");
		lstrcat(DesktopPath,LinkName);
		lstrcat(DesktopPath,".lnk");
		USES_CONVERSION;
		ppf->Save(A2W(DesktopPath),TRUE);
	}
	if (m_bStart)
	{
		char StartPath[MAX_PATH];
		SHGetSpecialFolderPath(m_hWnd,StartPath,CSIDL_STARTMENU,0);
		lstrcat(StartPath,"\\");
		lstrcat(StartPath,LinkName);
		lstrcat(StartPath,".lnk");
		USES_CONVERSION;
		ppf->Save(A2W(StartPath),TRUE);
	}
	if (m_bGroup)
	{
		CString GroupName;
		char GroupPath[MAX_PATH];
		GroupName.LoadString(IDS_PROGRAMS_GROUP_NAME);
		SHGetSpecialFolderPath(m_hWnd,GroupPath,CSIDL_PROGRAMS,0);
		lstrcat(GroupPath,"\\");
		lstrcat(GroupPath,GroupName);
		CreateDirectory(GroupPath,NULL);
		lstrcat(GroupPath,"\\");
		lstrcat(GroupPath,LinkName);
		lstrcat(GroupPath,".lnk");
		USES_CONVERSION;
		ppf->Save(A2W(GroupPath),TRUE);
	}
}

void CAssociateDlg::SetFileAssociate()
{
	int nItem,nItemCount,p1,p2;
	CRegKey rk;
	CString FileExt,FileType,DefaultIcon,Filter;
	CLibManager *pLibmgr=THEAPP->m_pLibmgr;

	char AppFileName[MAX_PATH];
	GetModuleFileName((HMODULE)THEAPP->m_hInstance,AppFileName,MAX_PATH);
	CString CmdLine(AppFileName);
	CmdLine+=" %1";

	nItemCount=m_TypeList.GetItemCount();
	for(nItem=0;nItem<nItemCount;nItem++)
	{
		if (!m_TypeList.GetCheck(nItem)) continue;

		FileType=pLibmgr->GetCDLInfo(nItem)->szFileType;
		Filter=pLibmgr->GetCDLInfo(nItem)->szFileFilter;
		DefaultIcon=pLibmgr->GetLibFileName(nItem);
		DefaultIcon+=",0";

		rk.Open(HKEY_CLASSES_ROOT,NULL);
		p1=Filter.Find("*.");
		while (p1>=0)
		{
			p1++;
			p2=Filter.Find(';',p1);
			if (p2<0) p2=Filter.GetLength();

			FileExt=Filter.Left(p2);
			FileExt.Delete(0,p1);
			rk.SetKeyValue(FileExt,FileType);
			p1=Filter.Find("*.",p2);
		}
		rk.Close();

		rk.Create(HKEY_CLASSES_ROOT,FileType);
		rk.SetValue(FileType);
		rk.SetKeyValue("DefaultIcon",DefaultIcon);
		rk.SetKeyValue("shell\\open\\command",CmdLine);
		rk.Close();
	}
}

void CAssociateDlg::OnCheckAll() 
{
	// TODO: Add your control notification handler code here
	m_bDesktop=TRUE;
	m_bFile=TRUE;
	m_bFolder=TRUE;
	m_bGroup=TRUE;
	m_bStart=TRUE;
	UpdateData(FALSE);

	int i=m_TypeList.GetItemCount();
	while(i--) m_TypeList.SetCheck(i);
}

⌨️ 快捷键说明

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