Alright, I was wondering if maxgui can minimize programs to system tray. I seen the winapi examples, I want pure cross compatibility. Thanks!
~Jon Basniak
~Jon Basniak
' Windows only, I probably should make this cross-compatible ?win32 ' --------------------------------------------------------------- ' Import external functions ' --------------------------------------------------------------- Extern "Win32" Function Shell_NotifyIcon:Int(iMessage:Int,pbNotifyicondata:Byte Ptr) = "Shell_NotifyIconA@8" Function Shell_LoadImage:Int(iInstance:Int,strName$z,iType:Int,iDesiredX:Int,iDesiredY:Int,iLoad:Int) = "LoadImageA@24" End Extern ' --------------------------------------------------------------- ' Type: tSystemTrayWindow ' Description: Holds details on a system tray minimized window ' --------------------------------------------------------------- Type tSystemTrayWindow ' ------------------------------------------------ ' Junk to keep track of ' ------------------------------------------------ Field f_hNID:tNotifyIconData Field f_hPanel:TGadget Field f_hWindow:TGadget ' ------------------------------------------------ ' Method: DoubleClicked ' Description: Returns true if double clicked ' ------------------------------------------------ Method DoubleClicked:Int() Return (EventSource()=f_hPanel And EventX()=WM_LBUTTONDBLCLK) End Method ' ------------------------------------------------ ' Function: Create ' Description: Creates a new instance of tSystemTrayWindow ' and returns it ' ------------------------------------------------ Function create:tSystemTrayWindow() Return (New tSystemTrayWindow) End Function End Type ' --------------------------------------------------------------- ' Type: tNotifyIconData ' Description: Used to pass data to the windows os about a ' system tray icon ' --------------------------------------------------------------- Type tNotifyIconData ' ------------------------------------------------ ' Neccessary fields ' ------------------------------------------------ Field f_iSize:Int Field f_iHWND:Int Field f_iID:Int Field f_iFlags:Int Field f_iCallbackMessage:Int Field f_iIcon:Int ' HICON Field f_lTip:Long ' array [0..63] of AnsiChar; Field f_lTip2:Long Field f_lTip3:Long Field f_lTip4:Long Field f_lTip5:Long Field f_lTip6:Long Field f_lTip7:Long Field f_lTip8:Long ' ------------------------------------------------ ' Function: Create ' Description: Creates a new instance of tNotifyIconData ' and returns it ' ------------------------------------------------ Function create:tNotifyIconData() Return (New tNotifyIconData) End Function EndType ' --------------------------------------------------------------- ' Type: tSystemTrayManager ' Description: Responsible minimizing windows to the system tray ' This is set as abstract to stop anyone creating ' an instance of it. Everything in this should be ' global. ' --------------------------------------------------------------- Type tSystemTrayManager Abstract ' ------------------------------------------------ ' System tray icon constants ' ------------------------------------------------ Const c_iNIM_ADD:Int = 0 Const c_iNIM_MODIFY:Int = 1 Const c_iNIM_DELETE:Int = 2 Const c_iNIM_SETFOCUS:Int = 3 Const c_iNIM_SETVERSION:Int = 4 Const c_iNIF_MESSAGE:Int = $00000001 Const c_iNIF_ICON:Int = $00000002 Const c_iNIF_TIP:Int = $00000004 Const c_iNIF_STATE:Int = $00000008 Const c_iNIF_INFO:Int = $00000010 Const c_iNIF_GUID:Int = $00000020 Const c_iIMAGE_BITMAP:Int = 0 Const c_iIMAGE_ICON:Int = 1 Const c_iIMAGE_CURSOR:Int = 2 Const c_iIMAGE_ENHMETAFILE:Int = 3 Const c_iLR_DEFAULTSIZE:Int = 64 Const c_iLR_DEFAULTCOLOR:Int = 0 Const c_iLR_MONOCHROME:Int = 1 Const c_iLR_COLOR:Int = 2 Const c_iLR_COPYRETURNORG:Int = 4 Const c_iLR_COPYDELETEORG:Int = 8 Const c_iLR_LOADFROMFILE:Int = 16 Const c_iLR_LOADTRANSPARENT:Int = 32 Const c_iLR_LOADREALSIZE:Int = 128 Const c_iLR_LOADMAP3DCOLORS:Int = 4096 Const c_iLR_CREATEDIBSECTION:Int = 8192 Const c_iLR_COPYFROMRESOURCE:Int = $4000 Const c_iLR_SHARED:Int = 32768 ' ------------------------------------------------ ' Function: m_LoadIcon ' Description: Loads a gdi icon using the win api ' and returns it ' ------------------------------------------------ Function m_LoadIcon:Int(strFilename:String,iWidth:Int=16,iHeight:Int=16,iFlags:Int=c_iLR_SHARED) Return Shell_LoadImage(0,strFilename,c_iIMAGE_ICON,iWidth,iHeight,c_iLR_LOADFROMFILE|iFlags) End Function ' ------------------------------------------------ ' Function: m_SetNotifyIconDataTip ' Description: Sets the tooltip of the system ' tray icon ' ------------------------------------------------ Function m_SetNotifyIconDataTip(hNid:tNotifyIconData, strTip:String) MemClear(Varptr hNid.f_lTip, 64) If strTip.Length > 0 Then Local p:Byte Ptr = strTip.ToCString() If strTip.Length < 64 Then MemCopy( Varptr hNid.f_lTip, p, strTip.Length) Else MemCopy( Varptr hNid.f_lTip, p, 63) EndIf MemFree(p) EndIf End Function ' ------------------------------------------------ ' Function: WindowToSystemTray ' Description: Minimizes a window to the ' system tray ' ------------------------------------------------ Function WindowToSystemTray:tSystemTrayWindow(hWindow:tGadget,strIconFile:String="",strTooltip:String="") ' Hide window HideGadget(hWindow) ' Create system tray window Local hWin:tSystemTrayWindow = tSystemTrayWindow.Create() hWin.f_hWindow = hWindow hWin.f_hPanel = CreatePanel(0,0,0,0,hWindow,PANEL_ACTIVE) ' Create icon details hWin.f_hNID = tNotifyIconData.Create() hWin.f_hNID.f_iSize = SizeOf(tNotifyIconData) hWin.f_hNID.f_iHWND = QueryGadget(hWin.f_hPanel,QUERY_HWND) hWin.f_hNID.f_iID = 0 hWin.f_hNID.f_iCallbackMessage = WM_MOUSEMOVE If FileType(strIconFile) = 1 Then hWin.f_hNID.f_iIcon = m_LoadIcon(strIconFile) hWin.f_hNID.f_iFlags = c_iNIF_MESSAGE|c_iNIF_TIP|c_iNIF_ICON ' Set tooltip and minimze to tray m_SetNotifyIconDataTip(hWin.f_hNID,strTooltip) Shell_NotifyIcon(c_iNIM_ADD,hWin.f_hNID) ' Return window Return hWin End Function ' ------------------------------------------------ ' Function: WindowFromSystemTray ' Description: Maximizes a window from the ' system tray ' ------------------------------------------------ Function WindowFromSystemTray(hWin:tSystemTrayWindow) ' Show window ShowGadget(hWin.f_hWindow) ' Free panel FreeGadget(hWin.f_hPanel) ' Delete icon Shell_NotifyIcon(c_iNIM_DELETE,hWin.f_hNID) End Function End Type ?
SuperStrict Framework brl.D3D7Max2D Import brl.GlMax2D Import brl.Timer Import brl.System Import brl.EventQueue Import brl.Event Import MaxGUI.Drivers ?win32 ' --------------------------------------------------------------- ' Import external functions ' --------------------------------------------------------------- Extern "Win32" Function Shell_NotifyIcon:Int(iMessage:Int,pbNotifyicondata:Byte Ptr) = "Shell_NotifyIconA@8" Function Shell_LoadImage:Int(iInstance:Int,strName$z,iType:Int,iDesiredX:Int,iDesiredY:Int,iLoad:Int) = "LoadImageA@24" End Extern ' --------------------------------------------------------------- ' Type: tSystemTrayWindow ' Description: Holds details on a system tray minimized window ' --------------------------------------------------------------- Type tSystemTrayWindow ' ------------------------------------------------ ' Junk to keep track of ' ------------------------------------------------ Field f_hNID:tNotifyIconData Field f_hPanel:TGadget Field f_hWindow:TGadget ' ------------------------------------------------ ' Method: DoubleClicked ' Description: Returns true if double clicked ' ------------------------------------------------ Method DoubleClicked:Int() Return (EventSource()=f_hPanel And EventX()=WM_LBUTTONDBLCLK) End Method ' ------------------------------------------------ ' Function: Create ' Description: Creates a new instance of tSystemTrayWindow ' and returns it ' ------------------------------------------------ Function Create:tSystemTrayWindow() Return (New tSystemTrayWindow) End Function End Type ' --------------------------------------------------------------- ' Type: tNotifyIconData ' Description: Used to pass data to the windows os about a ' system tray icon ' --------------------------------------------------------------- Type tNotifyIconData ' ------------------------------------------------ ' Neccessary fields ' ------------------------------------------------ Field f_iSize:Int Field f_iHWND:Int Field f_iID:Int Field f_iFlags:Int Field f_iCallbackMessage:Int Field f_iIcon:Int ' HICON Field f_lTip:Long ' array [0..63] of AnsiChar; Field f_lTip2:Long Field f_lTip3:Long Field f_lTip4:Long Field f_lTip5:Long Field f_lTip6:Long Field f_lTip7:Long Field f_lTip8:Long ' ------------------------------------------------ ' Function: Create ' Description: Creates a new instance of tNotifyIconData ' and returns it ' ------------------------------------------------ Function Create:tNotifyIconData() Return (New tNotifyIconData) End Function EndType ' --------------------------------------------------------------- ' Type: tSystemTrayManager ' Description: Responsible minimizing windows to the system tray ' This is set as abstract to stop anyone creating ' an instance of it. Everything in this should be ' global. ' --------------------------------------------------------------- Type tSystemTrayManager Abstract ' ------------------------------------------------ ' System tray icon constants ' ------------------------------------------------ Const c_iNIM_ADD:Int = 0 Const c_iNIM_MODIFY:Int = 1 Const c_iNIM_DELETE:Int = 2 Const c_iNIM_SETFOCUS:Int = 3 Const c_iNIM_SETVERSION:Int = 4 Const c_iNIF_MESSAGE:Int = $00000001 Const c_iNIF_ICON:Int = $00000002 Const c_iNIF_TIP:Int = $00000004 Const c_iNIF_STATE:Int = $00000008 Const c_iNIF_INFO:Int = $00000010 Const c_iNIF_GUID:Int = $00000020 Const c_iIMAGE_BITMAP:Int = 0 Const c_iIMAGE_ICON:Int = 1 Const c_iIMAGE_CURSOR:Int = 2 Const c_iIMAGE_ENHMETAFILE:Int = 3 Const c_iLR_DEFAULTSIZE:Int = 64 Const c_iLR_DEFAULTCOLOR:Int = 0 Const c_iLR_MONOCHROME:Int = 1 Const c_iLR_COLOR:Int = 2 Const c_iLR_COPYRETURNORG:Int = 4 Const c_iLR_COPYDELETEORG:Int = 8 Const c_iLR_LOADFROMFILE:Int = 16 Const c_iLR_LOADTRANSPARENT:Int = 32 Const c_iLR_LOADREALSIZE:Int = 128 Const c_iLR_LOADMAP3DCOLORS:Int = 4096 Const c_iLR_CREATEDIBSECTION:Int = 8192 Const c_iLR_COPYFROMRESOURCE:Int = $4000 Const c_iLR_SHARED:Int = 32768 ' ------------------------------------------------ ' Function: m_LoadIcon ' Description: Loads a gdi icon using the win api ' and returns it ' ------------------------------------------------ Function m_LoadIcon:Int(strFilename:String,iWidth:Int=16,iHeight:Int=16,iFlags:Int=c_iLR_SHARED) Return Shell_LoadImage(0,strFilename,c_iIMAGE_ICON,iWidth,iHeight,c_iLR_LOADFROMFILE|iFlags) End Function ' ------------------------------------------------ ' Function: m_SetNotifyIconDataTip ' Description: Sets the tooltip of the system ' tray icon ' ------------------------------------------------ Function m_SetNotifyIconDataTip(hNid:tNotifyIconData, strTip:String) MemClear(Varptr hNid.f_lTip, 64) If strTip.Length > 0 Then Local p:Byte Ptr = strTip.ToCString() If strTip.Length < 64 Then MemCopy( Varptr hNid.f_lTip, p, strTip.Length) Else MemCopy( Varptr hNid.f_lTip, p, 63) EndIf MemFree(p) EndIf End Function ' ------------------------------------------------ ' Function: WindowToSystemTray ' Description: Minimizes a window to the ' system tray ' ------------------------------------------------ Function WindowToSystemTray:tSystemTrayWindow(hWindow:tGadget,strIconFile:String="",strTooltip:String="") ' Hide window HideGadget(hWindow) ' Create system tray window Local hWin:tSystemTrayWindow = tSystemTrayWindow.Create() hWin.f_hWindow = hWindow hWin.f_hPanel = CreatePanel(0,0,0,0,hWindow,PANEL_ACTIVE) ' Create icon details hWin.f_hNID = tNotifyIconData.Create() hWin.f_hNID.f_iSize = SizeOf(tNotifyIconData) hWin.f_hNID.f_iHWND = QueryGadget(hWin.f_hPanel,QUERY_HWND) hWin.f_hNID.f_iID = 0 hWin.f_hNID.f_iCallbackMessage = WM_MOUSEMOVE If FileType(strIconFile) = 1 Then hWin.f_hNID.f_iIcon = m_LoadIcon(strIconFile) hWin.f_hNID.f_iFlags = c_iNIF_MESSAGE|c_iNIF_TIP|c_iNIF_ICON ' Set tooltip and minimze to tray m_SetNotifyIconDataTip(hWin.f_hNID,strTooltip) Shell_NotifyIcon(c_iNIM_ADD,hWin.f_hNID) ' Return window Return hWin End Function ' ------------------------------------------------ ' Function: WindowFromSystemTray ' Description: Maximizes a window from the ' system tray ' ------------------------------------------------ Function WindowFromSystemTray(hWin:tSystemTrayWindow) ' Show window ShowGadget(hWin.f_hWindow) ' Free panel FreeGadget(hWin.f_hPanel) ' Delete icon Shell_NotifyIcon(c_iNIM_DELETE,hWin.f_hNID) End Function End Type ? Global Window:TGadget = CreateWindow:TGadget("Window14",261,106,141,143,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS ) 'Global WindowToSystemTray:tSystemTrayManager Global ListBox1:TGadget = CreateListBox:TGadget(27,28,80,100,Window:TGadget,Null) AddGadgetItem( ListBox1:TGadget,"Item1",GADGETITEM_DEFAULT ) Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_WINDOWSIZE WindowToSystemTray(Window,"","") End Select Forever