summary refs log tree commit diff stats
path: root/plugins/xtray/callbacks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/xtray/callbacks.cpp')
-rw-r--r--plugins/xtray/callbacks.cpp734
1 files changed, 734 insertions, 0 deletions
diff --git a/plugins/xtray/callbacks.cpp b/plugins/xtray/callbacks.cpp
new file mode 100644
index 00000000..636c114e
--- /dev/null
+++ b/plugins/xtray/callbacks.cpp
@@ -0,0 +1,734 @@
+/* X-Tray

+ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>

+ *

+ * X-Tray is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * X-Tray is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with X-Tray; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

+ */

+

+#define _WIN32_IE 0x0601

+

+#include <windows.h>

+#include <stdio.h>

+#include <commctrl.h>

+#include <tchar.h>

+#include "utility.h"

+#include "plugin.h"

+#include "xtray.h"

+#include "xchat.h"

+#include "callbacks.h"

+#include "resource.h"

+#include "sdTray.h"

+#include "sdAlerts.h"

+

+HWND	g_hPrefTabEvents;

+HWND	g_hPrefTabSettings;

+HWND	g_hPrefTabAlerts;

+HWND	g_hPrefTabAbout;

+bool	g_bCanQuit;

+int		g_iIsActive = 1;

+

+

+BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)

+{

+	TCHAR szTitle[10];

+	GetWindowText(hWnd, szTitle, 9);

+

+	if(_tcsstr(szTitle, _T("XChat [")))

+	{

+		g_hXchatWnd = hWnd;

+		return false;

+	}

+	

+	return true;

+}

+

+/***********************************************************************************************/

+/******* our xchat event call back, get the name and info for each event and save it ***********/

+/******* for our alerts later														***********/

+/***********************************************************************************************/

+int event_cb(char *word[], void *userdata)

+{

+	int iEvent = (int)userdata;

+

+	if(iEvent > 10 && iEvent != 21)

+		return XCHAT_EAT_NONE;

+

+	/***************************************************************************************/

+	/***** if the window is minimized or if we're allowed to show alerts when its not	 **/

+	/***** and if the option to show the specified alert is true and if we're even		**/

+	/***** allowed to show alerts at all then we show them (a bit confusing but it works) **/

+	/***************************************************************************************/

+	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)) && (g_dwPrefs & (1<<iEvent)))

+	{	

+		/*********************************/

+		/*********** Our Buffers *********/

+		/*********************************/

+		char			szInfo[512];

+		char			szName[64];

+		DWORD			dwInfoFlags;

+		int iTime		= g_iTime*1000;

+		char *szTemp	= NULL;

+

+		if(g_dwPrefs & (1<<PREF_KAOI))

+		{

+			iTime = 0;

+		}

+

+		switch(iEvent)

+		{

+		case CHAN_HILIGHT:

+			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

+			_snprintf(szName, 64, "Hilight");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case CHAN_MESSAGE:

+			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

+			_snprintf(szName, 64, "Channel Message");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case CHAN_TOPIC_CHANGE:

+			_snprintf(szInfo, 512, "%s has changed the topic to %s", word[1], word[2]);

+			_snprintf(szName, 64, "Topic Change: %s", word[3]);

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case CHAN_INVITE:

+			_snprintf(szInfo, 512, "%s has invited you into %s", word[1], word[2]);

+			_snprintf(szName, 64, "Invite");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case CHAN_KICKED:

+			_snprintf(szInfo, 512, "Kicked from %s by %s:\r\n%s", word[2], word[3], word[4]);

+			_snprintf(szName, 64, "Kick");

+			dwInfoFlags = NIIF_WARNING;

+			break;

+		case CHAN_BANNED:

+			_snprintf(szInfo, 512, "Cannot join #%s You are banned.", word[1]);

+			_snprintf(szName, 64, "Banned");

+			dwInfoFlags = NIIF_WARNING;

+			break;

+		case CTCP_GENERIC:

+			_snprintf(szInfo, 512, "%s:\r\nCTCP %s", word[2], word[1]);

+			_snprintf(szName, 64, "CTCP");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case PMSG_RECEIVE:

+			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);

+			_snprintf(szName, 64, "Private Message");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case SERV_DISCONNECT:

+			_snprintf(szInfo, 512, "Disconnected\r\nError: %s", word[1]);

+			_snprintf(szName, 64, "Disconnect");

+			dwInfoFlags = NIIF_ERROR;

+			break;

+		case SERV_KILLED:

+			_snprintf(szInfo, 512, "Killed(%s(%s))", word[1], word[2]);

+			_snprintf(szName, 64, "Server Admin has killed you");

+			dwInfoFlags = NIIF_ERROR;

+			break;

+		case SERV_NOTICE:

+			_snprintf(szInfo, 512, "Notice:\r\n%s: %s", word[1], word[2]);

+			_snprintf(szName, 64, "Notice");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		case 11:

+			_snprintf(szInfo, 512, ":\r\n%s: %s", word[1], word[2]);

+			_snprintf(szName, 64, "Notice");

+			dwInfoFlags = NIIF_INFO;

+			break;

+		}

