I could not find anything like this so I wrote it myself:
This class translates most Windows message ids into their symbolic name.
type
  TWmMessageToString = class
    function MsgToString(const _WmMsg: Cardinal): string; overload;
    function MsgToString(const _Msg: TMessage): string; overload;
  end;
The names are taken from
- Delphi 2010’s messages.pas
 - Delphi 2010’s controls.pas
 - Wine
 
It seems pretty complete, but if a message cannot be found, the MsgToString methods return its hexadecimal and decimal representation.
The code is part of my dzlib its the u_dzWmMessageToString unit.