Klasa CDynamicChain
Ta klasa udostępnia metody obsługujące dynamiczne tworzenie łańcuchów map komunikatów.
Ważne
Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.
Składnia
class CDynamicChain
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CDynamicChain::CDynamicChain | Konstruktor. |
CDynamicChain::~CDynamicChain | Destruktora. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CDynamicChain::CallChain | Kieruje komunikat systemu Windows do mapy komunikatów innego obiektu. |
CDynamicChain::RemoveChainEntry | Usuwa wpis mapy komunikatów z kolekcji. |
CDynamicChain::SetChainEntry | Dodaje wpis mapy komunikatów do kolekcji lub modyfikuje istniejący wpis. |
Uwagi
CDynamicChain
zarządza kolekcją map komunikatów, umożliwiając przekierowanie komunikatu systemu Windows w czasie wykonywania do mapy komunikatów innego obiektu.
Aby dodać obsługę dynamicznego tworzenia łańcuchów map komunikatów, wykonaj następujące czynności:
Utwórz klasę na podstawie
CDynamicChain
klasy . Na mapie komunikatów określ makro CHAIN_MSG_MAP_DYNAMIC , aby połączyć łańcuch z domyślną mapą komunikatów innego obiektu.Utwórz każdą klasę, do której chcesz utworzyć łańcuch z obiektu CMessageMap.
CMessageMap
umożliwia obiektowi uwidocznienie mapowania komunikatów na inne obiekty.Wywołaj metodę
CDynamicChain::SetChainEntry
w celu zidentyfikowania obiektu i mapowania komunikatów, do których chcesz utworzyć łańcuch.
Załóżmy na przykład, że klasa jest zdefiniowana w następujący sposób:
class CMyChainWnd : public CWindowImpl<CMyChainWnd>,
public CDynamicChain
{
public:
CMyChainWnd() {}
BEGIN_MSG_MAP(CMyChainWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
// dynamically chain to the default
// message map in another object
CHAIN_MSG_MAP_DYNAMIC(1313)
// '1313' identifies the object
// and the message map that will be
// chained to. '1313' is defined
// through the SetChainEntry method
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some painting code
return 0;
}
LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
Następnie klient wywołuje polecenie CMyWindow::SetChainEntry
:
myCtl.SetChainEntry(1313, &chainedObj);
gdzie chainedObj
jest obiektem łańcuchowym i jest wystąpieniem klasy pochodzącej z CMessageMap
klasy . myCtl
Jeśli teraz otrzyma komunikat, który nie jest obsługiwany przez OnPaint
program lub OnSetFocus
, procedura okna przekierowuje komunikat do chainedObj
domyślnej mapy komunikatów.
Aby uzyskać więcej informacji na temat tworzenia łańcuchów map komunikatów, zobacz Mapy komunikatów w artykule "Klasy okien ATL".
Wymagania
Nagłówek: atlwin.h
CDynamicChain::CallChain
Kieruje komunikat systemu Windows do mapy komunikatów innego obiektu.
BOOL CallChain(
DWORD dwChainID,
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT& lResult);
Parametry
dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów.
hWnd
[in] Uchwyt do okna odbierającego komunikat.
uMsg
[in] Wiadomość wysłana do okna.
wParam
[in] Dodatkowe informacje specyficzne dla komunikatów.
lParam
[in] Dodatkowe informacje specyficzne dla komunikatów.
lResult
[out] Wynik przetwarzania komunikatów.
Wartość zwracana
WARTOŚĆ TRUE, jeśli komunikat jest w pełni przetwarzany; w przeciwnym razie, FAŁSZ.
Uwagi
Aby procedura okna wywoływana CallChain
przez program , należy określić makro CHAIN_MSG_MAP_DYNAMIC na mapie komunikatów. Aby zapoznać się z przykładem, zobacz omówienie narzędzia CDynamicChain .
CallChain
wymaga poprzedniego wywołania polecenia SetChainEntry w celu skojarzenia wartości dwChainID z obiektem i mapą komunikatów.
CDynamicChain::CDynamicChain
Konstruktor.
CDynamicChain();
CDynamicChain::~CDynamicChain
Destruktora.
~CDynamicChain();
Uwagi
Zwalnia wszystkie przydzielone zasoby.
CDynamicChain::RemoveChainEntry
Usuwa mapę określonego komunikatu z kolekcji.
BOOL RemoveChainEntry(DWORD dwChainID);
Parametry
dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów. Ta wartość została pierwotnie zdefiniowana za pomocą wywołania metody SetChainEntry.
Wartość zwracana
Wartość TRUE, jeśli mapa komunikatów została pomyślnie usunięta z kolekcji. W przeciwnym razie zwraca wartość FALSE.
CDynamicChain::SetChainEntry
Dodaje mapę określonego komunikatu do kolekcji.
BOOL SetChainEntry(
DWORD dwChainID,
CMessageMap* pObject,
DWORD dwMsgMapID = 0);
Parametry
dwChainID
[in] Unikatowy identyfikator skojarzony z obiektem łańcuchowym i mapą komunikatów.
pObject
[in] Wskaźnik do obiektu łańcuchowego deklarujący mapę komunikatów. Ten obiekt musi pochodzić z obiektu CMessageMap.
dwMsgMapID
[in] Identyfikator mapy komunikatów w obiekcie łańcuchowym. Wartość domyślna to 0, która identyfikuje domyślną mapę komunikatów zadeklarowaną za pomocą BEGIN_MSG_MAP. Aby określić alternatywną mapę komunikatów zadeklarowaną za pomocą ALT_MSG_MAP(msgMapID),przekaż .msgMapID
Wartość zwracana
Wartość TRUE, jeśli mapa komunikatów została pomyślnie dodana do kolekcji. W przeciwnym razie zwraca wartość FALSE.
Uwagi
Jeśli wartość dwChainID już istnieje w kolekcji, skojarzony z nią obiekt i mapa komunikatów są zastępowane odpowiednio przez pObject i dwMsgMapID. W przeciwnym razie zostanie dodany nowy wpis.