+

+		/**************************************************************************************/

+		/***** Use windows instead of balloons, and if its a window should we keep it open ****/

+		/***** indefinately?															   ****/

+		/**************************************************************************************/

+		szTemp = xchat_strip_color(szInfo);

+

+		if(g_dwPrefs & (1<<PREF_UWIOB))

+		{

+			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, szName, iTime);

+		}

+		else

+		{

+			ShowBalloon(g_hXchatWnd, 1, szTemp, szName, iTime, dwInfoFlags);

+		}

+

+		free(szTemp);

+	}

+

+	if(g_dwPrefs & (1<<PREF_BLINK))

+	{

+		BlinkIcon(g_hXchatWnd, 1, g_hIcons[0], g_hIcons[(iEvent+1)], 700, 5);

+		

+	}

+

+	/***********************************/

+	/***** pass the events to xchat ****/

+	/***********************************/

+	return XCHAT_EAT_NONE;

+}

+

+int command_cb(char *word[], char *word_eol[], void *userdata)

+{

+	char szInfo[512];

+	char *szTemp	= NULL;

+	int iTime		= g_iTime*1000;

+

+	_snprintf(szInfo, 512, word_eol[2]);

+	szTemp = xchat_strip_color(szInfo);

+

+	if(g_dwPrefs & (1<<PREF_KAOI))

+	{

+		iTime = 0;

+	}

+

+	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)))

+	{

+		if(g_dwPrefs & (1<<PREF_UWIOB))

+		{

+			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, "Alert", iTime);

+		}

+		else

+		{

+			ShowBalloon(g_hXchatWnd, 1, szTemp, "Alert", iTime, NIIF_INFO);

+		}

+	}

+

+	free(szTemp);

+

+	return XCHAT_EAT_ALL;

+}

+

+LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	switch(msg)

