Mappe messaggi

Una mappa messaggi associa una funzione di gestione a un determinato messaggio, di comando o notifica. Utilizzando messaggio mappa macro ATL, è possibile specificare una mappa messaggi per una finestra. Le procedure di finestra in CWindowImpl, CDialogImple CContainedWindow dirigere i messaggi di una finestra alla sua mappa messaggi.

Le funzioni di gestore del messaggio accettano un ulteriore argomento di tipo BOOLamp; . Questo argomento indica se un messaggio è stato elaborato e viene impostato su TRUE per impostazione predefinita. Una funzione del gestore può quindi impostare l'argomento su F&ALSE per indicare che essa non ha gestito un messaggio. In questo caso, ATL continuerà a cercare una funzione del gestore ulteriormente della mappa messaggi. Impostando questo argomento su FALSE , è possibile innanzitutto eseguire qualche azione in risposta a un messaggio e quindi consentire l'elaborazione predefinita o un'altra funzione del gestore per finire il messaggio di movimentazione.

ATL permette anche alle mappe di messaggio di catena, che dirige il gestione ad una mappa di messaggio definita in un'altra classe di messaggi. Ad esempio, è possibile implementare la gestione comune dei messaggi in un'altra classe per fornire un comportamento uniforme per tutte le finestre del concatenamento a tale classe. È possibile concatenare una classe base o a un membro dati della classe.

ATL supporta anche il concatenamento dinamico, che consente alla catena alla mappa messaggi di un altro oggetto in fase di esecuzione. Per implementare il concatenamento dinamico, è necessario derivare la classe da CDynamicChain. Quindi dichiarare la macro CHAIN_MSG_MAP_DYNAMIC nella mappa del messaggio. CHAIN_MSG_MAP_DYNAMIC richiede un numero univoco che identifica l'oggetto e la mappa del messaggio a cui sono concatenamento. È necessario definire questo valore univoco tramite una chiamata a CDynamicChain::SetChainEntry.

È possibile concatenare a qualsiasi classe che dichiara una mappa messaggi, purché la classe deriva da CMessageMap. CMessageMap consente a un oggetto per esporre le sue mappe messaggi ad altri oggetti. Si noti che CWindowImpl già deriva da CMessageMap.

Infine, ATL supporta mappe messaggi alternativo, dichiarate con la macro ALT_MSG_MAP . Ogni mappa messaggio alternativo è identificato da un numero univoco, che si passa a ALT_MSG_MAP. Utilizzando messaggio alternativo mappe, è possibile gestire i messaggi di finestre multiple di una mappa. Si noti che per impostazione predefinita, CWindowImpl non utilizza mappe messaggi alternativo. Per aggiungere questo supporto, eseguire l'override del metodo WindowProc nella vostra CWindowImpl-classe derivata e chiamare ProcessWindowMessage con l'identificativo del messaggio mappa.

Index