Debug Window Message ID

Share your advanced PureBasic knowledge/code with the community.
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Debug Window Message ID

Post by Rescator »

Ever wondered what some of those events are that WindowEvent() and WaitWindowEvent() or the window callback return?

I did recently and it annoyed the hell out of me, and there was no easy way to find out what some of those numbers are. (ever tried searching the net for a hex or integer value? *laughs*) and digging through a PSDK .h include wasn't my idea of fun either.

This takes care of the known WM_ message id's I could find, and tells you their constant/defined name so you can easily search for them in the PSDK, MSDN or Google.

It is very possible that some id's are unknown, I'm sure Vista has a few new ones, and obviously user id's will always be unknown.
As you can see it is very easy to add message id's, so if somebody find more or additional id's then please post in this thread, and you only need to post the CASE lines so others can easily copy'n'paste the new lines in. Try to order the lines numerically as well.

PS! Remember to not include the procedure in released/final code ( unless this is intended) as it does add a few KB to the exe, even if the procedure is not used.

Code: Select all

;Note! PureBasic may not have constants defined for some the messages.
Procedure.s Debug_WindowMessageID(msg.l)
 Protected txt$
 Select msg
  Case $0 : ;#WM_NULL, we'll ignore this one as it's a idle message.
  Case $1 : txt$="WM_CREATE"
  Case $2 : txt$="WM_DESTROY"
  Case $3 : txt$="WM_MOVE"
  Case $5 : txt$="WM_SIZE"
  Case $6 : txt$="WM_ACTIVATE"
  Case $7 : txt$="WM_SETFOCUS"
  Case $8 : txt$="WM_KILLFOCUS"
  Case $A : txt$="WM_ENABLE"
  Case $B : txt$="WM_SETREDRAW"
  Case $C : txt$="WM_SETTEXT"
  Case $D : txt$="WM_GETTEXT"
  Case $E : txt$="WM_GETTEXTLENGTH"
  Case $F : txt$="WM_PAINT"
  Case $10 : txt$="WM_CLOSE"
  Case $11 : txt$="WM_QUERYENDSESSION"
  Case $12 : txt$="WM_QUIT"
  Case $13 : txt$="WM_QUERYOPEN"
  Case $14 : txt$="WM_ERASEBKGND"
  Case $15 : txt$="WM_SYSCOLORCHANGE"
  Case $16 : txt$="WM_ENDSESSION"
  Case $17 : txt$="WM_SYSTEMERROR"
  Case $18 : txt$="WM_SHOWWINDOW"
  Case $19 : txt$="WM_CTLCOLOR"
  Case $1A : txt$="WM_SETTINGCHANGE"
  Case $1A : txt$="WM_WININICHANGE"
  Case $1B : txt$="WM_DEVMODECHANGE"
  Case $1C : txt$="WM_ACTIVATEAPP"
  Case $1D : txt$="WM_FONTCHANGE"
  Case $1E : txt$="WM_TIMECHANGE"
  Case $1F : txt$="WM_CANCELMODE"
  Case $20 : txt$="WM_SETCURSOR"
  Case $21 : txt$="WM_MOUSEACTIVATE"
  Case $22 : txt$="WM_CHILDACTIVATE"
  Case $23 : txt$="WM_QUEUESYNC"
  Case $24 : txt$="WM_GETMINMAXINFO"
  Case $26 : txt$="WM_PAINTICON"
  Case $27 : txt$="WM_ICONERASEBKGND"
  Case $28 : txt$="WM_NEXTDLGCTL"
  Case $2A : txt$="WM_SPOOLERSTATUS"
  Case $2B : txt$="WM_DRAWITEM"
  Case $2C : txt$="WM_MEASUREITEM"
  Case $2D : txt$="WM_DELETEITEM"
  Case $2E : txt$="WM_VKEYTOITEM"
  Case $2F : txt$="WM_CHARTOITEM"
  Case $30 : txt$="WM_SETFONT"
  Case $31 : txt$="WM_GETFONT"
  Case $32 : txt$="WM_SETHOTKEY"
  Case $33 : txt$="WM_GETHOTKEY"
  Case $37 : txt$="WM_QUERYDRAGICON"
  Case $39 : txt$="WM_COMPAREITEM"
  Case $3D : txt$="WM_GETOBJECT"
  Case $41 : txt$="WM_COMPACTING"
  Case $44 : txt$="WM_COMMNOTIFY"
  Case $46 : txt$="WM_WINDOWPOSCHANGING"
  Case $47 : txt$="WM_WINDOWPOSCHANGED"
  Case $48 : txt$="WM_POWER"
  Case $4A : txt$="WM_COPYDATA"
  Case $4B : txt$="WM_CANCELJOURNAL"
  Case $4E : txt$="WM_NOTIFY"
  Case $50 : txt$="WM_INPUTLANGCHANGEREQUEST"
  Case $51 : txt$="WM_INPUTLANGCHANGE"
  Case $52 : txt$="WM_TCARD"
  Case $53 : txt$="WM_HELP"
  Case $54 : txt$="WM_USERCHANGED"
  Case $55 : txt$="WM_NOTIFYFORMAT"
  Case $7B : txt$="WM_CONTEXTMENU"
  Case $7C : txt$="WM_STYLECHANGING"
  Case $7D : txt$="WM_STYLECHANGED"
  Case $7E : txt$="WM_DISPLAYCHANGE"
  Case $7F : txt$="WM_GETICON"
  Case $80 : txt$="WM_SETICON"
  Case $81 : txt$="WM_NCCREATE"
  Case $82 : txt$="WM_NCDESTROY"
  Case $83 : txt$="WM_NCCALCSIZE"
  Case $84 : txt$="WM_NCHITTEST"
  Case $85 : txt$="WM_NCPAINT"
  Case $86 : txt$="WM_NCACTIVATE"
  Case $87 : txt$="WM_GETDLGCODE"
  Case $88 : txt$="WM_SYNCPAINT"
  Case $A0 : txt$="WM_NCMOUSEMOVE"
  Case $A1 : txt$="WM_NCLBUTTONDOWN"
  Case $A2 : txt$="WM_NCLBUTTONUP"
  Case $A3 : txt$="WM_NCLBUTTONDBLCLK"
  Case $A4 : txt$="WM_NCRBUTTONDOWN"
  Case $A5 : txt$="WM_NCRBUTTONUP"
  Case $A6 : txt$="WM_NCRBUTTONDBLCLK"
  Case $A7 : txt$="WM_NCMBUTTONDOWN"
  Case $A8 : txt$="WM_NCMBUTTONUP"
  Case $A9 : txt$="WM_NCMBUTTONDBLCLK"
  Case $AB : txt$="WM_NCXBUTTONDOWN"
  Case $AC : txt$="WM_NCXBUTTONUP"
  Case $AD : txt$="WM_NCXBUTTONDBLCLK"
  Case $FF : txt$="WM_INPUT"
  Case $100 : txt$="WM_KEYDOWN"
  Case $100 : txt$="WM_KEYFIRST"
  Case $101 : txt$="WM_KEYUP"
  Case $102 : txt$="WM_CHAR"
  Case $103 : txt$="WM_DEADCHAR"
  Case $104 : txt$="WM_SYSKEYDOWN"
  Case $105 : txt$="WM_SYSKEYUP"
  Case $106 : txt$="WM_SYSCHAR"
  Case $107 : txt$="WM_SYSDEADCHAR"
  Case $108 : txt$="WM_KEYLAST"
  Case $109 : txt$="WM_KEYLAST"
  Case $109 : txt$="WM_UNICHAR"
  Case $10D : txt$="WM_IME_STARTCOMPOSITION"
  Case $10E : txt$="WM_IME_ENDCOMPOSITION"
  Case $10F : txt$="WM_IME_COMPOSITION"
  Case $10F : txt$="WM_IME_KEYLAST"
  Case $110 : txt$="WM_INITDIALOG"
  Case $111 : txt$="WM_COMMAND"
  Case $112 : txt$="WM_SYSCOMMAND"
  Case $113 : txt$="WM_TIMER"
  Case $114 : txt$="WM_HSCROLL"
  Case $115 : txt$="WM_VSCROLL"
  Case $116 : txt$="WM_INITMENU"
  Case $117 : txt$="WM_INITMENUPOPUP"
  Case $11F : txt$="WM_MENUSELECT"
  Case $120 : txt$="WM_MENUCHAR"
  Case $121 : txt$="WM_ENTERIDLE"
  Case $122 : txt$="WM_MENURBUTTONUP"
  Case $123 : txt$="WM_MENUDRAG"
  Case $124 : txt$="WM_MENUGETOBJECT"
  Case $125 : txt$="WM_UNINITMENUPOPUP"
  Case $126 : txt$="WM_MENUCOMMAND"
  Case $127 : txt$="WM_CHANGEUISTATE"
  Case $128 : txt$="WM_UPDATEUISTATE"
  Case $129 : txt$="WM_QUERYUISTATE"
  Case $132 : txt$="WM_CTLCOLORMSGBOX"
  Case $133 : txt$="WM_CTLCOLOREDIT"
  Case $134 : txt$="WM_CTLCOLORLISTBOX"
  Case $135 : txt$="WM_CTLCOLORBTN"
  Case $136 : txt$="WM_CTLCOLORDLG"
  Case $137 : txt$="WM_CTLCOLORSCROLLBAR"
  Case $138 : txt$="WM_CTLCOLORSTATIC"
  Case $1E1 : txt$="MN_GETHMENU"
  Case $200 : txt$="WM_MOUSEFIRST"
  Case $200 : txt$="WM_MOUSEMOVE"
  Case $201 : txt$="WM_LBUTTONDOWN"
  Case $202 : txt$="WM_LBUTTONUP"
  Case $203 : txt$="WM_LBUTTONDBLCLK"
  Case $204 : txt$="WM_RBUTTONDOWN"
  Case $205 : txt$="WM_RBUTTONUP"
  Case $206 : txt$="WM_RBUTTONDBLCLK"
  Case $207 : txt$="WM_MBUTTONDOWN"
  Case $208 : txt$="WM_MBUTTONUP"
  Case $209 : txt$="WM_MBUTTONDBLCLK"
  Case $209 : txt$="WM_MOUSELAST"
  Case $20A : txt$="WM_MOUSELAST"
  Case $20A : txt$="WM_MOUSEWHEEL"
  Case $20B : txt$="WM_XBUTTONDOWN"
  Case $20C : txt$="WM_XBUTTONUP"
  Case $20D : txt$="WM_MOUSELAST"
  Case $20D : txt$="WM_XBUTTONDBLCLK"
  Case $210 : txt$="WM_PARENTNOTIFY"
  Case $211 : txt$="WM_ENTERMENULOOP"
  Case $212 : txt$="WM_EXITMENULOOP"
  Case $213 : txt$="WM_NEXTMENU"
  Case $214 : txt$="WM_SIZING"
  Case $215 : txt$="WM_CAPTURECHANGED"
  Case $216 : txt$="WM_MOVING"
  Case $218 : txt$="WM_POWERBROADCAST"
  Case $219 : txt$="WM_DEVICECHANGE"
  Case $220 : txt$="WM_MDICREATE"
  Case $221 : txt$="WM_MDIDESTROY"
  Case $222 : txt$="WM_MDIACTIVATE"
  Case $223 : txt$="WM_MDIRESTORE"
  Case $224 : txt$="WM_MDINEXT"
  Case $225 : txt$="WM_MDIMAXIMIZE"
  Case $226 : txt$="WM_MDITILE"
  Case $227 : txt$="WM_MDICASCADE"
  Case $228 : txt$="WM_MDIICONARRANGE"
  Case $229 : txt$="WM_MDIGETACTIVE"
  Case $230 : txt$="WM_MDISETMENU"
  Case $231 : txt$="WM_ENTERSIZEMOVE"
  Case $232 : txt$="WM_EXITSIZEMOVE"
  Case $233 : txt$="WM_DROPFILES"
  Case $234 : txt$="WM_MDIREFRESHMENU"
  Case $281 : txt$="WM_IME_SETCONTEXT"
  Case $282 : txt$="WM_IME_NOTIFY"
  Case $283 : txt$="WM_IME_CONTROL"
  Case $284 : txt$="WM_IME_COMPOSITIONFULL"
  Case $285 : txt$="WM_IME_SELECT"
  Case $286 : txt$="WM_IME_CHAR"
  Case $288 : txt$="WM_IME_REQUEST"
  Case $290 : txt$="WM_IME_KEYDOWN"
  Case $291 : txt$="WM_IME_KEYUP"
  Case $2A0 : txt$="WM_NCMOUSEHOVER"
  Case $2A1 : txt$="WM_MOUSEHOVER"
  Case $2A2 : txt$="WM_NCMOUSELEAVE"
  Case $2A3 : txt$="WM_MOUSELEAVE"
  Case $2B1 : txt$="WM_WTSSESSION_CHANGE"
  Case $2C0 : txt$="WM_TABLET_FIRST"
  Case $2DF : txt$="WM_TABLET_LAST"
  Case $300 : txt$="WM_CUT"
  Case $301 : txt$="WM_COPY"
  Case $302 : txt$="WM_PASTE"
  Case $303 : txt$="WM_CLEAR"
  Case $304 : txt$="WM_UNDO"
  Case $305 : txt$="WM_RENDERFORMAT"
  Case $306 : txt$="WM_RENDERALLFORMATS"
  Case $307 : txt$="WM_DESTROYCLIPBOARD"
  Case $308 : txt$="WM_DRAWCLIPBOARD"
  Case $309 : txt$="WM_PAINTCLIPBOARD"
  Case $30A : txt$="WM_VSCROLLCLIPBOARD"
  Case $30B : txt$="WM_SIZECLIPBOARD"
  Case $30C : txt$="WM_ASKCBFORMATNAME"
  Case $30D : txt$="WM_CHANGECBCHAIN"
  Case $30E : txt$="WM_HSCROLLCLIPBOARD"
  Case $30F : txt$="WM_QUERYNEWPALETTE"
  Case $310 : txt$="WM_PALETTEISCHANGING"
  Case $311 : txt$="WM_PALETTECHANGED"
  Case $312 : txt$="WM_HOTKEY"
  Case $317 : txt$="WM_PRINT"
  Case $318 : txt$="WM_PRINTCLIENT"
  Case $319 : txt$="WM_APPCOMMAND"
  Case $31A : txt$="WM_THEMECHANGED"
  Case $358 : txt$="WM_HANDHELDFIRST"
  Case $35F : txt$="WM_HANDHELDLAST"
  Case $360 : txt$="WM_AFXFIRST"
  Case $37F : txt$="WM_AFXLAST"
  Case $380 : txt$="WM_PENWINFIRST"
  Case $38F : txt$="WM_PENWINLAST"
  Case $390 : txt$="WM_COALESCE_FIRST"
  Case $39F : txt$="WM_COALESCE_LAST"
  Case $3E0 : txt$="WM_DDE_FIRST"
  Case $3E0 : txt$="WM_DDE_INITIATE"
  Case $3E1 : txt$="WM_DDE_TERMINATE"
  Case $3E2 : txt$="WM_DDE_ADVISE"
  Case $3E3 : txt$="WM_DDE_UNADVISE"
  Case $3E4 : txt$="WM_DDE_ACK"
  Case $3E5 : txt$="WM_DDE_DATA"
  Case $3E6 : txt$="WM_DDE_REQUEST"
  Case $3E7 : txt$="WM_DDE_POKE"
  Case $3E8 : txt$="WM_DDE_EXECUTE"
  Case $3E8 : txt$="WM_DDE_LAST"
  Case $400 : txt$="WM_USER"
  Case $8000 : txt$="WM_APP"
  Default : txt$="Unknown $"+Hex(msg)+" ("+Str(msg)+")"
 EndSelect
 CompilerIf #PB_Compiler_Debugger
  If msg<>#WM_NULL
   Debug txt$
  EndIf
 CompilerElse
  If msg<>#WM_NULL
   ProcedureReturn txt$
  EndIf
 CompilerEndIf
