Jump to content

WinSetClassMsgInterest

From EDM2

This function sets the message interest of a window class.

Syntax

WinSetClassMsgInterest(hab, pszClassName, ulMsgClass, lControl)

Parameters

hab (HAB) - Input
Anchor-block handle.
pszClassName (PSZ) - Input
Window-class name.
ulMsgClass (ULONG) - Input
Message class to set interest for. Can be a specific message ID (e.g., WM_SHOW) or SMIM_ALL (all messages except WM_QUIT under certain lControl values).
lControl (LONG) - Input
Interest identifier.
SMI_INTEREST
Interested in the message(s).
SMI_NOINTEREST
Not interested in the message(s).
SMI_AUTODISPATCH
Interested, but messages should be automatically dispatched to the window procedure.
rc (BOOL) - Returns
TRUE if interest was successfully changed, FALSE otherwise.

Returns

rc (BOOL) - returns
Interest-changed indicator.
TRUE
Interest successfully changed
FALSE
Interest not successfully changed.

Remarks

This function only works if the MsgControlHook hook has been set.

The interest for WM_QUIT cannot be set to SMI_AUTODISPATCH using SMIM_ALL, as WM_QUIT is the standard way to terminate an application. It can be set specifically if needed.

Errors

Possible returns from WinGetLastError:

  • PMERR_INVALID_HWND (0x1001) - An invalid window handle was specified.

Example Code

#define INCL_WINMESSAGEMGR /* Or use INCL_WIN, INCL_PM, */
#include <os2.h>

HAB   hab;          /* Anchor-block handle. */
PSZ   pszClassName; /* Window-class name. */
ULONG ulMsgClass;   /* Message class to have interest level set. */
LONG  lControl;     /* Interest identifier for the message class. */
BOOL  rc;           /* Interest-changed indicator. */

rc = WinSetClassMsgInterest(hab, pszClassName,
                            ulMsgClass, lControl);

This example sets the message interest for the WC_MENU window class, allowing its messages to be processed in the MsgControlHook procedure.

#define INCL_WINMESSAGEMGR
#define INCL_WINHOOKS
#define INCL_WINMENUS   /* for WC_MENU parameter definition. */
#include <OS2.H>
main()
{
  /* Hook Procedure Prototype */

BOOL MsgControlHook(HAB hab,LONG  idContext,     /* this hook can */
           HWND hwnd, PSZ pszClassname,      /* be given any */
           ULONG  ulMsgclass,                /* name.           */
           LONG  idControl, PBOOL fSuccess);
HWND hwnd;
HAB hab;
BOOL fSuccess;


/* This function passes the hook procedure address to the system. */

WinSetHook(hab,
          (HMQ)0,
          MCHK_CLASSMSGINTEREST,
          (PFN)MsgControlHook,
          (HMODULE)0); /* hook is into application queue. */

 /*
 This function sets the message interest of a window class.
 */
WinSetClassMsgInterest(hab,
                       WC_MENU,   /* menu window class.           */
                       SMIM_ALL,  /* set interest level for all */
                                  /* messages.                    */
                       SMI_AUTODISPATCH); /* interested in the */
                                  /* messages, but they are to  */
                                  /* be automatically dispatched */
                                  /* to the window procedure.    */
}
/*
 This hook allows the call which determine the flow of messages to be
 intercepted. It must be present for the WinSetClassMsgInterest
 call to have an effect.
*/

BOOL MsgControlHook(HAB hab,LONG  idContext,     /* this hook can */
           HWND hwnd, PSZ pszClassname,      /* be given any */
           ULONG  ulMsgclass,                /* name.           */
           LONG  idControl, PBOOL fSuccess)
{
/* ... */
}

Related Messages

Related Functions