Sdílet prostřednictvím


Zpracování oznámení o přizpůsobení

Společný ovládací prvek panelu nástrojů Windows obsahuje integrované funkce přizpůsobení, včetně dialogového okna pro přizpůsobení definované systémem, které uživateli umožňují vkládat, odstraňovat nebo měnit uspořádání tlačítek panelu nástrojů. Aplikace určuje, zda jsou funkce přizpůsobení k dispozici a řídí rozsah, v jakém může uživatel přizpůsobit panel nástrojů.

Tyto funkce přizpůsobení můžete zpřístupnit uživateli tak, že panelu nástrojů poskytnete styl CCS_ADJUSTABLE . Funkce přizpůsobení umožňují uživateli přetáhnout tlačítko na nové místo nebo odebrat tlačítko přetažením mimo panel nástrojů. Uživatel navíc může poklikáním na panel nástrojů zobrazit dialogové okno Přizpůsobit panel nástrojů , které uživateli umožňuje přidávat, odstraňovat a měnit uspořádání tlačítek panelu nástrojů. Aplikace může dialogové okno zobrazit pomocí funkce Přizpůsobit člena.

Ovládací prvek panelu nástrojů odesílá zprávy s oznámeními do nadřazeného okna v každém kroku procesu přizpůsobení. Pokud uživatel drží klávesu SHIFT dolů a začne přetahovat tlačítko, panel nástrojů automaticky zpracuje operaci přetažení. Panel nástrojů odešle TBN_QUERYDELETE zprávu s oznámením do nadřazeného okna a určí, jestli se tlačítko může odstranit. Operace přetažení skončí, pokud nadřazené okno vrátí hodnotu FALSE. V opačném případě panel nástrojů zachytí vstup myši a počká, až uživatel uvolní tlačítko myši.

Když uživatel uvolní tlačítko myši, ovládací prvek panelu nástrojů určuje umístění kurzoru myši. Pokud je kurzor mimo panel nástrojů, tlačítko se odstraní. Pokud je kurzor na jiném tlačítku panelu nástrojů, panel nástrojů odešle TBN_QUERYINSERT zprávu s oznámením do nadřazeného okna a určí, jestli se tlačítko může vložit doleva od daného tlačítka. Tlačítko se vloží, pokud nadřazené okno vrátí hodnotu TRUE, jinak není. Panel nástrojů odešle zprávu TBN_TOOLBARCHANGE oznámení, která signalizují konec operace přetažení.

Pokud uživatel zahájí operaci přetažení bez podržení klávesy SHIFT, ovládací prvek panelu nástrojů odešle zprávu TBN_BEGINDRAG oznámení do okna vlastníka. Aplikace, která implementuje vlastní kód přetahování tlačítek, může tuto zprávu použít jako signál k zahájení operace přetažení. Panel nástrojů odešle zprávu TBN_ENDDRAG oznámení, která signaluje konec operace přetažení.

Ovládací prvek panelu nástrojů odesílá zprávy s oznámením, když uživatel přizpůsobí panel nástrojů pomocí dialogového okna Přizpůsobit panel nástrojů . Panel nástrojů odešle zprávu TBN_BEGINADJUST oznámení poté, co uživatel poklikne na panel nástrojů, ale před vytvořením dialogového okna. Dále panel nástrojů začne odesílat řadu TBN_QUERYINSERT oznámení zprávy, abyste zjistili, zda panel nástrojů umožňuje vložit tlačítka. Když nadřazené okno vrátí hodnotu PRAVDA, panel nástrojů přestane odesílat TBN_QUERYINSERT zprávy s oznámením. Pokud nadřazené okno nevrátí hodnotu PRAVDA pro žádné tlačítko, panel nástrojů zničí dialogové okno.

Dále ovládací prvek panelu nástrojů určuje, jestli se některá tlačítka můžou odstranit z panelu nástrojů odesláním jedné TBN_QUERYDELETE zprávy s oznámením o každém tlačítku na panelu nástrojů. Nadřazené okno vrátí hodnotu TRUE , která označuje, že tlačítko může být odstraněno. V opačném případě vrátí hodnotu FALSE. Panel nástrojů přidá do dialogového okna všechna tlačítka panelu nástrojů, ale šedá tlačítka, která nemusí být odstraněna.

Kdykoli ovládací prvek panelu nástrojů potřebuje informace o tlačítku v dialogovém okně Přizpůsobit panel nástrojů, odešle zprávu TBN_GETBUTTONINFO oznámení, zadáním indexu tlačítka, pro které potřebuje informace a adresu struktury TBNOTIFY . Nadřazené okno musí vyplnit strukturu příslušnými informacemi.

Dialogové okno Přizpůsobit panel nástrojů obsahuje tlačítko Nápověda a tlačítko Obnovit. Když uživatel zvolí tlačítko Nápověda, ovládací prvek panelu nástrojů odešle zprávu TBN_CUSTHELP oznámení. Nadřazené okno by mělo reagovat zobrazením informací nápovědy. Dialogové okno odešle TBN_RESET zprávu s oznámením, když uživatel vybere tlačítko Obnovit. Tato zpráva signalizuje, že se panel nástrojů chystá znovu inicializovat dialogové okno.

Všechny tyto zprávy jsou WM_NOTIFY zprávy a dají se zpracovat v okně vlastníka přidáním položek mapy zpráv z následujícího formuláře do mapy zpráv okna vlastníka:

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    Kód identifikátoru zprávy oznámení, například TBN_BEGINADJUST.

  • idControl

    Identifikátor ovládacího prvku, který oznámení odesílá.

  • memberFxn

    Členová funkce, která se má volat při přijetí tohoto oznámení.

Vaše členová funkce by byla deklarována pomocí následujícího prototypu:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