EndProcedure
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Post by Rescator »

Code: Select all

  ;These are replacements for the WM_ id's above as PB match these.
  Case $3 : txt$="#PB_Event_MoveWindow"
  Case $5 : txt$="#PB_Event_SizeWindow"
  Case $F : txt$="#PB_Event_Repaint"
  Case $10 : txt$="#PB_Event_CloseWindow"
  
  
  ;These are PB user (custom) id's, add these to the end of the other ones.
  Case $332C : txt$="#PB_Event_Gadget"
  Case $332D : txt$="#PB_Event_Menu"
  Case $332E : txt$="#PB_Event_SysTray"
  Case $3330 : txt$="#PB_Event_ActivateWindow"
  Case $3331 : txt$="#PB_Event_WindowDrop"
  Case $3332 : txt$="#PB_Event_GadgetDrop"
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post by netmaestro »

This has been treated quite comprehensively on the Windows board here:

http://www.purebasic.fr/english/viewtopic.php?t=12352

If yours aren't listed there you could add them in there too
BERESHEIT
User avatar
Kaeru Gaman
Addict
Addict
Posts: 4826
Joined: Sun Mar 19, 2006 1:57 pm
Location: Germany

Post by Kaeru Gaman »

interesting, thanks, Rescator.
and thanks for the link, netmaestro.

