www.pudn.com > netcode34.zip > MainFrame.cpp, change:2001-09-06,size:6199b


// MainFrame.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "..\Property.h" 
#include "MainFrame.h" 
#include "..\MainSheet.h" 
#include "..\..\common\debug.h" 
#include "..\GuiRes.h" 
#include "..\MainSheet.h" 
#include "..\PacketMonitor.h" 
#include "..\LogQuery.h" 
#include "..\About.h" 
#include "..\Acl.h" 
#include "..\SystemSet.h" 
#include "..\..\common\xlogfile.h" 
#include "..\Splash.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
//============================================================================================= 
// CMainFrame 
 
extern CPropertyApp theApp; 
extern CAclFile		m_AclFile; 
CMainSheet			*dlg = NULL; 
CSystemTray			m_TrayIcon; 
BOOL				m_IsSplash		= FALSE; 
int					m_MessageIndex	= 0; 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
CMainFrame::CMainFrame() 
{ 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
	ON_MESSAGE(WM_ICON_NOTIFY,     OnTrayNotification) 
	ON_MESSAGE(WM_SESSION_NOTIFY,  OnSessionNotification) 
	ON_MESSAGE(WM_QUERY_ACL_NOTIFY,  OnAclNotification) 
	ON_MESSAGE(WM_NET_MESSAGE,  OnShowNetMessage) 
END_MESSAGE_MAP() 
 
//============================================================================================= 
// CMainFrame message handlers 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
 
	if (!m_TrayIcon.Create(this, WM_ICON_NOTIFY, GUI_APP_CAPTION, theApp.LoadIcon(IDI_SMALL_PASS), IDR_MAINFRAME)) 
		return -1; 
 
	theApp.SetTrayIcon(); 
 
	if(!m_TrayIcon.SetMenuDefaultItem(2,TRUE)) 
		return -1; 
	 
	DWORD dwFlags; 
	if(InternetGetConnectedState(&dwFlags, 0)) 
		theApp.m_DownloadCommand.InitNetCommand(); 
	else 
		SetTimer(1, 600000, NULL); 
 
	if(!theApp.m_RegisterRequest.m_IsUploaded) 
		SetTimer(2, 300000, NULL); 
 
	// CG: The following line was added by the Splash Screen component.
	CSplashWnd::ShowSplashScreen(this); 
 
	return 0; 
} 
 
LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam) 
{ 
	if(wParam == IDR_MAINFRAME && lParam == WM_LBUTTONDOWN) 
	{ 
		if(m_MessageIndex != 0) 
		{ 
			int tmpIndex = m_MessageIndex; 
			m_MessageIndex = 0; 
			AfxMessageBox(theApp.m_sMessage[tmpIndex], MB_ICONINFORMATION); 
			return 0; 
		} 
 
		lParam = WM_LBUTTONDBLCLK; 
	} 
 
    return m_TrayIcon.OnTrayNotification(wParam, lParam); 
} 
 
void CMainFrame::InitMainSheet(int iActivePage) 
{ 
	theApp.SetTrayIcon(); 
 
	if(dlg != NULL) 
	{ 
		if(iActivePage >= 0) 
			dlg->SetActivePage(iActivePage); 
 
		if(!dlg->IsWindowVisible()) 
			dlg->ShowWindow(SW_SHOW); 
		 
		dlg->SetForegroundWindow(); 
		return; 
	} 
 
	CLogQuery		mLogQuery; 
	CPacketMonitor	mPacketMonitor; 
	CAcl			mAcl; 
	CSystemSet		mSystemSet; 
	CAbout			mAbout; 
 
	dlg = new CMainSheet(GUI_APP_CAPTION); 
	dlg->AddPage(&mPacketMonitor); 
	dlg->AddPage(&mLogQuery); 
	dlg->AddPage(&mAcl); 
	dlg->AddPage(&mSystemSet); 
	dlg->AddPage(&mAbout); 
	dlg->SetLogoText(GUI_APP_LOGO); 
 
	if(iActivePage >= 0) 
		dlg->SetActivePage(iActivePage); 
 
	dlg->DoModal(); 
	delete dlg; 
	dlg = NULL; 
 
	ODS(_T("XFILTER: release dlg = null")) 
} 
 
