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

📄 changeicondlg.cpp

📁 《Visual C++编程技巧典型案例解析:基础与应用篇(下)(含1CD-ROM)——编程技巧典型案例集锦系列》源码
💻 CPP
字号:
// ChangeIconDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ChangeIconDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CChangeIconDlg dialog


CChangeIconDlg::CChangeIconDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CChangeIconDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChangeIconDlg)
	m_strFileName = _T("");
	//}}AFX_DATA_INIT
}


void CChangeIconDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChangeIconDlg)
	DDX_Text(pDX, IDC_EDITBOX_FILENAME, m_strFileName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChangeIconDlg, CDialog)
	//{{AFX_MSG_MAP(CChangeIconDlg)
	ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
	ON_EN_UPDATE(IDC_EDITBOX_FILENAME, OnUpdateEditboxFilename)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChangeIconDlg message handlers

BOOL CChangeIconDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	char* s=new char[40];
	GetWindowsDirectory(s,40);
	lpszPath=s;
	lpszPath+="\\System\\Shell32.dll";
	bAccord=FALSE;
	if(m_strFileName=="")
	{
		m_strFileName=lpszPath;
		m_nIndex=0;
	}
	UpdateData(FALSE);
	VERIFY(m_listboxIcon.SubclassDlgItem(IDC_LISTBOX_ICON, this));
	CRect rect;
	m_listboxIcon.GetWindowRect(rect);
	ScreenToClient(rect);
	rect.bottom+=GetSystemMetrics(SM_CXHSCROLL)-13;
	m_listboxIcon.MoveWindow(rect,TRUE);
	m_listboxIcon.SetColumnWidth(37);
	m_listboxIcon.SetItemHeight(0,45);
	HICON hIcon;
	int i=0;
	do
	{	
		hIcon=ExtractIcon(AfxGetApp()->m_hInstance,m_strFileName,i++);
		if(hIcon!=NULL)
		{
			if(m_nIndex<0)
				m_nIndex=0;
			m_listboxIcon.AddIconItem(hIcon,m_nIndex);
		}
	}while(hIcon!=NULL);
	m_listboxIcon.SetCurSel(m_nIndex);
	bAccord=TRUE;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CChangeIconDlg::OnButtonBrowse() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); 
	CString strDir=m_strFileName;
	strDir.MakeReverse();
	strDir.Delete(0,strDir.Find('\\')+1);
	strDir.MakeReverse();
	LPCTSTR szFilter="图标文件|*.dll;*.exe;*.ico|程序|*exe|库|*.dll|图标|*.ico|所有文件|*.*||";
	CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
	FileDlg.m_ofn.lpstrTitle="更改图标";
	FileDlg.m_ofn.lpstrInitialDir=strDir;
	if(FileDlg.DoModal()==IDOK)
		m_strFileName=FileDlg.GetPathName();
	UpdateData(FALSE);
	ShowIcon();

}

void CChangeIconDlg::ShowIcon()
{
	int i=0;
	HICON hIcon;
	UpdateData(FALSE);
	m_listboxIcon.ResetContent();
	do
	{
		hIcon=ExtractIcon(AfxGetApp()->m_hInstance,m_strFileName,i++);
		if(hIcon==NULL&&i==1)
		{
			MessageBox("该文件中不包含图标!",NULL,MB_OK|MB_ICONEXCLAMATION);
			m_strFileName=lpszPath;
			i=0;
			hIcon=ExtractIcon(AfxGetApp()->m_hInstance,m_strFileName,i++);
			UpdateData(FALSE);
		}
		if(hIcon!=NULL)
		{
			m_listboxIcon.AddIconItem(hIcon,0);
		}
	}while(hIcon!=NULL);
	m_listboxIcon.SetCurSel(m_nIndex);
	bAccord=TRUE;
}

void CChangeIconDlg::OnOK() 
{
	// TODO: Add extra validation here
	m_nIndex=m_listboxIcon.nSelect;
	if(bAccord==FALSE)
	{
		UpdateData(TRUE);
		WIN32_FIND_DATA FindFileData;
		if(FindFirstFile(m_strFileName,&FindFileData)==INVALID_HANDLE_VALUE)
		{
			MessageBox("未找到该文件!");
			m_strFileName=lpszPath;
			m_nIndex=0;
			UpdateData(FALSE);
		}
		UpdateData(TRUE);
		ShowIcon();
		return;
	}
	CDialog::OnOK();
}

void CChangeIconDlg::OnUpdateEditboxFilename() 
{
	bAccord=FALSE;
}

⌨️ 快捷键说明

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