and, Rescator, special thanks for the

Code: Select all

#WM_NULL
I need it to handle the timeout of a timed WaitWindowEvent.
sure I could take any NULL, but this constant is the correct one for the context.
oh... and have a nice day.
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Post by Rescator »

@netmaestro thanks, made a cross link there now.

@Kaeru Gaman
Yeah, odd though that there is no #PB_Event_None *scratches head*
And I love WaitWindowEvent() especially when using a variable as that let us throttle the loop. Like 1ms during active use, 100ms during idle/low use and 1000ms when the program is idle AND minimized :)
User avatar
Kaeru Gaman
Addict
Addict
Posts: 4826
Joined: Sun Mar 19, 2006 1:57 pm
Location: Germany

Post by Kaeru Gaman »

lately, in some demonstration codes I defined a #PB_Event_Timeout-Constant at the top,
to make the event-handling Select more descriptive....

I think, using a variable for WaitWindowEvent(Time) completely fits its destination.... Image
oh... and have a nice day.
User avatar
DoubleDutch
Addict
Addict
Posts: 3220
Joined: Thu Aug 07, 2003 7:01 pm
Location: United Kingdom
Contact:

Post by DoubleDutch »

It would be useful in PBOSL, maybe the same could be done for linux/apple messages?
Post Reply