📄 ismsgmanager.cpp
字号:
// ISMsgManager.cpp: implementation of the ISMsgManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ISMsgManager.h"
#include "ISMsgHandlers.h" // derived handlers
#include <afxpriv.h> // for MFC messages
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// static methods
BOOL CISMsgManager::HandleMsg(const MSG* pMsg, CString& sMsg, CStringArray* pParams)
{
ASSERT (AfxIsValidString(sMsg));
CISMsgHandler* pMsgHandler = GetInstance().GetHandler(pMsg->message);
if (!pMsgHandler || !pMsgHandler->HandleMsg(pMsg, sMsg, pParams))
{
if (pMsg->message > WM_APP)
sMsg.Format("WM_APP + %d", pMsg->message - WM_APP);
else
sMsg.Format("Unknown (%08x)", pMsg->message);
}
if (!pParams)
{
CString sTemp(sMsg);
sMsg.Format("%s: wp = %08x, lp = %08x", sTemp, pMsg->wParam, pMsg->lParam);
}
else if (!pParams->GetSize())
{
CISMsgHandler::AddParam(*pParams, "wp = %08x", pMsg->wParam);
CISMsgHandler::AddParam(*pParams, "lp = %08x", pMsg->lParam);
}
return TRUE;
}
// class methods
CISMsgManager::CISMsgManager()
{
CreateMessageMap();
}
CISMsgManager::~CISMsgManager()
{
DeleteMessageMap();
}
#define ADDHANDLER(msg) { AddHandler(msg, new CISMsgHandler(msg, #msg)); }
#define ADDHANDLEREX(msg, classtype) { AddHandler(msg, new classtype(msg, #msg)); }
void CISMsgManager::CreateMessageMap()
{
ADDHANDLER(WM_NULL);
ADDHANDLEREX(WM_CREATE, CISMH_Create);
ADDHANDLER(WM_DESTROY);
ADDHANDLER(WM_MOVE);
ADDHANDLER(0x0004/*WM_SIZEWAIT*/);
ADDHANDLER(WM_SIZE);
ADDHANDLER(WM_ACTIVATE);
ADDHANDLER(WM_SETFOCUS);
ADDHANDLER(WM_KILLFOCUS);
ADDHANDLER(0x0009/*WM_SETVISIBLE*/);
ADDHANDLER(WM_ENABLE);
ADDHANDLER(WM_SETREDRAW);
ADDHANDLER(WM_SETTEXT);
ADDHANDLER(WM_GETTEXT);
ADDHANDLER(WM_GETTEXTLENGTH);
ADDHANDLER(WM_PAINT);
ADDHANDLER(WM_CLOSE);
ADDHANDLER(WM_QUERYENDSESSION);
ADDHANDLER(WM_QUIT);
ADDHANDLER(WM_QUERYOPEN);
ADDHANDLER(WM_ERASEBKGND);
ADDHANDLER(WM_SYSCOLORCHANGE);
ADDHANDLER(WM_ENDSESSION);
ADDHANDLER(0x0017/*WM_SYSTEMERROR*/);
ADDHANDLER(WM_SHOWWINDOW);
ADDHANDLER(WM_CTLCOLOR);
ADDHANDLER(WM_WININICHANGE);
ADDHANDLER(WM_SETTINGCHANGE);
ADDHANDLER(WM_DEVMODECHANGE);
ADDHANDLER(WM_ACTIVATEAPP);
ADDHANDLER(WM_FONTCHANGE);
ADDHANDLER(WM_TIMECHANGE);
ADDHANDLER(WM_CANCELMODE);
ADDHANDLER(WM_SETCURSOR);
ADDHANDLER(WM_MOUSEACTIVATE);
ADDHANDLER(WM_CHILDACTIVATE);
ADDHANDLER(WM_QUEUESYNC);
ADDHANDLER(WM_GETMINMAXINFO);
ADDHANDLER(WM_PAINTICON);
ADDHANDLER(WM_ICONERASEBKGND);
ADDHANDLER(WM_NEXTDLGCTL);
ADDHANDLER(0x0029/*WM_ALTTABACTIVE*/);
ADDHANDLER(WM_SPOOLERSTATUS);
ADDHANDLER(WM_DRAWITEM);
ADDHANDLER(WM_MEASUREITEM);
ADDHANDLER(WM_DELETEITEM);
ADDHANDLER(WM_VKEYTOITEM);
ADDHANDLER(WM_CHARTOITEM);
ADDHANDLER(WM_SETFONT);
ADDHANDLER(WM_GETFONT);
ADDHANDLER(WM_SETHOTKEY);
ADDHANDLER(WM_GETHOTKEY);
ADDHANDLER(0x0034/*WM_FILESYSCHANGE*/);
ADDHANDLER(0x0035/*WM_ISACTIVEICON*/);
ADDHANDLER(0x0036/*WM_QUERYPARKICON*/);
ADDHANDLER(WM_QUERYDRAGICON);
ADDHANDLER(0x0038/*WM_QUERYSAVESTATE*/);
ADDHANDLER(WM_COMPAREITEM);
ADDHANDLER(0x003A/*WM_TESTING*/);
ADDHANDLER(0x003D/*WM_GETOBJECT*/);
ADDHANDLER(0x003E/*WM_ACTIVATESHELLWINDOW*/);
ADDHANDLER(WM_COMPACTING);
ADDHANDLER(0x0042/*WM_OTHERWINDOWCREATED*/);
ADDHANDLER(0x0043/*WM_OTHERWINDOWDESTROYED*/);
ADDHANDLER(WM_COMMNOTIFY);
ADDHANDLER(WM_WINDOWPOSCHANGING);
ADDHANDLER(WM_WINDOWPOSCHANGED);
ADDHANDLER(WM_POWER);
ADDHANDLER(WM_COPYDATA);
ADDHANDLER(WM_CANCELJOURNAL);
ADDHANDLER(WM_NOTIFY);
ADDHANDLER(WM_INPUTLANGCHANGEREQUEST);
ADDHANDLER(WM_INPUTLANGCHANGE);
ADDHANDLER(WM_TCARD);
ADDHANDLER(WM_HELP);
ADDHANDLER(WM_USERCHANGED);
ADDHANDLER(WM_NOTIFYFORMAT);
ADDHANDLER(WM_CONTEXTMENU);
ADDHANDLER(WM_STYLECHANGING);
ADDHANDLER(WM_STYLECHANGED);
ADDHANDLER(WM_DISPLAYCHANGE);
ADDHANDLER(WM_GETICON);
ADDHANDLER(WM_SETICON);
ADDHANDLEREX(WM_NCCREATE, CISMH_Create);
ADDHANDLER(WM_NCDESTROY);
ADDHANDLER(WM_NCCALCSIZE);
ADDHANDLER(WM_NCHITTEST);
ADDHANDLER(WM_NCPAINT);
ADDHANDLER(WM_NCACTIVATE);
ADDHANDLER(WM_GETDLGCODE);
ADDHANDLER(WM_SYNCPAINT);
ADDHANDLER(0x0089/*WM_SYNCTASK*/);
ADDHANDLER(WM_NCMOUSEMOVE);
ADDHANDLER(WM_NCLBUTTONDOWN);
ADDHANDLER(WM_NCLBUTTONUP);
ADDHANDLER(WM_NCLBUTTONDBLCLK);
ADDHANDLER(WM_NCRBUTTONDOWN);
ADDHANDLER(WM_NCRBUTTONUP);
ADDHANDLER(WM_NCRBUTTONDBLCLK);
ADDHANDLER(WM_NCMBUTTONDOWN);
ADDHANDLER(WM_NCMBUTTONUP);
ADDHANDLER(WM_NCMBUTTONDBLCLK);
ADDHANDLER(0x00AB/*WM_NCXBUTTONDOWN*/);
ADDHANDLER(0x00AD/*WM_NCXBUTTONUP*/);
ADDHANDLER(0x00AE/*WM_NCXBUTTONDBLCLK*/);
ADDHANDLER(WM_KEYFIRST);
ADDHANDLER(WM_KEYDOWN);
ADDHANDLER(WM_KEYUP);
ADDHANDLER(WM_CHAR);
ADDHANDLER(WM_DEADCHAR);
ADDHANDLER(WM_SYSKEYDOWN);
ADDHANDLER(WM_SYSKEYUP);
ADDHANDLER(WM_SYSCHAR);
ADDHANDLER(WM_SYSDEADCHAR);
ADDHANDLER(WM_KEYLAST);
ADDHANDLER(0x0109/*WM_WNT_CONVERTREQUESTEX*/);
ADDHANDLER(0x010A/*WM_CONVERTREQUEST*/);
ADDHANDLER(0x010B/*WM_CONVERTRESULT*/);
ADDHANDLER(0x010C/*WM_INTERIM*/);
ADDHANDLER(WM_IME_STARTCOMPOSITION);
ADDHANDLER(WM_IME_ENDCOMPOSITION);
ADDHANDLER(WM_IME_COMPOSITION);
ADDHANDLER(WM_IME_KEYLAST);
ADDHANDLER(WM_INITDIALOG);
ADDHANDLER(WM_COMMAND);
ADDHANDLER(WM_SYSCOMMAND);
ADDHANDLER(WM_TIMER);
ADDHANDLER(WM_HSCROLL);
ADDHANDLER(WM_VSCROLL);
ADDHANDLER(WM_INITMENU);
ADDHANDLER(WM_INITMENUPOPUP);
ADDHANDLER(WM_MENUSELECT);
ADDHANDLER(WM_MENUCHAR);
ADDHANDLER(WM_ENTERIDLE);
ADDHANDLER(0x0122/*WM_MENURBUTTONUP*/);
ADDHANDLER(0x0123/*WM_MENUDRAG*/);
ADDHANDLER(0x0124/*WM_MENUGETOBJECT*/);
ADDHANDLER(0x0125/*WM_UNINITMENUPOPUP*/);
ADDHANDLER(0x0126/*WM_MENUCOMMAND*/);
ADDHANDLER(0x0127/*WM_CHANGEUISTATE*/);
ADDHANDLER(0x0128/*WM_UPDATEUISTATE*/);
ADDHANDLER(0x0129/*WM_QUERYUISTATE*/);
ADDHANDLER(0x0131/*WM_LBTRACKPOINT*/);
ADDHANDLER(WM_CTLCOLORMSGBOX);
ADDHANDLER(WM_CTLCOLOREDIT);
ADDHANDLER(WM_CTLCOLORLISTBOX);
ADDHANDLER(WM_CTLCOLORBTN);
ADDHANDLER(WM_CTLCOLORDLG);
ADDHANDLER(WM_CTLCOLORSCROLLBAR);
ADDHANDLER(WM_CTLCOLORSTATIC);
ADDHANDLER(0x01E5/*WM_MENUCURRENTSEL*/);
// ADDHANDLER(WM_MOUSEFIRST);
ADDHANDLER(WM_MOUSEMOVE);
ADDHANDLER(WM_LBUTTONDOWN);
ADDHANDLER(WM_LBUTTONUP);
ADDHANDLER(WM_LBUTTONDBLCLK);
ADDHANDLER(WM_RBUTTONDOWN);
ADDHANDLER(WM_RBUTTONUP);
ADDHANDLER(WM_RBUTTONDBLCLK);
ADDHANDLER(WM_MBUTTONDOWN);
ADDHANDLER(WM_MBUTTONUP);
ADDHANDLER(WM_MBUTTONDBLCLK);
ADDHANDLER(WM_MOUSEWHEEL);
ADDHANDLER(0x020B/*WM_XBUTTONDOWN*/);
ADDHANDLER(0x020C/*WM_XBUTTONUP*/);
ADDHANDLER(0x020D/*WM_XBUTTONDBLCLK*/);
ADDHANDLER(WM_PARENTNOTIFY);
ADDHANDLER(WM_ENTERMENULOOP);
ADDHANDLER(WM_EXITMENULOOP);
ADDHANDLER(WM_NEXTMENU);
ADDHANDLER(WM_SIZING);
ADDHANDLER(WM_CAPTURECHANGED);
ADDHANDLER(WM_MOVING);
ADDHANDLER(WM_POWERBROADCAST);
ADDHANDLER(WM_DEVICECHANGE);
ADDHANDLER(WM_MDICREATE);
ADDHANDLER(WM_MDIDESTROY);
ADDHANDLER(WM_MDIACTIVATE);
ADDHANDLER(WM_MDIRESTORE);
ADDHANDLER(WM_MDINEXT);
ADDHANDLER(WM_MDIMAXIMIZE);
ADDHANDLER(WM_MDITILE);
ADDHANDLER(WM_MDICASCADE);
ADDHANDLER(WM_MDIICONARRANGE);
ADDHANDLER(WM_MDIGETACTIVE);
ADDHANDLER(0x022A/*WM_DROPOBJECT*/);
ADDHANDLER(0x022B/*WM_QUERYDROPOBJECT*/);
ADDHANDLER(0x022C/*WM_BEGINDRAG*/);
ADDHANDLER(0x022D/*WM_DRAGLOOP*/);
ADDHANDLER(0x022E/*WM_DRAGSELECT*/);
ADDHANDLER(0x022F/*WM_DRAGMOVE*/);
ADDHANDLER(WM_MDISETMENU);
ADDHANDLER(WM_ENTERSIZEMOVE);
ADDHANDLER(WM_EXITSIZEMOVE);
ADDHANDLER(WM_DROPFILES);
ADDHANDLER(WM_MDIREFRESHMENU);
ADDHANDLER(WM_IME_SETCONTEXT);
ADDHANDLER(WM_IME_NOTIFY);
ADDHANDLER(WM_IME_CONTROL);
ADDHANDLER(WM_IME_COMPOSITIONFULL);
ADDHANDLER(WM_IME_SELECT);
ADDHANDLER(WM_IME_CHAR);
ADDHANDLER(0x0288/*WM_IME_REQUEST*/);
ADDHANDLER(WM_IME_KEYDOWN);
ADDHANDLER(WM_IME_KEYUP);
ADDHANDLER(WM_MOUSEHOVER);
ADDHANDLER(WM_MOUSELEAVE);
ADDHANDLER(WM_CUT);
ADDHANDLER(WM_COPY);
ADDHANDLER(WM_PASTE);
ADDHANDLER(WM_CLEAR);
ADDHANDLER(WM_UNDO);
ADDHANDLER(WM_RENDERFORMAT);
ADDHANDLER(WM_RENDERALLFORMATS);
ADDHANDLER(WM_DESTROYCLIPBOARD);
ADDHANDLER(WM_DRAWCLIPBOARD);
ADDHANDLER(WM_PAINTCLIPBOARD);
ADDHANDLER(WM_VSCROLLCLIPBOARD);
ADDHANDLER(WM_SIZECLIPBOARD);
ADDHANDLER(WM_ASKCBFORMATNAME);
ADDHANDLER(WM_CHANGECBCHAIN);
ADDHANDLER(WM_HSCROLLCLIPBOARD);
ADDHANDLER(WM_QUERYNEWPALETTE);
ADDHANDLER(WM_PALETTEISCHANGING);
ADDHANDLER(WM_PALETTECHANGED);
ADDHANDLER(WM_HOTKEY);
ADDHANDLER(WM_PRINT);
ADDHANDLER(WM_PRINTCLIENT);
ADDHANDLER(WM_HANDHELDFIRST);
ADDHANDLER(WM_HANDHELDLAST);
ADDHANDLER(WM_AFXFIRST);
ADDHANDLER(WM_AFXLAST);
ADDHANDLER(WM_PENWINFIRST);
ADDHANDLER(0x0381/*WM_RCRESULT*/);
ADDHANDLER(0x0382/*WM_HOOKRCRESULT*/);
// ADDHANDLER(0x0383/*WM_PENMISCINFO*/);
ADDHANDLER(0x0383/*WM_GLOBALRCCHANGE*/);
ADDHANDLER(0x0384/*WM_SKB*/);
ADDHANDLER(0x0385/*WM_PENCTL*/);
// ADDHANDLER(0x0/*WM_HEDITCTL*/);
ADDHANDLER(0x0386/*WM_PENMISC*/);
ADDHANDLER(0x0387/*WM_CTLINIT*/);
ADDHANDLER(0x0388/*WM_PENEVENT*/);
ADDHANDLER(WM_PENWINLAST);
ADDHANDLER(WM_APP);
ADDHANDLER(WM_QUERYAFXWNDPROC);
ADDHANDLER(WM_SIZEPARENT);
ADDHANDLER(WM_SETMESSAGESTRING);
ADDHANDLER(WM_IDLEUPDATECMDUI);
ADDHANDLER(WM_INITIALUPDATE);
ADDHANDLER(WM_COMMANDHELP);
ADDHANDLER(WM_HELPHITTEST);
ADDHANDLER(WM_EXITHELPMODE);
ADDHANDLER(WM_RECALCPARENT);
ADDHANDLER(WM_SIZECHILD);
ADDHANDLER(WM_KICKIDLE);
ADDHANDLER(WM_QUERYCENTERWND);
ADDHANDLER(WM_DISABLEMODAL);
ADDHANDLER(WM_FLOATSTATUS);
ADDHANDLER(WM_ACTIVATETOPLEVEL);
ADDHANDLER(WM_QUERY3DCONTROLS);
ADDHANDLER(WM_SOCKET_NOTIFY);
ADDHANDLER(WM_SOCKET_DEAD);
ADDHANDLER(WM_POPMESSAGESTRING);
ADDHANDLER(WM_HELPPROMPTADDR);
ADDHANDLER(WM_FORWARDMSG);
}
BOOL CISMsgManager::AddHandler(UINT uMsg, CISMsgHandler* pMsgHandler)
{
// delete any existing handler
delete GetHandler(uMsg);
m_mapHandlers[uMsg] = pMsgHandler;
return TRUE;
}
CISMsgHandler* CISMsgManager::GetHandler(UINT uMsg)
{
CISMsgHandler* pHandler = NULL;
m_mapHandlers.Lookup(uMsg, pHandler);
return pHandler;
}
void CISMsgManager::DeleteMessageMap()
{
// iterate the map deleting as we go
POSITION pos = m_mapHandlers.GetStartPosition();
UINT uMsg;
CISMsgHandler* pHandler = NULL;
while (pos)
{
m_mapHandlers.GetNextAssoc(pos, uMsg, pHandler);
delete pHandler;
}
m_mapHandlers.RemoveAll();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -