A BHandler object responds to messages that are handed to it by a BLooper. The BLooper tells the BHandler about a message by invoking the BHandler's MessageReceived() function.

The Handler List

To be eligible to get messages from a BLooper, a BHandler must be in the BLooper's list of eligible handlers (as explained in the BLooper class). The list of eligible handlers is ordered; if the "first" handler doesn't want to respond to a message that it has received, it simply calls the inherited version of MessageReceived() and the message will automatically be handed to the object's "next" handler. (System messages are not handed down the list.) The BLooper that all these BHandlers belong to is always the last the last handler in the list (BLooper inherits from BHandler).

A BHandler's next handler assignment can be changed through SetNextHandler().


You can designate a target BHandler for most messages. The designation is made when calling BLooper's PostMessage() function or when constructing the BMessenger object that will send the message. Messages that a user drags and drops are targeted to the object (a BView) that controls the part of the window where the message was dropped. The messaging mechanism eventually passes the target BHandler to DispatchMessage() , so that the message can be delivered to its designated destination.


Messages can be filtered before they're dispatched; that is, you can define a function that will look at the message before the target BHandler's hook function is called. The filter function is associated with a BMessageFilter object, which records the criteria for calling the function.

Filters that should apply only to messages targeted to a particular BHandler are assigned to the BHandler by SetFilterList() or AddFilter(). Filters that might apply to any message a BLooper dispatches, regardless of its target, are assigned by the parallel BLooper functions, SetCommonFilterList() and AddCommonFilter(). See those functions and the BMessageFilter class for details.

Notifiers and Observers

A BHandler can be a notifier. A notifier is a handler that maintains one or more states and notifies interested parties when those states change. Each state is idenfified by a 32-bit what code. Interested parties, called observers, can register to monitor changes in one or more states by calling StartWatching() and specifying the what code of the state they want to be notified of changes to.

This notification occurs when the BHandler calls SendNotices(); it's the handler's job to call SendNotices() whenever a state changes, to ensure that observers are kept informed of the changes. The BHandler passes to SendNotices() a message template to be sent to the observers.

When a notification is sent, observers receive a B_OBSERVER_NOTICE_CHANGE message with an int32 field B_OBSERVER_NOTICE_CHANGE that contains the what code of the state that changed, and a B_OBSERVE_ORIGINAL_WHAT field that contains the what value that was in the template BMessage.

Creative Commons License
Legal Notice
This work is licensed under a Creative Commons Attribution-Non commercial-No Derivative Works 3.0 License.