After triggering an event, I attempt to
exit the program gracefully. However,
it appears that the program will not
exit, until I move the mouse over the
dialog or the icon in the system-tray!
Any thoughts anyone ?
Here's most of the code I'm using:
Thanks
Mike
-------------
mwm
exit the program gracefully. However,
it appears that the program will not
exit, until I move the mouse over the
dialog or the icon in the system-tray!
Any thoughts anyone ?
Here's most of the code I'm using:
Code:
'----------------------------------- #COMPILE EXE #RESOURCE "SBRICO.PBR" #INCLUDE "d:\pbdll60\winapi\WIN32API.INC" %WM_TRAYICON = %WM_USER + 100 %WM_TRIGGER = %WM_TIMECHANGE GLOBAL hInst AS LONG GLOBAL MyEvent AS LONG FUNCTION WINMAIN (BYVAL CurInst AS LONG, _ BYVAL PrvInst AS LONG, _ CmdLine AS ASCIIZ PTR, _ BYVAL CmdShow AS LONG) EXPORT AS LONG hInst = CurInst ' Initialize DIALOGBox hInst, BYVAL 100&, %HWND_DESKTOP, CODEPTR(Main_Callback) END FUNCTION FUNCTION Main_Callback(BYVAL hDlg AS LONG, BYVAL wMsg AS LONG, BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG STATIC hMenu AS LONG STATIC ti AS NOTIFYICONDATA STATIC p AS POINTAPI LOCAL result& SELECT CASE wMsg CASE %WM_INITDIALOG ' Get Menu Handle hMenu = GetSubMenu(LoadMenu(hInst, "POPUPMENU"), 0) ' Add tray icon ti.cbSize = SIZEOF(ti) ti.hWnd = hDlg ti.uID = hInst ti.uFlags = %NIF_ICON OR %NIF_MESSAGE OR %NIF_TIP ti.uCallbackMessage = %WM_TRAYICON ti.hIcon = LoadIcon(hInst, "SBR1") ti.szTip = "Schedule Reboot" Shell_NotifyIcon %NIM_ADD, ti DestroyIcon ti.hIcon mHwd = hDlg FUNCTION = 1 CASE %WM_TRAYICON SELECT CASE LOWRD(lParam) ' Left button press CASE %WM_LBUTTONDOWN IF IsWindowVisible(hDlg) = %FALSE THEN ShowWindow hDlg, %SW_SHOW END IF ' Right button press CASE %WM_RBUTTONDOWN IF IsWindowVisible(hDlg) = %FALSE THEN SetForegroundWindow hDlg GetCursorPos p TrackPopupMenu hMenu, 0, p.x, p.y, 0, hDlg, BYVAL %NULL Postmessage hDlg, %WM_NULL, 0, 0 END IF END SELECT CASE %WM_TRIGGER IF MyEvent THEN ' Trigger - to close program ' Here's where the problem is! ' When this is triggered, the program ' waits for the mouse to move over either ' the icon or the dialog, before the program ' actually ends! ' Why is waiting for the mouse-movement ????? CALL PostQuitMessage(0) FUNCTION = 1 EXIT FUNCTION END IF CASE %WM_DESTROY ' ** Remove the tray icon if the application is closed Shell_NotifyIcon %NIM_DELETE, ti CASE %WM_COMMAND SELECT CASE LOWRD(wParam) CASE 101 ' Do something MSGBOX "Okay" CASE %IDOK ' Display the about box DialogBox hInst, BYVAL 101&, %HWND_DESKTOP, CODEPTR(AboutProc) CASE %IDCANCEL ' exit out quickly EndDialog hDlg, 0 END SELECT CASE %WM_SYSCOMMAND ' If minimize or close pressed - hide SELECT CASE LOWRD(wParam) CASE %SC_MINIMIZE ShowWindow hDlg, %SW_HIDE FUNCTION = 1 EXIT FUNCTION CASE %SC_CLOSE ShowWindow hDlg, %SW_HIDE FUNCTION = 1 EXIT FUNCTION END SELECT END SELECT END FUNCTION FUNCTION AboutProc(BYVAL hDlg AS LONG, BYVAL wMsg AS LONG, BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG LOCAL result& SELECT CASE wMsg CASE %WM_INITDIALOG FUNCTION = 1 CASE %WM_COMMAND IF LOWRD(wParam) = %IDOK THEN EndDialog hDlg, 0 FUNCTION = 1 END IF END SELECT END FUNCTION
Mike
-------------
mwm
Comment