Pokud obslužná rutina zprávy oznámení vrátí hodnotu, měla by být uvedena v LRESULT odkazované na výsledek.

U každé zprávy odkazuje na strukturu NMHDR nebo na strukturu TBNOTIFY. pNotifyStruct Tyto struktury jsou popsány níže:

Struktura NMHDR obsahuje následující členy:

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndFrom

    Popisovač okna ovládacího prvku, který odesílá oznámení. Chcete-li převést tento popisovač na CWnd ukazatel, použijte CWnd::FromHandle.

  • IDFrom

    Identifikátor ovládacího prvku, který oznámení odesílá.

  • kód

    Kód oznámení. Tento člen může být hodnota specifická pro typ ovládacího prvku, například TBN_BEGINADJUST nebo TTN_NEEDTEXT, nebo může být jednou z běžných hodnot oznámení uvedených níže:

    • NM_CLICK Uživatel v ovládacím prvku kliknul na levé tlačítko myši.

    • NM_DBLCLK Uživatel dvakrát kliknul na levé tlačítko myši v ovládacím prvku.

    • NM_KILLFOCUS Ovládací prvek ztratil vstupní fokus.

    • NM_OUTOFMEMORY Ovládací prvek nemohl dokončit operaci, protože není k dispozici dostatek paměti.

    • NM_RCLICK Uživatel v ovládacím prvku kliknul na pravé tlačítko myši.

    • NM_RDBLCLK Uživatel poklikáním na pravé tlačítko myši v ovládacím prvku.

    • NM_RETURN Ovládací prvek má fokus vstupu a uživatel stiskl klávesu ENTER.

    • NM_SETFOCUS Ovládací prvek obdržel vstupní fokus.

Struktura TBNOTIFY obsahuje následující členy:

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
  • Hdr

    Informace společné pro všechny WM_NOTIFY zprávy

  • iItem

    Index tlačítka přidruženého k oznámení

  • tbButton

    TBBUTTON struktura, která obsahuje informace o tlačítku panelu nástrojů přidružené k oznámení.

  • cchText

    Počet znaků v textu tlačítka

  • lpszText

    Ukazatel na text tlačítka

Oznámení, která panel nástrojů odesílá, jsou následující:

  • TBN_BEGINADJUST

    Odesláno, když uživatel začne přizpůsobovat ovládací prvek panelu nástrojů. Ukazatel odkazuje na strukturu NMHDR , která obsahuje informace o oznámení. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_BEGINDRAG

    Odesláno, když uživatel začne přetahovat tlačítko v ovládacím prvku panelu nástrojů. Ukazatel odkazuje na strukturu TBNOTIFY . Člen iItem obsahuje index nuly přetahovaného tlačítka. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_CUSTHELP

    Odesláno, když uživatel zvolí tlačítko Nápověda v dialogovém okně Přizpůsobit panel nástrojů. Žádná návratová hodnota. Ukazatel odkazuje na strukturu NMHDR , která obsahuje informace o oznamovací zprávě. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_ENDADJUST

    Odesláno, když uživatel přestane přizpůsobovat ovládací prvek panelu nástrojů. Ukazatel odkazuje na strukturu NMHDR , která obsahuje informace o oznamovací zprávě. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_ENDDRAG

    Odesláno, když uživatel přestane přetahovat tlačítko v ovládacím prvku panelu nástrojů. Ukazatel odkazuje na strukturu TBNOTIFY . Člen iItem obsahuje index nuly přetahovaného tlačítka. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_GETBUTTONINFO

    Odesláno, když uživatel upravuje ovládací prvek panelu nástrojů. Panel nástrojů používá tuto zprávu oznámení k načtení informací potřebných v dialogovém okně Přizpůsobit panel nástrojů. Ukazatel odkazuje na strukturu TBNOTIFY . Člen iItem určuje index tlačítka založený na nule. Členové pszText a cchText určují adresu a délku textu aktuálního tlačítka ve značce. Aplikace by měla vyplnit strukturu informacemi o tlačítku. Vrátí hodnotu TRUE , pokud se informace o tlačítku zkopírovaly do struktury, nebo nePRAVDA jinak.

  • TBN_QUERYDELETE

    Odesláno, když uživatel upravuje panel nástrojů, aby určil, jestli může být tlačítko odstraněno z ovládacího prvku panelu nástrojů. Ukazatel odkazuje na strukturu TBNOTIFY . Člen iItem obsahuje nulový index tlačítka, který se má odstranit. Vrácením hodnoty TRUE povolíte odstranění tlačítka nebo NEPRAVDA , aby se zabránilo odstranění tlačítka.

  • TBN_QUERYINSERT

    Odesláno, když uživatel upravuje ovládací prvek panelu nástrojů, aby určil, jestli se tlačítko může vložit doleva od daného tlačítka. Ukazatel odkazuje na strukturu TBNOTIFY . Člen iItem obsahuje index nuly tlačítka, který se má vložit. Vrácením hodnoty TRUE povolíte vložení tlačítka před dané tlačítko nebo NEPRAVDA , aby se tlačítko nevkládaly.

  • TBN_RESET

    Odesláno, když uživatel resetuje obsah dialogového okna Přizpůsobit panel nástrojů. Ukazatel odkazuje na strukturu NMHDR , která obsahuje informace o oznamovací zprávě. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

  • TBN_TOOLBARCHANGE

    Odesláno poté, co uživatel přizpůsobil ovládací prvek panelu nástrojů. Ukazatel odkazuje na strukturu NMHDR , která obsahuje informace o oznamovací zprávě. Obslužná rutina nemusí vracet žádnou konkrétní hodnotu.

Viz také

Používání atributu CToolBarCtrl
Ovládací prvky