Pictogramele din «tava de sistem»
Următoarele câmpuri - hWnd și UID - sunt folosite pentru a identifica pictograma. Mai mult decât atât fereastra aplicației (de obicei, principal) hWnd corespunzătoare și uID poate fi arbitrară și este utilizat pentru a distinge pictograme. Dacă activați mesajul notificării (uCallbackMessage, a se vedea. De mai jos), acesta va fi trimis la această fereastră.
câmp UFlags indică care dintre câmpurile rămase conțin informații (o combinație de steaguri biți):
- NIF_ICON - Icon
- NIF_MESSAGE - mesaj de fereastră
- NIF_TIP - vârf (vârful instrument)
- NIF_STATE - stat (din versiunea 5)
- NIF_INFO - tooltip extins (vârful instrument), care apare în „balon» (balon)
- NIF_GUID - rezervat pentru versiunea 6.
Câmpul HICON - mânerul pictogramei.
Pictograma tavă afișează dimensiunea de 16 * 16.
Pictogramele de resurse poate include mai multe imagini de diferite dimensiuni. Asigurați-vă că pentru a adăuga o imagine 16 * 16 în viața ta.
Câmpul szTip - carduri de linie de până la 64 (versiunea 5 - până la 128) caractere.
linia de ajutor este de tip TCHAR [], prin urmare, de a lucra cu ea trebuie să utilizați caracteristici portabile, și cel mai important, specificați în mod corect dimensiunea, în caractere, nu bytes: sizeof (nid.szTip) / sizeof (nid.szTip [0])
Prelucrare eveniment
Trey prinde evenimentele mouse-ului (incepand cu versiunea 5, tastatura: un meniu contextual) și le trimite la fereastra cu PostMessage (hWnd, uCallbackMessage, (wParam) UID, (lParam) uMsg). Asta este, dacă treceți cu mouse-ul peste pictograma, veți fi transferat WM_MOUSEMOVE al doilea parametru (lParam).
Informațiile însoțitoare (coordonate, cheile de stare) este trimis, și ar trebui să fie extrase funcții WinAPI corespunzătoare (GetCursorPos).
O aplicație poate selecta orice cod pentru a comunica (uCallbackMessage), ca regulă, sau numărul de WM_USER + ..., WM_APP + ..., sau înregistrat în sistem folosind RegisterWindowMessage ().
manipulant mesaj simplu
Context Menu acceptat pentru a arăta ca răspuns la un clic dreapta, care este WM_RBUTTONDOWN - WM_RBUTTONUP.
Există o subtilitate: utilizatorul poate face clic pe pictograma, și apoi să ia departe butonul mouse-ului este eliberat. Apoi apăsați din nou pentru a reveni mouse-ul pentru a da drumul. Pentru pictogramele va arăta ca un clic lent sau un mic drag-n-drop. Comune și la alte cazuri, o cale de ieșire - de captare a mouse-ului (:: SetCapture) nu se aplică, astfel încât toate acțiunile sunt efectuate pe „front crescător»: WM_xBUTTONDOWN (un singur click), WM_xBUTTONDBLCLK (dublu-clic).
efecte speciale
Cum de a afișa un meniu contextual
Acest lucru se face în același mod ca și în orice alt caz. Singura diferență - este faptul că coordonatele mouse-ului nu sunt transferate ca parte a mesajului, și ei vor trebui să ia în mod direct.
Dacă nu suna SetForegroundWindow (hWnd), meniul nu poate fi închis în mod automat la un click de mouse-ului în străinătate.
După cum puteți vedea, nimic complicat.
Resursele sunt stocate „bara de meniu» (bare de meniu), destinate a fi încorporate în fereastra. În cazul în care prezintă o funcție TrackPopupMenu, vom vedea o fâșie îngustă pe verticală fără text.
Prin urmare, trebuie fie să creați un „meniu pop-up“ (meniu pop-up) funcția CreatePopupMenu (), sau pentru a lua un submeniu (care, prin definiție, este un „pop-up“). Prin urmare, resursa meniului apare ca o bandă cu un element (numărul 0), în care toată funcționalitatea este compus din sub-meniuri.
Cum de a minimiza fereastra pentru bara de sistem
Reformulăm problema: cum se ascunde fereastra, scoate-l din buton din bara de activități și arată pictograma tavă?
Ascunde fereastra prin apelarea ShowWindow cu primul SW_MINIMIZE parametru, și apoi - SW_HIDE.
Restore - SW_SHOW (în acest caz, apare în bara de activități), apoi - SW_RESTORE (restaurată starea minimizată).
Atunci când utilizatorul comandă „colaps“ (apăsând butonul de pe bara de titlu a ferestrei, dublu-clic pe butonul din bara de activități, element de meniu sistem), mesajul este trimis la parametrul WM_SIZE SIZE_MINIMIZED. Handler-ul pentru acest eveniment poate minimiza fereastra la tava de sistem.
Mai jos este codul de pe WinAPI. Se transferă la MFC sau Wtl - exercițiu pentru cititor.
Împachetatoare pentru icoane
Sarcina Obertkok - pentru a simplifica lucrul cu o pictogramă. Ce funcționalitatea ei pot prelua?
În primul rând, apelurile API pentru a automatiza
- Completarea structurii NOTIFYICONDATA
- Layer pentru apeluri API
- Actualizați pictograma atunci când modificați parametrii săi
- Descărcați icoane din resurse
În al doilea rând, utilizatorul eliminând necesitatea de a atașa o pictogramă la ferestre personalizate:
- Crearea unei cutie de transport comun (latent)
- Pictograma de înregistrare centralizată
În al treilea rând, simplificarea evenimentelor de manipulare
- Înregistrare centralizată a manipulare eveniment de la icoane
- Simplu și flexibil de manipulare sintaxă
În cele din urmă, automatizarea acțiunilor comune
- Afișați meniul contextual
- Minimizarea ferestrelor la tava
Un exemplu de astfel de înveliș - Biblioteca ShellIcons (scris de mine).
bibliotecă ShellIcons
ShellIcons scris în Visual C ++ cu MFC și fără utilizarea unui minim de utilizare STL. Cu toate acestea, din cauza simplității sale cu ușurință transferate către orice tehnologie.
Biblioteca este clase
- CShellIcon - înfășurați structura NOTIFYICONDATA
- CExtShellIcon. CShellIcon protejat - înfășurați pictogramele atașate la un anumit operator.
- CExtShellIconHost - icoane prototip de vehicul, abstrase din fereastra
- CWinShellIconHost - icoane media pe fereastra creată prin intermediul WinAPI pur
- _ShellIconNote - interfață de tratare a evenimentului
- CShellIconNote - punerea în aplicare simplă a unui handler cu metodele virtuale „pentru toate ocaziile“
Abstractizare din caseta de mass-media a fost făcută deoarece „Sandbox“ utilizat MFC, și prima punere în aplicare a mass-media a fost MFC-shnaya.
CShellIcon
CHideWindow poate minimiza fereastra de la tava de sistem și restaura-l de acolo. Folding - inițiat de client (intercepteaza box a minimiza evenimentul). Desfasurandu - prin dublu-clic pe pictograma.
Icon text și indicii luate de la fereastra. Dacă titlul ferestrei sa schimbat, pur și simplu apel metoda de actualizare () pentru a actualiza pictogramele din bara de sistem.
Obiect utilizează CWinShellIconHost pictograme media, permițând, în primul rând, să aloce dinamic numere de icoane, și în al doilea rând, nu forțați clienții să se ocupe de propriile evenimente de notificare.
Exemplu de utilizare. Dialog cu pictograma din tava de sistem.
Acesta este un simplu MFC-aplicație care demonstrează toate tehnicile descrise mai sus.
- Adăugarea și modificarea icoane
- Prelucrare eveniment
- Afișează un meniu de comenzi rapide
- Minimizarea la tava
- Local (CShellIcon) și Icoane centralizate (CWinShellIconHost)
Asta e tot.