LRESULT CMainFrame::OnSessionNotification(UINT wParam, LONG lParam) 
{ 
	static CXLogFile m_LogFile; 
 
	if(theApp.m_XfIoControl == NULL) 
		return XERR_SUCCESS; 
 
	XFILTER_IO_CONTROL	ioControl; 
	ioControl.isession	= wParam; 
	ioControl.session	= new SESSION; 
 
	theApp.m_XfIoControl(IO_CONTROL_GET_SESSION, &ioControl); 
 
	if(ioControl.session->s == 0) 
		return XERR_SUCCESS; 
 
	CPacketMonitor::InsertOneList( 
		CPacketMonitor::m_pListPacketMonitor,  
		ioControl.session, 
		CPacketMonitor::IsMonitor, 
		CPacketMonitor::IsScroll 
		); 
	 
	if(CAclFile::GetBit(m_AclFile.mAclHeader.bSet, 0)) 
		m_LogFile.AddLog(ioControl.session, m_AclFile.mAclHeader.uiLogSize); 
 
	if(ioControl.session->bAction == ACL_ACTION_DENY) 
	{	 
		if(CAclFile::GetBit(m_AclFile.mAclHeader.bSet, 2)) 
			MessageBeep(0xFFFFFFFF); 
 
		if(!m_IsSplash && CAclFile::GetBit(m_AclFile.mAclHeader.bSet, 3)) 
		{ 
			DWORD		dwThreadId; 
			::CreateThread(NULL, 0, SplashIcon, 0, 0, &dwThreadId); 
		} 
	} 
 
	free(ioControl.session); 
 
	return XERR_SUCCESS; 
} 
 
LRESULT CMainFrame::OnAclNotification(UINT wParam, LONG lParam) 
{ 
	if(wParam < 0 || wParam > MAX_QUERY_SESSION) 
		return XERR_INVALID_PARAMETER; 
 
	XFILTER_IO_CONTROL ioControl; 
 
	ioControl.isession = wParam; 
 
	theApp.m_XfIoControl(IO_CONTROL_GET_QUERY_SESSION, &ioControl); 
 
	CAcl::AddAclQuery(ioControl.sPathName, FALSE); 
	 
	theApp.m_XfIoControl(IO_CONTROL_SET_QUERY_SESSION, &ioControl); 
 
	return XERR_SUCCESS; 
} 
 
DWORD WINAPI SplashIcon(LPVOID pVoid) 
{ 
	m_IsSplash = TRUE; 
 
	for(int i = 0; i < 3; i++) 
	{ 
		m_TrayIcon.SetIcon(IDI_SMALL_ALERT); 
		if(i == 2) 
			continue; 
		Sleep(180); 
		m_TrayIcon.SetIcon(IDI_SMALL_NULL); 
		Sleep(400); 
	} 
	 
	m_IsSplash = FALSE; 
 
	return 0; 
} 
 
void CMainFrame::OnTimer(UINT nIDEvent)  
{ 
	if(nIDEvent == 1) 
	{ 
		DWORD dwFlags; 
		if(InternetGetConnectedState(&dwFlags, 0)) 
		{ 
			theApp.m_DownloadCommand.InitNetCommand(); 
			KillTimer(nIDEvent); 
		} 
	} 
	else if(nIDEvent == 2) 
	{ 
		if(theApp.m_DownloadCommand.PreUpload()) 
			KillTimer(nIDEvent); 
	} 
	 
	CFrameWnd::OnTimer(nIDEvent); 
} 
 
LRESULT CMainFrame::OnShowNetMessage(UINT wParam, LONG lParam) 
{ 
	if(wParam <= 0 || wParam > MAX_NET_COMMAND) 
		return XERR_INVALID_PARAMETER; 
 
 	ODS(theApp.m_sMessage[wParam]); 
	 
	static DWORD	dwThreadId = NULL; 
	if(dwThreadId == NULL) 
		::CreateThread(NULL, 0, SplashMessage, 0, 0, &dwThreadId); 
 
	return XERR_SUCCESS; 
} 
 
DWORD WINAPI SplashMessage(LPVOID pVoid) 
{ 
	for(int i = 0; i < MAX_NET_COMMAND; i++) 
	{ 
		if(theApp.m_sMessage[i][0] != '\0') 
		{ 
			m_MessageIndex = i; 
 
			m_IsSplash = TRUE; 
			while(m_MessageIndex) 
			{ 
				m_TrayIcon.SetIcon(IDI_SMALL_MESSAGE); 
				Sleep(180); 
				m_TrayIcon.SetIcon(IDI_SMALL_NULL); 
				Sleep(400); 
			} 
			theApp.SetTrayIcon(); 
			m_IsSplash = FALSE; 
		} 
	} 
	 
	ODS("Exit Thread SplashMessage..."); 
	return 0; 
}