Proper notifications from a SystrayIcon balloon message

Windows specific forum
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: Proper notifications from a SystrayIcon balloon message

Post by RASHAD »

Hi again merendo :)
I did some modifications to eliminate the conflict between PB and MS API

Code: Select all

    Structure MY_NOTIFYICONDATA
      cbSize.l
      hWnd.i
      uID.l
      uFlags.l
      uCallbackMessage.l
      hIcon.i
      szTip.s{128}
      dwState.l
      dwStateMark.l
      szInfo.s{256}
      StructureUnion
        uTimeout.l
        uVersion.l
      EndStructureUnion
      szInfoTitle.s{64}
      dwInfoFlags.l
    EndStructure

    #WINDOW = 0
    Enumeration
    #BUTTON_SHOW
    #BUTTON_HIDE
    #SYSTRAYICON
    EndEnumeration


Procedure MyCallback(WindowID, Message, wParam, lParam)
  ;If WindowID = WindowID(0)   
    If Message = #WM_NOTIFYICON ; Does that make sense?
      ;If wParam = #SYSTRAYICON
        Select lParam
          Case #NIN_BALLOONTIMEOUT
            Debug "Balloon timed out or was closed by the user"
            
          Case #NIN_BALLOONUSERCLICK
            Debug "Balloon got clicked by the user"
            
          Case #NIN_BALLOONHIDE
            Debug "Balloon got hidden"
            
;           Case #WM_MOUSEFIRST
;                  MessageRequester("Message", "Mouse Hover")
                     
          Case #WM_LBUTTONUP
             MessageRequester("Message", "Left Button clicked.")
             
          Case #WM_RBUTTONUP
             MessageRequester("Message", "Right Button clicked.")
          
          Case #WM_MBUTTONUP
             MessageRequester("Message", "Middle Button clicked.")
             
        EndSelect
      ;EndIf
    EndIf   
  ;EndIf              
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

    OpenWindow(#WINDOW, 0, 0, 200, 75, "Icontest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    ButtonGadget(#BUTTON_SHOW, 5, 5, 190, 30, "Show balloon message")
    ButtonGadget(#BUTTON_HIDE, 5, 40, 190, 30, "Hide balloon message")


    LoadImage(0, #PB_Compiler_Home + "\Examples\Sources - Advanced\Waponez II\Waponez.ico")

    ;AddSysTrayIcon(#SYSTRAYICON, WindowID(0), ImageID(0))
    ;SysTrayIconToolTip(#SYSTRAYICON, "Naah, I ain't no systray icon, I'm just cleanin' down 'ere.")    

    NIData.MY_NOTIFYICONDATA
    NIData\cbSize = SizeOf(MY_NOTIFYICONDATA)
    NIData\hWnd = WindowID(0)
    NIData\uID = #SYSTRAYICON
    NIData\uFlags = #NIF_ICON| #NIF_INFO | #NIF_MESSAGE |#NIF_TIP
    NIData\hIcon  = ImageID(0)
    NIData\szTip  = "Naah, I ain't no systray icon, I'm just cleanin' down 'ere."
    NIData\uCallbackMessage = #WM_NOTIFYICON
    NIData\uTimeout = 2
    NIData\uVersion = #NOTIFYICON_VERSION
    NIData\szInfoTitle = "Hey there!"
    NIData\dwInfoFlags = #NIIF_INFO
    
    Shell_NotifyIcon_(#NIM_ADD, NIData)
    
    SetWindowCallback(@MyCallback(), 0)

Repeat

    Select WaitWindowEvent()
      
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #BUTTON_SHOW:
            NIData\szInfo = "I'm just a small speech bubble."
            Shell_NotifyIcon_(#NIM_MODIFY, NIData)
          Case #BUTTON_HIDE:
            NIData\szInfo = ""
            Shell_NotifyIcon_(#NIM_MODIFY, NIData)
        EndSelect
        
      Case #PB_Event_CloseWindow
           Quit = 1
           
    EndSelect       
      
Until Quit = 1
Shell_NotifyIcon_(#NIM_DELETE, NIData)
End

Egypt my love
Post Reply