Příjem oznámení z běžných ovládacích prvků
Běžné ovládací prvky jsou podřízená okna, která odesílají zprávy s oznámením do nadřazeného okna, když v ovládacím prvku dojde k událostem, jako je vstup od uživatele.
Aplikace spoléhá na tyto zprávy s oznámením, aby určila, jakou akci chce uživatel provést. Nejběžnější ovládací prvky odesílají zprávy s oznámeními jako WM_NOTIFY zprávy. Ovládací prvky Windows odesílají většinu zpráv oznámení jako zprávy WM_COMMAND. CWnd::OnNotify je obslužná rutina WM_NOTIFY zprávy. CWnd::OnCommand
Stejně jako v případě, implementace OnNotify
odeslání zprávy oznámení pro OnCmdMsg
zpracování v mapách zpráv. Položka mapy zpráv pro zpracování oznámení je ON_NOTIFY. Další informace naleznete v technické poznámce 61: ON_NOTIFY a WM_NOTIFY zprávy.
Odvozená třída může také zpracovávat své vlastní zprávy s oznámením pomocí "reflexe zprávy". Další informace naleznete v technické poznámce 62: Zpráva Reflexe ion pro ovládací prvky Windows.
Načtení pozice kurzoru ve zprávě s oznámením
Při příležitosti je užitečné určit aktuální pozici kurzoru, když jsou určité zprávy oznámení přijaty běžným ovládacím prvku. Například by bylo užitečné určit aktuální umístění kurzoru, když běžný ovládací prvek obdrží zprávu NM_RCLICK oznámení.
Existuje jednoduchý způsob, jak toho dosáhnout voláním CWnd::GetCurrentMessage
. Tato metoda však načte pozici kurzoru pouze v době odeslání zprávy. Vzhledem k tomu, že se kurzor mohl přesunout od odeslání zprávy, musíte zavolat CWnd::GetCursorPos
, abyste získali aktuální pozici kurzoru.
Poznámka
CWnd::GetCurrentMessage
měla by být volána pouze v rámci obslužné rutiny zprávy.
Do textu obslužné rutiny zprávy s oznámením přidejte následující kód (v tomto příkladu NM_RCLICK):
CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;
V tomto okamžiku je umístění kurzoru myši uloženo v objektu cursorPos
.