haiku-website/static/legacy-docs/bebook/BMessageFilter_Overview.html

41 lines
8.0 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Be Book - System Overview - The Application Kit</title><link rel="stylesheet" href="be_book.css" type="text/css" media="all" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="./images/favicon.ico" /><!--[if IE]>
<link rel="stylesheet" type="text/css" href="be_book_ie.css" />
<![endif]--><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><meta name="keywords" content="Access, BeOS, BeBook, API" /><link rel="start" href="index.html" title="The Be Book" /><link rel="up" href="TheApplicationKit_Overview.html" title="The Application Kit" /><link rel="prev" href="BMessage_Overview.html" title="BMessage" /><link rel="next" href="BMessageQueue_Overview.html" title="BMessageQueue" /></head><body><div id="header"><div id="headerT"><div id="headerTL"><a accesskey="p" href="BMessage_Overview.html" title="BMessage"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a accesskey="u" href="TheApplicationKit_Overview.html" title="The Application Kit"><img src="./images/navigation/up.png" alt="Up" /></a> <a accesskey="n" href="BMessageQueue_Overview.html" title="BMessageQueue"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="headerTR"><div id="navigpeople"><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div><div class="navigboxed" id="navigindex"><a accesskey="i" href="ClassIndex.html" title="Index">I</a></div><div class="navigboxed" id="naviglang" title="English">en</div></div><div id="headerTC">The Be Book - System Overview - The Application Kit</div></div><div id="headerB">Prev: <a href="BMessage_Overview.html">BMessage</a>  Up: <a href="TheApplicationKit_Overview.html">The Application Kit</a>  Next: <a href="BMessageQueue_Overview.html">BMessageQueue</a></div><hr /></div><div class="section"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="BMessageFilter_Overview"></a>BMessageFilter</h2></div></div></div><a id="id450351" class="indexterm"></a><p>A <a class="link" href="BMessageFilter.html" title="BMessageFilter"><code class="classname">BMessageFilter</code></a> is a message-screening function
that you "attach" to a <a class="link" href="BLooper.html" title="BLooper"><code class="classname">BLooper</code></a> or <a class="link" href="BHandler.html" title="BHandler"><code class="classname">BHandler</code></a>. The message
filter sees messages just before they're dispatched (i.e. just before <a class="link" href="BLooper.html#BLooper_DispatchMessage" title="DispatchMessage()"><code class="methodname">BLooper::DispatchMessage()</code></a>),
and can modify or reject the message, change the
message's designated handler, or whatever else it wants to do—the
implementation of the filter function isn't restricted.</p><p>To define a message filter, you have to provide a message-filtering
function. You do this by implementing the <a class="link" href="BMessageFilter.html#BMessageFilter_Filter" title="Filter()"><code class="methodname">Filter()</code></a>
hook function in a
<a class="link" href="BMessageFilter.html" title="BMessageFilter"><code class="classname">BMessageFilter</code></a>
subclass, or by supplying a
<a class="link" href="BMessageFilter.html#filter_hook" title="filter_hook, filter_result"><code class="function">filter_hook</code></a>
function to the
<a class="link" href="BMessageFilter.html" title="BMessageFilter"><code class="classname">BMessageFilter</code></a>
constructor. Only one filter function per object is called. If you implement
<a class="link" href="BMessageFilter.html#BMessageFilter_Filter" title="Filter()"><code class="methodname">Filter()</code></a>
and provide a <code class="function">filter_hook</code> function, the
<code class="function">filter_hook</code> will win.</p><p>To attach a message filter to a looper, call
<a class="link" href="BLooper.html#BLooper_AddCommonFilter" title="AddCommonFilter(), RemoveCommonFilter(), SetCommonFilterList(), CommonFilterList()"><code class="methodname">BLooper::AddCommonFilter()</code></a>.
To add it to a handler, call
<a class="link" href="BHandler.html#BHandler_AddFilter"><code class="methodname">BHandler::AddFilter()</code></a>.
Looper filters see all incoming messages; handler filters see only
those messages that are targetted for that particular handler.</p><p>A <a class="link" href="BLooper.html" title="BLooper"><code class="classname">BLooper</code></a> or
<a class="link" href="BHandler.html" title="BHandler"><code class="classname">BHandler</code></a>
can have more than one message filter. Furthermore, a looper can have two sets of
filters: a looper set and a handler set (keep in mind that
<a class="link" href="BLooper.html" title="BLooper"><code class="classname">BLooper</code></a>
is derived from
<a class="link" href="BHandler.html" title="BHandler"><code class="classname">BHandler</code></a>).
Looper filters are applied before handler filters.</p><p>A <a class="link" href="BMessageFilter.html" title="BMessageFilter"><code class="classname">BMessageFilter</code></a>
object can be assigned to only one
<a class="link" href="BHandler.html" title="BHandler"><code class="classname">BHandler</code></a> or <a class="link" href="BLooper.html" title="BLooper"><code class="classname">BLooper</code></a> at a time.</p><div class="admonition warning"><div class="title">Warning</div><div class="graphic"><img class="icon" alt="Warning" width="32" src="./images/admonitions/Stop_32.png" /><div class="text"><p>The <a class="link" href="BMessageFilter.html" title="BMessageFilter"><code class="classname">BMessageFilter</code></a>
class is intended to be used as
part of the system-defined messaging system. If you try to use one outside
this system, your results may not be what you expect.</p></div></div></div></div><div id="footer"><hr /><div id="footerT">Prev: <a href="BMessage_Overview.html">BMessage</a>  Up: <a href="TheApplicationKit_Overview.html">The Application Kit</a>  Next: <a href="BMessageQueue_Overview.html">BMessageQueue</a> </div><div id="footerB"><div id="footerBL"><a href="BMessage_Overview.html" title="BMessage"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a href="TheApplicationKit_Overview.html" title="The Application Kit"><img src="./images/navigation/up.png" alt="Up" /></a> <a href="BMessageQueue_Overview.html" title="BMessageQueue"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="footerBR"><div><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div></div><div id="footerBC"><a href="http://www.access-company.com/home.html" title="ACCESS Co."><img alt="Access Company" src="./images/access_logo.png" /></a></div></div></div><div id="licenseFooter"><div id="licenseFooterBL"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" title="Creative Commons License"><img alt="Creative Commons License" style="border-width:0" src="https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png" /></a></div><div id="licenseFooterBR"><a href="./LegalNotice.html">Legal Notice</a></div><div id="licenseFooterBC"><span id="licenseText">This work is licensed under a
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative
Commons Attribution-Non commercial-No Derivative Works 3.0 License</a>.</span></div></div></body></html>