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