+	{

+	case WM_CLOSE:

+		{

+			if((g_dwPrefs & (1<<PREF_MIOC)) && (g_bCanQuit == false))

+			{

+				/*******************************************/

+				/**** to autoaway or not to autoaway...  ***/

+				/*******************************************/

+				if(g_dwPrefs & (1<<PREF_AOM))

+				{

+					xchat_globally_away(g_szAway);

+				}

+

+				/**************************************************/

+				/**** Win32 API call to hide the window and	     **/

+				/**** save the fact that its minimized for later **/

+				/**************************************************/

+				g_iIsActive = 0;

+				ShowWindow(hWnd, SW_HIDE);

+

+				return 0;

+			}

+			else

+			{

+				if(g_hPrefDlg != NULL)

+				{

+					DestroyWindow(g_hPrefDlg);

+				}

+

+				StopBlink(hWnd, 1, g_hIcons[0]);

+				

+				if(sdAlertNum())

+				{

+					sdCloseAlerts();

+					HoldClose();

+					return 0;

+				}

+			}

+		}

+		break;

+	case WM_SIZE:

+		{

+			/******************************************/

+			/***** User wants to minimize xChat, ******/

+			/***** are we allowed to go to tray? ******/

+			/******************************************/

+			if((g_dwPrefs & (1<<PREF_TOT)) && (wparam == SIZE_MINIMIZED))

+			{

+				/*******************************************/

+				/**** to autoaway or not to autoaway...  ***/

+				/*******************************************/

+				if(g_dwPrefs & (1<<PREF_AOM))

+				{

+					xchat_globally_away(g_szAway);

+				}

+

+				/**************************************************/

+				/**** Win32 API call to hide the window and	     **/

+				/**** save the fact that its minimized for later **/

+				/**************************************************/

+				g_iIsActive = 0;

+				ShowWindow(hWnd, SW_HIDE);

+			}

+		}

+		break;

+	/**********************************/

+	/*** user clicked the tray icon ***/

+	/**********************************/

+	case WM_TRAYMSG:

+		{

+			switch(lparam)

+			{

+			case WM_LBUTTONDOWN:

+				{

+					if(!g_iIsActive)

+					{

+						/*********************************************************/

+						/*** 0: its hiden, restore it and show it, if autoaway ***/

+						/*** is on, set us as back							 ***/

+						/*********************************************************/

+						SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);

+						SetForegroundWindow(hWnd);

+						g_iIsActive = 1;

+

+						if(g_dwPrefs & (1<<PREF_AOM))

+						{

+							xchat_globally_back();

+						}

+					}

+					else

+					{

+						SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

+					}

+				}

+				break;

+			case WM_RBUTTONDOWN:

+				{

+					/******************************************/

+					/*** user wants to see the menu find out **/

+					/*** where the mouse is and show it	  **/

+					/******************************************/

+					POINT pt;

+					int iRet;

+

+					GetCursorPos(&pt);

+					SetForegroundWindow(hWnd);

+

+					ModifyMenu(g_hTrayMenu, 2, (MF_POPUP | MF_BYPOSITION), (UINT)setServerMenu(), _T("Away"));

+

+					Sleep(175);

+

+					iRet = TrackPopupMenuEx(g_hTrayMenu, (TPM_RETURNCMD | TPM_LEFTALIGN), pt.x, pt.y, hWnd, NULL);

+

+					/***********************************/

+					/*** nRet is the users selection, **/

+					/*** process it				   **/

+					/***********************************/

+					sdTrayProc(hWnd, iRet);

+				}

+				break;

+			}

+		}

+		break;

+	default:

+		{

+			/*****************************************************/

+			/*** the taskbar has been restarted, re-add our icon */

+			/*****************************************************/

+			if(msg == RegisterWindowMessage(_T("TaskbarCreated")))

+			{

+				char szVersion[64];

+				_snprintf(szVersion, 64, "XChat-WDK [%s]", xchat_get_info(ph, "version"));

+				AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG);

+			}

+		}

+		break;

+	}

+

+	return CallWindowProc(g_hOldProc, hWnd, msg, wparam, lparam);

+}

+

+/****************************************************/

+/*** process messages from the tray menu ************/

+/****************************************************/

+LRESULT CALLBACK sdTrayProc(HWND hWnd, int msg)

+{

+	switch(msg)

+	{

+	case ACT_EXIT:

+		{

+			g_bCanQuit = true;

+			PostMessage(hWnd, WM_CLOSE, 0, 0);

+		}

+		break;

+	case ACT_RESTORE:

+		{

+			/***********************************************/

+			/** user wants us to restore the xchat window **/

+			/** and of autoaway is on, set as back		**/

+			/***********************************************/

+			SendMessage(g_hXchatWnd, WM_SYSCOMMAND, SC_RESTORE, 0);

+			SetForegroundWindow(hWnd);

+			

+			if((!g_iIsActive) && (g_dwPrefs & (1<<PREF_AOM)))

+			{

+				xchat_globally_back();

+				g_iIsActive = 1;

+			}

+		}

+		break;

+	case ACT_SETTINGS:

+		{

+			ShowWindow(g_hPrefDlg, SW_SHOW);

+		}

+		break;

+	case ACT_AWAY:

+		{

+			xchat_globally_away(g_szAway);

+		}

+		break;

+	case ACT_BACK:

+		{

+			xchat_globally_back();

+		}

+		break;

+	default:

+		{

+			if(msg > 0)

+			{

+				xchat_set_context(ph, xchat_find_server(msg-1));

+

+				if(!xchat_get_info(ph, "away"))

+				{

+					xchat_away(g_szAway);

+				}

+				else

+				{

+					xchat_back();

+				}

+			}

+		}

+		break;

+	}

+

+	return 1;

+}

