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.