📄 associatedlg.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 + -