+

+int CALLBACK PrefProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	switch(msg)

+	{

+	case WM_INITDIALOG:

+		{

+			TCITEM tci1;

+			TCITEM tci2;

+			TCITEM tci3;

+			TCITEM tci4;

+

+			tci1.mask		= TCIF_TEXT;

+			tci1.pszText	= _T("Settings");

+			tci1.cchTextMax	= strlen("Settings");

+			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 0, (LPARAM)&tci1);

+

+			tci2.mask		= TCIF_TEXT;

+			tci2.pszText	= _T("Alerts");

+			tci2.cchTextMax	= strlen("Alerts");

+			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 1, (LPARAM)&tci2);

+

+			tci3.mask		= TCIF_TEXT;

+			tci3.pszText	= _T("Events");

+			tci3.cchTextMax	= strlen("Events");

+			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 2, (LPARAM)&tci3);

+

+			tci4.mask		= TCIF_TEXT;

+			tci4.pszText	= _T("About");

+			tci4.cchTextMax	= strlen("About");

+			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 3, (LPARAM)&tci4);

+

+

+			/***********************************************************************************/

+			/***********************************************************************************/

+			/***********************************************************************************/

+

+			g_hPrefTabSettings	= CreateDialog((HINSTANCE)g_hInstance,

+									MAKEINTRESOURCE(IDD_SETTINGS),

+									hWnd,		

+									(DLGPROC)SettingsProc);

+			SetDialog(g_hPrefTabSettings,	IDD_SETTINGS);

+

+			g_hPrefTabAlerts	= CreateDialog((HINSTANCE)g_hInstance,

+									MAKEINTRESOURCE(IDD_ALERTS),

+									hWnd,

+									(DLGPROC)AlertsProc);

+			SetDialog(g_hPrefTabAlerts,		IDD_ALERTS);

+

+			g_hPrefTabEvents	= CreateDialog((HINSTANCE)g_hInstance,

+									MAKEINTRESOURCE(IDD_EVENTS),

+									hWnd,		

+									(DLGPROC)EventsProc);

+			SetDialog(g_hPrefTabEvents,		IDD_EVENTS);

+

+			g_hPrefTabAbout		= CreateDialog((HINSTANCE)g_hInstance,

+									MAKEINTRESOURCE(IDD_ABOUT),

+									hWnd,

+									(DLGPROC)AboutProc);

+		}

+		break;

+	case WM_SHOWWINDOW:

+		{

+			if(wparam)

+			{

+				SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_SETCURSEL, 0, 0);

+				ShowWindow(g_hPrefTabSettings,	SW_SHOW);

+				ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+				ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+				ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+			}

+		}

+		break;

+	case WM_NOTIFY:

+		{

+			NMHDR *pData = (NMHDR *)lparam;

+

+			switch(pData->code)

+			{

+			case TCN_SELCHANGE:

+				{

+					switch(SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_GETCURSEL, 0, 0))

+					{

+					case 0:

+						{

+							ShowWindow(g_hPrefTabSettings,	SW_SHOW);

+							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+						}

+						break;

+					case 1:

+						{

+							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+							ShowWindow(g_hPrefTabAlerts,	SW_SHOW);

+							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+						}

+						break;

+					case 2:

+						{

+							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+							ShowWindow(g_hPrefTabEvents,	SW_SHOW);

+							ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+						}

+						break;

+					case 3:

+						{

+							ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+							ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+							ShowWindow(g_hPrefTabAbout,		SW_SHOW);

+						}

+						break;

+					}

+				}

+				break;

+			}

+		}

+		break;

+	case WM_CLOSE:

+		{

+			ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+			ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+			ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+			ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+			ShowWindow(hWnd,				SW_HIDE);

+			return TRUE;

+		}

+		break;

+	case WM_COMMAND:

+		{

+			switch(wparam)

+			{

+			case IDC_PREF_OK:

+				{

+					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);

+					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);

+					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);

