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

📄 mmxshell2.cpp

📁 类似 windows explorer的工具
💻 CPP
字号:
// MMXShell2.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "MMXShell2.h"

#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMMXShell2App

// 初始化静态成员
CImageList CMMXShell2App::m_ImgList;
CImageList CMMXShell2App::m_ImgBigList;

HWND CMMXShell2App::m_hWndMMXDetect = NULL;

BEGIN_MESSAGE_MAP(CMMXShell2App, CWinApp)
	//{{AFX_MSG_MAP(CMMXShell2App)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMMXShell2App construction

CMMXShell2App::CMMXShell2App()
{
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CMMXShell2App object

CMMXShell2App theApp;

/////////////////////////////////////////////////////////////////////////////
// CMMXShell2App initialization

BOOL CMMXShell2App::InitInstance()
{
    /*
    // 查找 MMXDetect 窗口,如果没有找到,程序退出。
    m_hWndMMXDetect = ::FindWindow("TfrmMMXDetect",NULL);
    
    if (m_hWndMMXDetect == NULL)
    {
        //OutputDebugString("[MMXShell] Can't found Detect");
//#ifdef _DEBUG
        ::MessageBox(NULL,"MMXGuard 没有开始保护。",MAINFORMCAPTION,
            MB_OK | MB_ICONERROR| MB_TASKMODAL);
//#endif //_DEBUG
        return FALSE;
    }
    */

    CHAR szMutexName[] = "iSoft_MMXSHELL_ATOM1";
    g_GlobeRestoreMsg = RegisterWindowMessage(szMutexName);
    
    //
    //Register ATOM
    //
    HANDLE hMutex = CreateMutex(NULL,FALSE,szMutexName);
    
    if (hMutex == NULL)
    {
        return FALSE;
    }
    else if(ERROR_ALREADY_EXISTS == ::GetLastError())
    {
        //
        // Restore the exist instance...
        //
        OutputDebugString("[MMXShell] Already run.");

        ::SendMessage(HWND_BROADCAST,
			g_GlobeRestoreMsg,
			-1,       //Restore
			0);
        CloseHandle(hMutex);
        return FALSE;
    }

    if (!AfxOleInit())
	{
		AfxMessageBox(_T("COM Failed to initialize"));
		return FALSE;
	}
    
    // 取得系统图象列表
    GetSystemImageList(&m_ImgList,&m_ImgBigList);

//---------------------------------------------------------------------------
    AfxEnableControlContainer();

	// Standard initialization

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	// Change the registry key under which our settings are stored.
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));



	CMainFrame* pFrame = new CMainFrame;
	m_pMainWnd = pFrame;

	// create and load the frame with its resources

	pFrame->LoadFrame(IDR_MAINFRAME,
		WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
		NULL);

    // 改变主窗口图标(本来不需要这样做,但不知为何主窗口图标就是不对!)
    HICON hIcon;
    
    hIcon = LoadIcon(IDR_MAINFRAME);
    pFrame->SendMessage(WM_SETICON, TRUE, (LPARAM)hIcon);

    m_nCmdShow = SW_SHOWMAXIMIZED; // 一启动就最大化
    pFrame->ShowWindow(m_nCmdShow);
	pFrame->UpdateWindow();

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMMXShell2App message handlers





/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
		// No message handlers
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CMMXShell2App::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CMMXShell2App message handlers

//取得系统图像列表
void CMMXShell2App::GetSystemImageList(CImageList * pSmallList, CImageList * pLargeList)
{
    LPITEMIDLIST    pidl;
    SHFILEINFO  ssfi, lsfi;

    if (FAILED(::SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl)))
    {
        return;
    }

    if (pSmallList != NULL)
    {
        HIMAGELIST hSystemSmallImageList = (HIMAGELIST)
            ::SHGetFileInfo((LPCTSTR)pidl, 0, &ssfi,
            sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_PIDL); 
        pSmallList->Attach(hSystemSmallImageList);
    }
    
    if (pLargeList != NULL)
    {
        HIMAGELIST hSystemLargeImageList =(HIMAGELIST)
            ::SHGetFileInfo((LPCTSTR)pidl, 0,&lsfi,
            sizeof(SHFILEINFO),	SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_PIDL); 
        pLargeList->Attach(hSystemLargeImageList); 
    }
    
}
/*
//取得图标索引
//Type: 0普通图标 1打开图标
int CMMXShell2App::GetIconIndex(LPITEMIDLIST pidl,int Type)
{
    SHFILEINFO    sfi;
    DWORD style;

    if(Type==0)
        style=SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_PIDL ;
    else
        style=SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON | SHGFI_PIDL;
    
    ::SHGetFileInfo((LPCTSTR)pidl, 0, &sfi,	sizeof(SHFILEINFO), style);
    
    return sfi.iIcon;
}

*/

//分离字符串到数组sary
//cSper分隔符号
//返回元素个数
//SplitString("abc@21cn.com ; T126",sary,';'); 返回2
UINT CMMXShell2App::SplitString(const CString sSour
						  , CStringArray &sary,const CString sSper)
{
	int nPos;
	int nSize = sSper.GetLength(); // 分隔符长度
	int nStart = 0;
	UINT nCount = 0;
	CString sTmp;

	sary.RemoveAll();
	if (sSour.IsEmpty())
    {
        return 0;
    }
	
    nPos = sSour.Find(sSper,0);
	while (nPos > -1)
	{
		sTmp = sSour.Mid(nStart,nPos-nStart);
		sary.Add(sTmp);
		nStart = nPos + nSize;
		nPos = sSour.Find(sSper,nStart);
		nCount++;
	}
	
    // 最后一个元素
	sTmp = sSour.Mid(nStart);
	sary.Add(sTmp);
	nCount++;

	return nCount;
}

// 装入位图到图像列表中,制作24位真彩色工具栏
void CMMXShell2App::MakeToolbarImageList (UINT inBitmapID,CImageList& outImageList)
{
    HINSTANCE hInst;

    hInst = ::AfxFindResourceHandle(MAKEINTRESOURCE (inBitmapID), RT_BITMAP);
    HANDLE hImg = ::LoadImage(hInst, MAKEINTRESOURCE (inBitmapID),
        IMAGE_BITMAP, 0, 0,
        (LR_DEFAULTSIZE | LR_CREATEDIBSECTION));

    CBitmap		bmp;

    bmp.Attach(hImg);
    outImageList.Create(TOOLBAR_W, TOOLBAR_H, ILC_COLOR24 | ILC_MASK, 7, 0);
    
    // RGB(192,192,192)是Windows的按扭颜色
    outImageList.Add(&bmp, RGB (192, 192, 192));
    //outImageList.Detach();
    bmp.Detach();
}

⌨️ 快捷键说明

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