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 nastavíte panel nástrojů na 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 to není. Panel nástrojů odešle zprávu TBN_TOOLBARCHANGE oznámení, která signaluje 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 oznámení zprávu TBN_BEGINDRAG 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 oznámení zprávy TBN_ENDDRAG ke signalizování konce 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. V dalším kroku panel nástrojů začíná odesílat řadu oznamovacích zpráv TBN_QUERYINSERT, čímž se zjistí, zda panel nástrojů umožňuje vložení tlačítek. Když nadřazené okno vrátí hodnotu TRUE, 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 zneaktivní ta tlačítka, která nelze odstranit.

Kdykoli ovládací prvek panelu nástrojů potřebuje získat informace o tlačítku v dialogovém okně Přizpůsobit panel nástrojů, odešle oznámení zprávu TBN_GETBUTTONINFO, která určuje index 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 vybere tlačítko Nápověda, ovládací prvek panelu nástrojů odešle oznámení zprávu TBN_CUSTHELP. Nadřazené okno by mělo reagovat zobrazením informací nápovědy. Dialogové okno odešle oznámení TBN_RESET, 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 lze je 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

    Členská funkce, která se volá 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 umístěna do LRESULT, na který ukazuje výsledek.

U každé zprávy pNotifyStruct odkazuje na strukturu NMHDR nebo na strukturu TBNOTIFY . 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

    Držadlo 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 dvakrát kliknul 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.

  • iPoložka

    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 od nuly tlačítka, které je přetahováno. 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 od nuly tlačítka, které je přetahováno. 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. Položky pszText a cchText určují adresu a délku textu aktuálního tlačítka v počtu znaků. Aplikace by měla vyplnit strukturu informacemi o tlačítku. Vrátí TRUE, pokud byly informace o tlačítku zkopírovány do struktury, nebo FALSE 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 tlačítka, který začíná od nuly a má být vložen. Vrátit TRUE pro umožnění vložení tlačítka před dané tlačítko nebo FALSE pro zamezení vložení tlačítka.

  • 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žití atributu CToolBarCtrl
Ovládací prvky