+

+					SavePrefs(0);

+

+					ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+					ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+					ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+					ShowWindow(hWnd,				SW_HIDE);

+					return TRUE;

+				}

+				break;

+			case IDC_PREF_CANCEL:

+				{

+					ShowWindow(g_hPrefTabEvents,	SW_HIDE);

+					ShowWindow(g_hPrefTabSettings,	SW_HIDE);

+					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);

+					ShowWindow(g_hPrefTabAbout,		SW_HIDE);

+					ShowWindow(hWnd,				SW_HIDE);

+					return TRUE;

+				}

+				break;

+			case IDC_PREF_APPLY:

+				{

+					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);

+					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);

+					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);

+

+					SavePrefs(0);

+					return FALSE;

+				}

+				break;

+			}

+		}

+		break;

+	case WM_DESTROY:

+		{

+			SendMessage(g_hPrefTabEvents,	WM_CLOSE, 0, 0);

+			SendMessage(g_hPrefTabSettings,	WM_CLOSE, 0, 0);

+			SendMessage(g_hPrefTabAbout,	WM_CLOSE, 0, 0);

+			SendMessage(g_hPrefTabAlerts,	WM_CLOSE, 0, 0);

+		}

+		break;

+	}

+

+	return FALSE;

+}

+

+/****************************************************/

+/****************************************************/

+/****************************************************/

+LRESULT CALLBACK AlertsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	switch(msg)

+	{

+	case WM_CLOSE:

+		{

+			DestroyWindow(hWnd);

+			return TRUE;

+			break;

+		}

+		break;

+	case WM_COMMAND:

+		{

+			switch(LOWORD(wparam))

+			{

+			case PREF_AMAE:

+				{

+					SetToggle(hWnd, PREF_OSBWM,			PREF_AMAE, TRUE);

+					SetToggle(hWnd, PREF_UWIOB,			PREF_AMAE, TRUE);

+					SetToggle(hWnd, PREF_KAOI,			PREF_AMAE, TRUE);

+					

+					if(IsDlgButtonChecked(hWnd, PREF_AMAE))

+					{

+						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);

+						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);

+						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);

+						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);

+					}

+					else

+					{

+						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE);

+						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE);

+						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE);

+						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE);

+					}

+				}

+				break;

+			case PREF_UWIOB:

+				{

+					SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);

+					SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);

+				}

+				break;

+			case PREF_KAOI:

+				{

+					SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);

+					SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);

+				}

+				break;

+			}

+			break;

+		}

+	}

+

+	return FALSE;

+}

+

+/****************************************************/

+/****************************************************/

+/****************************************************/

+LRESULT CALLBACK AboutProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	if(msg == WM_CLOSE)

+	{

+		DestroyWindow(hWnd);

+		return true;

+	}

+

+	return FALSE;

+}

+

+/*****************************************************/

+/** Process the events for our event dialog **********/

+/*****************************************************/

+LRESULT CALLBACK EventsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	if(msg == WM_CLOSE)

+	{

+		DestroyWindow(hWnd);

+		return true;

+	}

+

+	return FALSE;

+}

+

+/*****************************************************/

+/** Process the events for our settings dialog this **/

+/** is alot more complicated because options are	**/

+/** enabled/disabled based on the state of others   **/

+/*****************************************************/

+LRESULT CALLBACK SettingsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	if(msg == WM_CLOSE)

+	{

+		DestroyWindow(hWnd);

+		return true;

+	}

+

+	return FALSE;

+}

+

+/*****************************************************/

+/** this is the hotkey message  processing function **/

+/** this window is always open and ready to be told **/

+/** if someone has hit the hotkey, if they did, we  **/

+/** need to close out all of the tray alerts, for   **/

+/** this I wrote sdCloseAlerts, more info there	 **/

+/*****************************************************/

+LRESULT CALLBACK HotKeyProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)

+{

+	if(msg == WM_CLOSE)

+	{

+		DestroyWindow(hWnd);

+		return true;

+	}

+	else if(msg == WM_HOTKEY)

+	{

+		sdCloseAlerts();

+	}

+

+	return FALSE;

+}

+