WM_USER_xxx

Constants WM_USER_xxx define custom messages, notifications and broadcasts that OllyDbg posts to the table functions of table windows.

Messages and notifications:

WM_USER_CREATE Called when OllyDbg creates table child window, right after call to CreateWindowEx(). This message has no parameters. Return value is ignored.
WM_USER_HSCR (Passed to the custom table function only if TABLE_NOHSCR is cleared) - called to update horizontal scroll bar. wparam contains total width of table in pixels and lparam - width of client area, also in pixels. Recommended action is to return 0, passing processing to the default table function. Otherwise, custom table function must redraw horizontal scrollbar and return 1. Note that default table function doesn't support this message
WM_USER_VSCR (Passed to the custom table function only if TABLE_NOVSCR is cleared) - called to update vertical scroll bar. wparam is the number of completely visible lines in the window. Returns 1 if message is processed. It is recommended that user-defined tables process this message. Alternatively, they can set t_table.sorted.n to the total number of lines in the table, t_table.offset to the index of the first visible line and return 0. Note that default table function doesn't support this message
WM_USER_MOUSE Called when table window receives WM_MOUSEMOVE and mouse is not captured by some table action, like selection or resizing. LOWORD(wparam) is the horizontal (X) offset within the column in characters, HIWORD(wparam) - zero-based column index, lparam - row in the window. Returns 1 if custom function sets mouse pointer and 0 in all other cases. Note that default table function doesn't support this message
WM_USER_VINC (Passed only to the custom table function of user-defined tables, i.e. of type TABLE_USERDEF) - scrolls contents of the window by the number of lines specified in lparam (treated as a signed number, negative value means scrolling upwards). wparam is the number of completely visible lines in the window. Returns 0 if custom function doesn't process this message, 1 if window must be updated and -1 if not
WM_USER_VPOS (Passed only to the custom table function of user-defined tables) - scrolls contents of the window vertically by the position of scrollbar. wparam is number of completely visible lines in window, lparam - zero-based index of the first displayed line (assuming that total number of lines is t_table.sorted.n). Returns 0 if custom function doesn't process this message, 1 if window must be updated and -1 if not
WM_USER_VBYTE (Passed only to the custom table function of user-defined tables) - scrolls contents of the window by the number of bytes specified in lparam (treated as a signed number, negative value means scrolling upwards). If byte scrolling is not supported, process this message as WM_USER_VINC. wparam is the number of completely visible lines in window. Returns 0 if custom function doesn't process this message (neither as VBYTE nor VINC), 1 if window must be updated and -1 if not
WM_USER_SETS (Passed only to the custom table function of user-defined tables) - starts mouse selection. LOWORD(wparam) is the horizontal (X) offset within the column in characters, HIWORD(wparam) - column, lparam - row in the window where selection must start. Returns 0 if custom function doesn't process message,1 if window must be updated and -1 if not
WM_USER_CNTS (Passed only to the custom table function of user-defined tables, and only if table is neither TABLE_MMOVX nor TABLE_MMOVY) - continues mouse selection. LOWORD(wparam) is the horizontal (X) offset within the column in characters, HIWORD(wparam) - column, lparam - row in the window where selection ends. Returns 0 if custom function doesn't process message, 1 if window must be updated and -1 if not
WM_USER_MMOV (Passed only to the custom table function of user-defined tables, and only if table is TABLE_MMOVX and/or TABLE_MMOVY instead of WM_USER_CNTS) - scrolls window by mouse. wparam is the signed horizontal (X) offset in pixels, lparam - signed Y offset in pixels since the most recent WM_USER_SETS. A sequence of WM_USER_MMOV is always preceeded by WM_USER_SETS. Note that if table function returns 0 on WM_USER_SETS, WM_USER_MMOV is not processed. If custom table processes this message by itself, it must return 1 if window must be updated and -1 if not. Alternatively, custom table function must set t_table.sorted.n to the total number of lines in the table, t_table.offset to the index of the first visible line and return 0
WM_USER_MOVS Keyboard interface to window scrolling and selection. LOWORD(wparam) contains number of completely visible lines in the window, HIWORD(wparam) - state of Ctrl and Shift keys as a set of flags KEY_xxx, LOINT(lparam) - signed number of lines to move in the vertical (Y) direction, or MOVETOP to move to the topmost element and MOVEBOTTOM to the last. HIINT(lparam) contains signed number of elements to move in the horizontal (X) direction. X and Y movements can't be set simultaneously. If custom table function doesn't support this message (for example, when window must scroll in X insteand of changing selection), it must return 0. Otherwise, it moves or extends selection, if necessary scrolls window so that the end of selection is visible and returns 1 if window must be updated and -1 if not
WM_USER_KEY Called when table window receives WM_KEYDOWN or WM_SYSKEYDOWN. LOWORD(wparam) contains number of completely visible lines in the window, HIWORD(wparam) is the state of keys Alt, Ctrl and Shift as a set of flags KEY_xxx, LOWORD(lparam) - key value. Returns 0 if custom function doesn't process this message, 1 if window must be updated and -1 if not. Note that table function has higher priority than shortcuts. Also note that some keys or key combinations, like arrows, are processed internally and are not passed to the table function
WM_USER_BAR Called when user releases button (of type BAR_BUTTON) in the table bar. wparam is the 0-based column index. Returns 0 if custom function doesn't process this message, 1 if window must be updated and -1 if not
WM_USER_DBLCLK Called when user doubleclicks data. LOWORD(wparam) is the horizontal (X) offset within the column in characters, HIWORD(wparam) - zero-based column index, lparam - row in the window. Returns 0 if custom function doesn't process this message, 1 if window must be updated and -1 if not
WM_USER_SELXY (Passed only to the custom table function of user-defined tables) - called to query position where selection-related dialog box or menu called via the keyboard shortcut will appear. (For pure tables, Gettableselectionxy() selects top right corner of selected line in the specified column). wparam contains 0-based column index, lparam - number of visible lines. Returns MAKELONG(x,y), where x and y are coordinates in characters, or 0 if message is not supported. OllyDbg automatically clips coordinates to the column/window size. Note that default table function doesn't support this message
WM_USER_UPD (Passed only to the custom table function of user-defined tables) - called on automatic update. Table must actualize and update its contents. For example, dump windows must read the actual contents of the memory by flushing the memory cache. Returned value is ignored
WM_USER_MTAB Called when user clicks middle mouse button on the tab in the parent window of tab collection. wparam contains zero-based tab index. Expected standard reaction is to close the tab

Broadcasts (passed to all table windows):

WM_USER_CHGALL Request to update the contents of the window
WM_USER_CHGMEM Request to update the contents of the window due to changed memory layout or memory contents of the debugged process
WM_USER_BKUP Informs table that global memory backup of the memory block with base wparam was created, deleted or changed
WM_USER_SAVE Called when user requests to close OllyDbg. If table decides that closing is not possible (usually it must ask user whether he really wants to discard data), it should return STOP_BROADCAST, otherwise CONT_BROADCAST
WM_USER_CLEAN Informs table that new process is loaded and old data must be discarded. For example, standalone memory dump windows close when they receive this message