added a function to translate WM_ messages to text, for debugging

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1608 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2013-04-06 10:15:53 +00:00
parent 9e4fc43b36
commit c16016e9fa

View File

@ -62,6 +62,389 @@ GXOPENINPUT GXOpenInput_ = NULL;
struct GXKeyList gxKeyList; struct GXKeyList gxKeyList;
#endif /* _WIN32_WCE */ #endif /* _WIN32_WCE */
#ifdef _DEBUG
/*
* WM_ message to string, for debugging
* This is taken from the 8.0 SDK, so Windows 8 API and everything earlier is included
*/
struct WM_MESSAGE_MAP
{
UINT nMsg;
LPCSTR lpszMsg;
};
#define DEFINE_MESSAGE(wm){ wm, #wm }
static struct WM_MESSAGE_MAP allMessages[] =
{
DEFINE_MESSAGE(WM_NULL),
DEFINE_MESSAGE(WM_CREATE),
DEFINE_MESSAGE(WM_DESTROY),
DEFINE_MESSAGE(WM_MOVE),
DEFINE_MESSAGE(WM_SIZE),
DEFINE_MESSAGE(WM_ACTIVATE),
DEFINE_MESSAGE(WM_SETFOCUS),
DEFINE_MESSAGE(WM_KILLFOCUS),
DEFINE_MESSAGE(WM_ENABLE),
DEFINE_MESSAGE(WM_SETREDRAW),
DEFINE_MESSAGE(WM_SETTEXT),
DEFINE_MESSAGE(WM_GETTEXT),
DEFINE_MESSAGE(WM_GETTEXTLENGTH),
DEFINE_MESSAGE(WM_PAINT),
DEFINE_MESSAGE(WM_CLOSE),
# ifndef _WIN32_WCE
DEFINE_MESSAGE(WM_QUERYENDSESSION),
DEFINE_MESSAGE(WM_QUERYOPEN),
DEFINE_MESSAGE(WM_ENDSESSION),
# endif
DEFINE_MESSAGE(WM_QUIT),
DEFINE_MESSAGE(WM_ERASEBKGND),
DEFINE_MESSAGE(WM_SYSCOLORCHANGE),
DEFINE_MESSAGE(WM_SHOWWINDOW),
DEFINE_MESSAGE(WM_WININICHANGE),
DEFINE_MESSAGE(WM_DEVMODECHANGE),
DEFINE_MESSAGE(WM_ACTIVATEAPP),
DEFINE_MESSAGE(WM_FONTCHANGE),
DEFINE_MESSAGE(WM_TIMECHANGE),
DEFINE_MESSAGE(WM_CANCELMODE),
DEFINE_MESSAGE(WM_SETCURSOR),
DEFINE_MESSAGE(WM_MOUSEACTIVATE),
DEFINE_MESSAGE(WM_CHILDACTIVATE),
DEFINE_MESSAGE(WM_QUEUESYNC),
DEFINE_MESSAGE(WM_GETMINMAXINFO),
DEFINE_MESSAGE(WM_PAINTICON),
DEFINE_MESSAGE(WM_ICONERASEBKGND),
DEFINE_MESSAGE(WM_NEXTDLGCTL),
DEFINE_MESSAGE(WM_SPOOLERSTATUS),
DEFINE_MESSAGE(WM_DRAWITEM),
DEFINE_MESSAGE(WM_MEASUREITEM),
DEFINE_MESSAGE(WM_DELETEITEM),
DEFINE_MESSAGE(WM_VKEYTOITEM),
DEFINE_MESSAGE(WM_CHARTOITEM),
DEFINE_MESSAGE(WM_SETFONT),
DEFINE_MESSAGE(WM_GETFONT),
DEFINE_MESSAGE(WM_SETHOTKEY),
DEFINE_MESSAGE(WM_GETHOTKEY),
DEFINE_MESSAGE(WM_QUERYDRAGICON),
DEFINE_MESSAGE(WM_COMPAREITEM),
# if(WINVER >= 0x0500)
# ifndef _WIN32_WCE
DEFINE_MESSAGE(WM_GETOBJECT),
# endif
# endif /* WINVER >= 0x0500 */
DEFINE_MESSAGE(WM_COMPACTING),
DEFINE_MESSAGE(WM_COMMNOTIFY),
DEFINE_MESSAGE(WM_WINDOWPOSCHANGING),
DEFINE_MESSAGE(WM_WINDOWPOSCHANGED),
DEFINE_MESSAGE(WM_POWER),
DEFINE_MESSAGE(WM_COPYDATA),
DEFINE_MESSAGE(WM_CANCELJOURNAL),
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_NOTIFY),
DEFINE_MESSAGE(WM_INPUTLANGCHANGEREQUEST),
DEFINE_MESSAGE(WM_INPUTLANGCHANGE),
DEFINE_MESSAGE(WM_TCARD),
DEFINE_MESSAGE(WM_HELP),
DEFINE_MESSAGE(WM_USERCHANGED),
DEFINE_MESSAGE(WM_NOTIFYFORMAT),
DEFINE_MESSAGE(WM_CONTEXTMENU),
DEFINE_MESSAGE(WM_STYLECHANGING),
DEFINE_MESSAGE(WM_STYLECHANGED),
DEFINE_MESSAGE(WM_DISPLAYCHANGE),
DEFINE_MESSAGE(WM_GETICON),
DEFINE_MESSAGE(WM_SETICON),
# endif /* WINVER >= 0x0400 */
DEFINE_MESSAGE(WM_NCCREATE),
DEFINE_MESSAGE(WM_NCDESTROY),
DEFINE_MESSAGE(WM_NCCALCSIZE),
DEFINE_MESSAGE(WM_NCHITTEST),
DEFINE_MESSAGE(WM_NCPAINT),
DEFINE_MESSAGE(WM_NCACTIVATE),
DEFINE_MESSAGE(WM_GETDLGCODE),
# ifndef _WIN32_WCE
DEFINE_MESSAGE(WM_SYNCPAINT),
# endif
DEFINE_MESSAGE(WM_NCMOUSEMOVE),
DEFINE_MESSAGE(WM_NCLBUTTONDOWN),
DEFINE_MESSAGE(WM_NCLBUTTONUP),
DEFINE_MESSAGE(WM_NCLBUTTONDBLCLK),
DEFINE_MESSAGE(WM_NCRBUTTONDOWN),
DEFINE_MESSAGE(WM_NCRBUTTONUP),
DEFINE_MESSAGE(WM_NCRBUTTONDBLCLK),
DEFINE_MESSAGE(WM_NCMBUTTONDOWN),
DEFINE_MESSAGE(WM_NCMBUTTONUP),
DEFINE_MESSAGE(WM_NCMBUTTONDBLCLK),
# if(_WIN32_WINNT >= 0x0500)
DEFINE_MESSAGE(WM_NCXBUTTONDOWN),
DEFINE_MESSAGE(WM_NCXBUTTONUP),
DEFINE_MESSAGE(WM_NCXBUTTONDBLCLK),
# endif /* _WIN32_WINNT >= 0x0500 */
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_INPUT_DEVICE_CHANGE),
# endif /* _WIN32_WINNT >= 0x0501 */
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_INPUT),
# endif /* _WIN32_WINNT >= 0x0501 */
DEFINE_MESSAGE(WM_KEYDOWN),
DEFINE_MESSAGE(WM_KEYUP),
DEFINE_MESSAGE(WM_CHAR),
DEFINE_MESSAGE(WM_DEADCHAR),
DEFINE_MESSAGE(WM_SYSKEYDOWN),
DEFINE_MESSAGE(WM_SYSKEYUP),
DEFINE_MESSAGE(WM_SYSCHAR),
DEFINE_MESSAGE(WM_SYSDEADCHAR),
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_UNICHAR),
# endif /* _WIN32_WINNT >= 0x0501 */
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_IME_STARTCOMPOSITION),
DEFINE_MESSAGE(WM_IME_ENDCOMPOSITION),
DEFINE_MESSAGE(WM_IME_COMPOSITION),
DEFINE_MESSAGE(WM_IME_KEYLAST),
# endif /* WINVER >= 0x0400 */
DEFINE_MESSAGE(WM_INITDIALOG),
DEFINE_MESSAGE(WM_COMMAND),
DEFINE_MESSAGE(WM_SYSCOMMAND),
DEFINE_MESSAGE(WM_TIMER),
DEFINE_MESSAGE(WM_HSCROLL),
DEFINE_MESSAGE(WM_VSCROLL),
DEFINE_MESSAGE(WM_INITMENU),
DEFINE_MESSAGE(WM_INITMENUPOPUP),
# if(WINVER >= 0x0601)
DEFINE_MESSAGE(WM_GESTURE),
DEFINE_MESSAGE(WM_GESTURENOTIFY),
# endif /* WINVER >= 0x0601 */
DEFINE_MESSAGE(WM_MENUSELECT),
DEFINE_MESSAGE(WM_MENUCHAR),
DEFINE_MESSAGE(WM_ENTERIDLE),
# if(WINVER >= 0x0500)
# ifndef _WIN32_WCE
DEFINE_MESSAGE(WM_MENURBUTTONUP),
DEFINE_MESSAGE(WM_MENUDRAG),
DEFINE_MESSAGE(WM_MENUGETOBJECT),
DEFINE_MESSAGE(WM_UNINITMENUPOPUP),
DEFINE_MESSAGE(WM_MENUCOMMAND),
# if(_WIN32_WINNT >= 0x0500)
DEFINE_MESSAGE(WM_CHANGEUISTATE),
DEFINE_MESSAGE(WM_UPDATEUISTATE),
DEFINE_MESSAGE(WM_QUERYUISTATE),
# endif /* _WIN32_WINNT >= 0x0500 */
# endif
# endif /* WINVER >= 0x0500 */
DEFINE_MESSAGE(WM_CTLCOLORMSGBOX),
DEFINE_MESSAGE(WM_CTLCOLOREDIT),
DEFINE_MESSAGE(WM_CTLCOLORLISTBOX),
DEFINE_MESSAGE(WM_CTLCOLORBTN),
DEFINE_MESSAGE(WM_CTLCOLORDLG),
DEFINE_MESSAGE(WM_CTLCOLORSCROLLBAR),
DEFINE_MESSAGE(WM_CTLCOLORSTATIC),
# define MN_GETHMENU 0x01E1
DEFINE_MESSAGE(WM_MOUSEMOVE),
DEFINE_MESSAGE(WM_LBUTTONDOWN),
DEFINE_MESSAGE(WM_LBUTTONUP),
DEFINE_MESSAGE(WM_LBUTTONDBLCLK),
DEFINE_MESSAGE(WM_RBUTTONDOWN),
DEFINE_MESSAGE(WM_RBUTTONUP),
DEFINE_MESSAGE(WM_RBUTTONDBLCLK),
DEFINE_MESSAGE(WM_MBUTTONDOWN),
DEFINE_MESSAGE(WM_MBUTTONUP),
DEFINE_MESSAGE(WM_MBUTTONDBLCLK),
# if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
DEFINE_MESSAGE(WM_MOUSEWHEEL),
# endif
# if (_WIN32_WINNT >= 0x0500)
DEFINE_MESSAGE(WM_XBUTTONDOWN),
DEFINE_MESSAGE(WM_XBUTTONUP),
DEFINE_MESSAGE(WM_XBUTTONDBLCLK),
# endif
# if (_WIN32_WINNT >= 0x0600)
DEFINE_MESSAGE(WM_MOUSEHWHEEL),
# endif
DEFINE_MESSAGE(WM_PARENTNOTIFY),
DEFINE_MESSAGE(WM_ENTERMENULOOP),
DEFINE_MESSAGE(WM_EXITMENULOOP),
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_NEXTMENU),
DEFINE_MESSAGE(WM_SIZING),
DEFINE_MESSAGE(WM_CAPTURECHANGED),
DEFINE_MESSAGE(WM_MOVING),
# endif /* WINVER >= 0x0400 */
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_POWERBROADCAST),
DEFINE_MESSAGE(WM_DEVICECHANGE),
# endif /* WINVER >= 0x0400 */
DEFINE_MESSAGE(WM_MDICREATE),
DEFINE_MESSAGE(WM_MDIDESTROY),
DEFINE_MESSAGE(WM_MDIACTIVATE),
DEFINE_MESSAGE(WM_MDIRESTORE),
DEFINE_MESSAGE(WM_MDINEXT),
DEFINE_MESSAGE(WM_MDIMAXIMIZE),
DEFINE_MESSAGE(WM_MDITILE),
DEFINE_MESSAGE(WM_MDICASCADE),
DEFINE_MESSAGE(WM_MDIICONARRANGE),
DEFINE_MESSAGE(WM_MDIGETACTIVE),
DEFINE_MESSAGE(WM_MDISETMENU),
DEFINE_MESSAGE(WM_ENTERSIZEMOVE),
DEFINE_MESSAGE(WM_EXITSIZEMOVE),
DEFINE_MESSAGE(WM_DROPFILES),
DEFINE_MESSAGE(WM_MDIREFRESHMENU),
# if(WINVER >= 0x0602)
DEFINE_MESSAGE(WM_POINTERDEVICECHANGE),
DEFINE_MESSAGE(WM_POINTERDEVICEINRANGE),
DEFINE_MESSAGE(WM_POINTERDEVICEOUTOFRANGE),
# endif /* WINVER >= 0x0602 */
# if(WINVER >= 0x0601)
DEFINE_MESSAGE(WM_TOUCH),
# endif /* WINVER >= 0x0601 */
# if(WINVER >= 0x0602)
DEFINE_MESSAGE(WM_NCPOINTERUPDATE),
DEFINE_MESSAGE(WM_NCPOINTERDOWN),
DEFINE_MESSAGE(WM_NCPOINTERUP),
DEFINE_MESSAGE(WM_POINTERUPDATE),
DEFINE_MESSAGE(WM_POINTERDOWN),
DEFINE_MESSAGE(WM_POINTERUP),
DEFINE_MESSAGE(WM_POINTERENTER),
DEFINE_MESSAGE(WM_POINTERLEAVE),
DEFINE_MESSAGE(WM_POINTERACTIVATE),
DEFINE_MESSAGE(WM_POINTERCAPTURECHANGED),
DEFINE_MESSAGE(WM_TOUCHHITTESTING),
DEFINE_MESSAGE(WM_POINTERWHEEL),
DEFINE_MESSAGE(WM_POINTERHWHEEL),
# endif /* WINVER >= 0x0602 */
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_IME_SETCONTEXT),
DEFINE_MESSAGE(WM_IME_NOTIFY),
DEFINE_MESSAGE(WM_IME_CONTROL),
DEFINE_MESSAGE(WM_IME_COMPOSITIONFULL),
DEFINE_MESSAGE(WM_IME_SELECT),
DEFINE_MESSAGE(WM_IME_CHAR),
# endif /* WINVER >= 0x0400 */
# if(WINVER >= 0x0500)
DEFINE_MESSAGE(WM_IME_REQUEST),
# endif /* WINVER >= 0x0500 */
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_IME_KEYDOWN),
DEFINE_MESSAGE(WM_IME_KEYUP),
# endif /* WINVER >= 0x0400 */
# if((_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500))
DEFINE_MESSAGE(WM_MOUSEHOVER),
DEFINE_MESSAGE(WM_MOUSELEAVE),
# endif
# if(WINVER >= 0x0500)
DEFINE_MESSAGE(WM_NCMOUSEHOVER),
DEFINE_MESSAGE(WM_NCMOUSELEAVE),
# endif /* WINVER >= 0x0500 */
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_WTSSESSION_CHANGE),
# endif /* _WIN32_WINNT >= 0x0501 */
DEFINE_MESSAGE(WM_CUT),
DEFINE_MESSAGE(WM_COPY),
DEFINE_MESSAGE(WM_PASTE),
DEFINE_MESSAGE(WM_CLEAR),
DEFINE_MESSAGE(WM_UNDO),
DEFINE_MESSAGE(WM_RENDERFORMAT),
DEFINE_MESSAGE(WM_RENDERALLFORMATS),
DEFINE_MESSAGE(WM_DESTROYCLIPBOARD),
DEFINE_MESSAGE(WM_DRAWCLIPBOARD),
DEFINE_MESSAGE(WM_PAINTCLIPBOARD),
DEFINE_MESSAGE(WM_VSCROLLCLIPBOARD),
DEFINE_MESSAGE(WM_SIZECLIPBOARD),
DEFINE_MESSAGE(WM_ASKCBFORMATNAME),
DEFINE_MESSAGE(WM_CHANGECBCHAIN),
DEFINE_MESSAGE(WM_HSCROLLCLIPBOARD),
DEFINE_MESSAGE(WM_QUERYNEWPALETTE),
DEFINE_MESSAGE(WM_PALETTEISCHANGING),
DEFINE_MESSAGE(WM_PALETTECHANGED),
DEFINE_MESSAGE(WM_HOTKEY),
# if(WINVER >= 0x0400)
DEFINE_MESSAGE(WM_PRINT),
DEFINE_MESSAGE(WM_PRINTCLIENT),
# endif /* WINVER >= 0x0400 */
# if(_WIN32_WINNT >= 0x0500)
DEFINE_MESSAGE(WM_APPCOMMAND),
# endif /* _WIN32_WINNT >= 0x0500 */
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_THEMECHANGED),
# endif /* _WIN32_WINNT >= 0x0501 */
# if(_WIN32_WINNT >= 0x0501)
DEFINE_MESSAGE(WM_CLIPBOARDUPDATE),
# endif /* _WIN32_WINNT >= 0x0501 */
# if(_WIN32_WINNT >= 0x0600)
DEFINE_MESSAGE(WM_DWMCOMPOSITIONCHANGED),
DEFINE_MESSAGE(WM_DWMNCRENDERINGCHANGED),
DEFINE_MESSAGE(WM_DWMCOLORIZATIONCOLORCHANGED),
DEFINE_MESSAGE(WM_DWMWINDOWMAXIMIZEDCHANGE),
# endif /* _WIN32_WINNT >= 0x0600 */
# if(_WIN32_WINNT >= 0x0601)
DEFINE_MESSAGE(WM_DWMSENDICONICTHUMBNAIL),
DEFINE_MESSAGE(WM_DWMSENDICONICLIVEPREVIEWBITMAP),
# endif /* _WIN32_WINNT >= 0x0601 */
# if(WINVER >= 0x0600)
DEFINE_MESSAGE(WM_GETTITLEBARINFOEX),
# endif /* WINVER >= 0x0600 */
{ 0, NULL, } /* end of message list */
};
#undef DEFINE_MESSAGE
char* WMMsg2Str(DWORD dwMessage)
{
struct WM_MESSAGE_MAP* pMapMsg = allMessages;
for (/*null*/; pMapMsg->lpszMsg != NULL; pMapMsg++)
{
if (pMapMsg->nMsg == dwMessage )
{
return (char *)pMapMsg->lpszMsg;
}
}
return "";
}
#endif /* _DEBUG */
/* Get system time, taking special precautions against 32bit timer wrap. /* Get system time, taking special precautions against 32bit timer wrap.
We use timeGetTime and not GetTickCount because of its better stability, We use timeGetTime and not GetTickCount because of its better stability,
@ -395,8 +778,8 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
if ( ( window == NULL ) && ( uMsg != WM_CREATE ) ) if ( ( window == NULL ) && ( uMsg != WM_CREATE ) )
return DefWindowProc( hWnd, uMsg, wParam, lParam ); return DefWindowProc( hWnd, uMsg, wParam, lParam );
/* printf ( "Window %3d message <%04x> %12d %12d\n", window?window->ID:0, /* printf ( "Window %3d message %s (<%04x>) %12d %12d\n", window?window->ID:0,
uMsg, wParam, lParam ); */ WMMsg2Str(uMsg), uMsg, wParam, lParam ); */
switch( uMsg ) switch( uMsg )
{ {