//VCL消息列表,定义在VCL的controls单元
#define MAX_VCL_MESSAGE 81
static const char * const CMMessageNames[MAX_VCL_MESSAGE+1]={
"CM_ACTIVATE",
"CM_DEACTIVATE",
"CM_GOTFOCUS",
"CM_LOSTFOCUS",
"CM_CANCELMODE",
"CM_DIALOGKEY",
"CM_DIALOGCHAR",
"CM_FOCUSCHANGED",
"CM_PARENTFONTCHANGED",
"CM_PARENTCOLORCHANGED",
"CM_HITTEST",
"CM_VISIBLECHANGED",
"CM_ENABLEDCHANGED",
"CM_COLORCHANGED",
"CM_FONTCHANGED",
"CM_CURSORCHANGED",
"CM_CTL3DCHANGED",
"CM_PARENTCTL3DCHANGED",
"CM_TEXTCHANGED",
"CM_MOUSEENTER",
"CM_MOUSELEAVE",
"CM_MENUCHANGED",
"CM_APPKEYDOWN",
"CM_APPSYSCOMMAND",
"CM_BUTTONPRESSED",
"CM_SHOWINGCHANGED",
"CM_ENTER",
"CM_EXIT",
"CM_DESIGNHITTEST",
"CM_ICONCHANGED",
"CM_WANTSPECIALKEY",
"CM_INVOKEHELP",
"CM_WINDOWHOOK",
"CM_RELEASE",
"CM_SHOWHINTCHANGED",
"CM_PARENTSHOWHINTCHANGED",
"CM_SYSCOLORCHANGE",
"CM_WININICHANGE",
"CM_FONTCHANGE",
"CM_TIMECHANGE",
"CM_TABSTOPCHANGED",
"CM_UIACTIVATE",
"CM_UIDEACTIVATE",
"CM_DOCWINDOWACTIVATE",
"CM_CONTROLLISTCHANGE",
"CM_GETDATALINK",
"CM_CHILDKEY",
"CM_DRAG",
"CM_HINTSHOW",
"CM_DIALOGHANDLE",
"CM_ISTOOLCONTROL",
"CM_RECREATEWND",
"CM_INVALIDATE",
"CM_SYSFONTCHANGED",
"CM_CONTROLCHANGE",
"CM_CHANGED",
"CM_DOCKCLIENT",
"CM_UNDOCKCLIENT",
"CM_FLOAT",
"CM_BORDERCHANGED",
"CM_BIDIMODECHANGED",
"CM_PARENTBIDIMODECHANGED",
"CM_ALLCHILDRENFLIPPED",
"CM_ACTIONUPDATE",
"CM_ACTIONEXECUTE",
"CM_HINTSHOWPAUSE",
"CM_DOCKNOTIFICATION",
"CM_MOUSEWHEEL",
"CM_ISSHORTCUT",
"CM_UPDATEACTIONS",
"CM_INVALIDATEDOCKHOST",
"CM_SETACTIVECONTROL",
"CM_POPUPHWNDDESTROY",
"CM_CREATEPOPUP",
"CM_DESTROYHANDLE",
"CM_MOUSEACTIVATE",
"CM_CONTROLLISTCHANGING",
"CM_BUFFEREDPRINTCLIENT",
"CM_UNTHEMECONTROL",
"CM_DOUBLEBUFFEREDCHANGED",
"CM_PARENTDOUBLEBUFFEREDCHANGED",
"CM_THEMECHANGED"
};
String __fastcall MessageName(UINT msg)
{
String RetVal;
if (msg <= WM_USER)
{
RetVal = MessageTypeNames[msg];
}
else
{
if (msg >= CM_BASE)
{
if (msg <= CM_BASE + MAX_VCL_MESSAGE)
{
RetVal = CMMessageNames[msg - CM_BASE];
}
else if (msg - CN_BASE < WM_USER)
{
RetVal = "CN" + String(MessageTypeNames[msg - CN_BASE]).SubString(3, 255);
}
}
}
if (RetVal.Length() == 0)
{
char AName[256];
if (GetClipboardFormatName(msg, AName, 255))
//获取通过RegisterWindowMessage定义的消息的名称
{
RetVal = AName;
}
else
{
if (msg >= WM_APP)
{
RetVal = "WM_APP+" + IntToStr(msg - WM_APP) + "(0x" + IntToHex((int)(msg - WM_APP), 4) + ")";
}
else
{
RetVal = "WM_USER+" + IntToStr(msg - WM_USER) + "(0x" + IntToHex((int)(msg - WM_USER), 4) + ")";
}
}
}
return RetVal.Length() ? RetVal : String("(Unknown)"); //如果消息名称仍未知,那就是一个可能未知的新消息了
}