Communication objects, whether they are loaded by means of a :docprof. tag or an :acviewport. tag, function in a "communication chain." The chain is maintained through the passing of HM_ messages unidirectionally through the chain.
IPF passes all messages to the active communication object (including, but not limited to, HM_ messages) as they are generated by the user's actions. The active communication object is then responsible for passing on any HM_ messages it receives through the chain to a neighboring communication object. The handle of the neighboring communication object window is returned by the HM_SET_OBJCOM_WINDOW (see Adding Your Communication Object to the Communication Chain).
Even if you are certain that your communication object will not be used in combination with other communication objects, it is your responsibility to code your communication object contingent on the possibility that other communication objects may be present in the chain. Therefore, it is important for you to create communication objects that keep the communication chain intact through message passing.