HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Tálcán megjelenő ikon eseményei


Példaprogram letöltése

14501 bájt

Az elmúlt hetekben jelentek meg cikkek a saját készítésű Tálca-ikonok témakörében. A saját készítésű komponensek előnye, hogy az alkalmazás ikonjának eseményei precízebben feldolgozhatók, valamint képességeik meghaladják a VS.NET beépített NotifyIcon komponens lehetőségeit. Cikkünkben bemutatunk egy példát arra vonatkozóan, hogy miként lehet a megjelenő ikonhoz gyorsmenüt kapcsolni, valamint hogyan dolgozható fel az ikon fölött előbukkanó, informatív üzenetablakra történő kattintás eseménye.

Cikkünkben nem részletezzük a létrehozást teljes egészében, csupán a gyorsmenü-készítés, és a buborék-üzenetablak eseményének feldolgozását tárgyaljuk.
A mellékelt példa NIComponent komponensét használja, mely megjelenít egy ikont az alkalmazás indulásakor a Tálcán, valamint megjeleníti szükség esetén a buborék-üzenetablakot. Az üzenetablakra kattintva elérhetjük, hogy elinduljon az Internet Explorer egy példánya, és betöltődjön a Software Online kezdőlapja.
A példa-alkalmazás a háttérben fut, az ikonra történő kattintáskor megjelenő gyorsmenü egyik pontjából lehet láthatóvá tenni.
Gyorsmenü megjelenítése
Az ikont megvalósító komponensünk egy Form típusú tagobjektumon keresztül éri el funkcióit, az ikonhoz kapcsolódó műveleteket a Shell_NotifyIcon API metódussal végezzük el. A műveletek a Form tagobjektum ablakkezelőjét használják (Handle property).
A gyorsmenü megjelenítése érdekében a NotifyClass osztályban deklarálunk egy ContextMenu típusú tagot, melynek értéke a Form-ra felhelyezett ContextMenu komponens lesz.
private ContextMenu cMenu = null;
Ennek állítására természetesen létrehozunk egy property-t.
public ContextMenu ContextMenu
{
  set
  {
    cMenu = value;
  }
  get
  {
    return cMenu;
  }
}
Létrehoztunk egy saját típust a komponens eseményeihez.
public delegate void NIHandler(object sender, uint id);
Deklaráltunk egy eseménykezelőt a gyorsmenü megjelenítéséhez.
public event NIHandler RCNotify;
A NotifyForm osztály DefWndProc metódusát felülírva kaphatjuk el a felhasználó által az alkalmazás számára küldött üzeneteket. Az egér gombjának felengedéséhez rendeljük az RCNotify eseményt. Először meghatározzuk, hogy a kapott üzenet felhasználói üzenet-e, majd az üzenet paraméteréből lekérdezzük, hogy pontosan mi is volt az.
protected override void DefWndProc(ref Message msg)
{
  if(msg.Msg == 0x400)
  {
    uint msgId = (uint)msg.LParam;
    uint id = (uint)msg.WParam;
    switch(msgId)
    {
      ...
      case 0x205:
        if(RCNotify != null)
          RCNotify(this, id);
        break;
      ...
    }
    ...
  }
}
Az eseményre írtunk egy kezelőt.
private void OnRClick(object sender, uint id)
{
  ...
  POINT point = new POINT();
Az osztályban deklaráltunk egy struktúrát, mely az egérkurzor aktuális helyzetét tartalmazza a GetCursorPos metódus meghívása után.
  GetCursorPos(ref point);
Aktivizáljuk az ikon objektumot reprezentáló Form-ot.
  SetForegroundWindow(nForm.Handle);
Majd meghívjuk a ContextMenu objektum – mely az alkalmazás tagobjektuma – OnPopup metódusát.
  cMenu.GetType().InvokeMember("OnPopup", BindingFlags.NonPublic|BindingFlags.InvokeMethod|BindingFlags.Instance, null, cMenu, new Object[] {System.EventArgs.Empty});
Végül a TrackPopupMenuEx metódus segítségével megjelenítjük a menüt az egér pozíciójában.
  TrackPopupMenuEx(cMenu.Handle, 64, point.x, point.y, nForm.Handle, IntPtr.Zero);          
}
Egérkattintás a balon-üzenetpanelen
A DefWndProc metódusban fel kell dolgoznunk a ShowBallon metódussal létrehozott üzenetablak kattintás-eseményét.
...
case 0x405:
  if(CBNotify != null)
    CBNotify(this, id);
  break;
...
Gondoskodtunk róla, hogy az általunk deklarált esemény bekövetkezzen. A létrehozott kezelőmetódusban elindítunk egy Explorer példányt. Ehhez a COM komponenspalettáról ki kellett választanunk a Microsoft Internet Control ActiveX vezérlő elemet, és referenciaként a projektünkhöz kell adnunk. A hivatkozást elhelyezve a forráskód elején használhatók a komponens osztályai.
using SHDocVw;
Létrehozunk egy példányt a megfelelő osztályból.
InternetExplorer ie = new InternetExplorer();
IWebBrowserApp browser = (IWebBrowserApp)ie;
Láthatóvá tesszük.
browser.Visible = true;
Majd a Navigate metódussal a Software Online URL-jét betöltjük.
browser.Navigate("http://www.softwareonline.hu",ref o,ref o,ref o,ref o);

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 427. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |