⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 网吧管理系统VC源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Server.h"

#include "IdleUI.h"
#include "htmlhelp.h"

#include "MainFrm.h"
#include "ServerView.h"
#include "RegisterDlg.h"
#include "CheckOutDialog.h"
#include "LockDeskWindow.h"
#include "SetPayDlg.h"
#include "SendMsgDlg.h"
#include "ViewMsgDlg.h"
#include "SaleFoodDlg.h"

#include "SetPassWordDlg.h"
#include "SetAutoTimeDlg.h"

#include "DaoPayProperty.h"
#include "Splash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame


#define LLKHF_ALTDOWN      0x00000020
#define WH_KEYBOARD_LL     13

typedef struct tagKBDLLHOOKSTRUCT {
    DWORD   vkCode;
    DWORD   scanCode;
    DWORD   flags;
    DWORD   time;
    DWORD   dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;


LRESULT  CALLBACK  LowLevelKeyboardProc(int  nCode,  WPARAM  wParam,  LPARAM  lParam);
HHOOK glhHook;

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_WM_MEASUREITEM()
	ON_WM_DRAWITEM()
	ON_WM_SIZE()
	ON_COMMAND(IDM_START_TIMING, OnStartTiming)
	ON_COMMAND(IDM_VIEW_STYLE, OnViewStyle)
	ON_COMMAND(IDM_VIEW_BIGICON, OnViewBigIcon)
	ON_COMMAND(IDM_VIEW_DETAIL, OnViewDetail)
	ON_COMMAND(IDM_VIEW_LIST, OnViewList)
	ON_COMMAND(IDM_VIEW_SMALLICON, OnViewSmallIcon)
	ON_COMMAND(ID_VIEW_MESSAGEDLG, OnViewMessageDlg)
	ON_UPDATE_COMMAND_UI(ID_VIEW_MESSAGEDLG, OnUpdateViewMessageDlg)
	ON_COMMAND(IDM_DLGBAR_PROMPT, OnDlgbarPrompt)
	ON_COMMAND(IDM_DLGBAR_TREE, OnDlgbarTree)
	ON_COMMAND(IDM_LOCKING, OnLockClient)
	ON_COMMAND(IDM_CHECK_OUT, OnCheckOut)
	ON_COMMAND(IDM_SWITCH, OnSwitchClient)
	ON_COMMAND(IDM_UNLOCK, OnUnlockClient)
	ON_MESSAGE(WM_START_WORK, OnStartWork)
	ON_MESSAGE(WM_TIME_REPORT, OnTimeReport)
	ON_MESSAGE(WM_DISPLAY_MESSAGE, OnReceiveMsg)
	ON_MESSAGE(WM_LEAGUER_CHECK_OUT, OnLeaguerCheckOut)
	ON_MESSAGE(WM_LEAGUER_INFORMATION, OnSendLeaguerInformation)
	ON_MESSAGE(WM_CLIENT_CONFIRM, OnAcceptClientConfirmInformation)
	ON_COMMAND(IDM_RESET, OnReset)
	ON_COMMAND(IDM_SHUTDOWN, OnShutdown)
	ON_COMMAND(IDM_LOCK_DESKWINDOW, OnLockDeskwindow)
	ON_COMMAND(IDM_SET_PAY, OnSetPay)
	ON_COMMAND(IDM_SEND_MESSAGE, OnSendMessage)
	ON_COMMAND(ID_MANAGE_FOOD, OnManageFood)
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	ON_COMMAND(IDM_SALE_FOOD, OnSaleFood)
	ON_COMMAND(ID_MANAGE_LEAGUER, OnManageLeaguer)
	ON_COMMAND(IDM_ALL_NIGHT_WORK, OnAllNightWork)
	ON_COMMAND(IDM_SET_PASSWORD, OnSetPassword)
	ON_COMMAND(IDM_AUTO_LOCK, OnAutoLock)
	ON_COMMAND(ID_FREE_RECORD,OnHistoryFreeDisplay)
	ON_COMMAND(ID_HELP, OnHelp)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_SEPARATOR,
	ID_SEPARATOR,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_daoPayProperty.Open();
	m_daoPayProperty.MoveFirst();
	LeaguerModelessDlg = NULL;
	FoodModelessDlg = NULL;
	HistoryFreedlg = NULL;
}

CMainFrame::~CMainFrame()
{
	m_daoPayProperty.Close();
}

BOOL CMainFrame::CreateToolBar()
{
	CImageList ImageList;
	char* ImageText[] = { "查 看", "计 时", "结 账", "换 机", "锁 定", "解 锁", "重 启" , "关 机", "商品出售", "锁定桌面", "会员管理", "计费统计"};
	UINT ImageID[] = {IDM_VIEW_STYLE,IDM_START_TIMING, IDM_CHECK_OUT, IDM_SWITCH, IDM_LOCKING, IDM_UNLOCK, IDM_RESET, IDM_SHUTDOWN, IDM_SALE_FOOD, IDM_LOCK_DESKWINDOW, ID_MANAGE_LEAGUER, ID_FREE_RECORD};
	if( !m_wndToolBar.CreateEx(this))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;
	}

	if( !m_wndReBar.Create(this) ) {
		TRACE0("Failed to create rebar\n");
		return -1;
	}

	m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 50);
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

	ImageList.Create(IDB_TOOLBAR_HOT, 32, 0, RGB(255, 255, 255));
	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&ImageList);
	ImageList.Detach();

	ImageList.Create(IDB_TOOLBAR_HOT, 32, 0, RGB(255,255,255));
	m_wndToolBar.GetToolBarCtrl().SetImageList(&ImageList);
	ImageList.Detach();

	m_wndToolBar.SetButtons(NULL, 12);

	for( int i=0; i < 12; i++ )
	{
		if( i == 0 )
		{
			m_wndToolBar.SetButtonInfo(i, ImageID[i], TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, i);
		}
		else
			m_wndToolBar.SetButtonInfo(i, ImageID[i], TBSTYLE_BUTTON, i);
		m_wndToolBar.SetButtonText(i, ImageText[i]);
	}

	CRect rectToolBar;
	m_wndToolBar.GetItemRect(0, &rectToolBar);
	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(32, 32));
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |CBRS_ALIGN_TOP
		 |CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED );

	m_wndReBar.AddBar( &m_wndToolBar );
	
	REBARBANDINFO rbbi;
	rbbi.cbSize = sizeof(rbbi);
	rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE | RBBIM_STYLE;
	rbbi.cxMinChild = rectToolBar.Width();
	rbbi.cyMinChild = rectToolBar.Height();
	rbbi.cx = rbbi.cxIdeal = rectToolBar.Width()*7;	
	rbbi.fStyle = RBBS_FIXEDSIZE | RBBS_FIXEDBMP;
	m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
	EnableDocking(CBRS_ALIGN_ANY);

	return 0;
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	
	//glhHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,(HINSTANCE)AfxGetApp()->m_hInstance,0);	

	if (!m_menu.Initialize(IDR_MAINFRAME,this))
		return -1;

	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if(CreateToolBar())
		return -1;

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}
	
	m_wndStatusBar.SetPaneInfo(1, ID_SEPARATOR, SBPS_NORMAL, 400);

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	if (!m_wndDlgBar.Create(this, IDD_DIALOGBAR, WS_CHILD | WS_VISIBLE
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_ALIGN_LEFT, IDD_DIALOGBAR))
	{
		TRACE0("Failed to create dialogbar\n");
		return -1;		
	}

    
	CImageList ImageList;
	ImageList.Create (IDB_TREE_BITMAP, 16, 1, RGB(0,255,0));
	ImageList.Detach();
	OnDlgbarPrompt();
	BOOL bBroadcast = TRUE;
	CHAR name[255];
	PHOSTENT hostinfo;
	CString strLocalip;

	//Get local ip address
	gethostname( name, sizeof(name));
	hostinfo = gethostbyname(name);
	strLocalip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
	strcpy(m_Msg.str, strLocalip);
	

	int Position = strLocalip.ReverseFind('.');
	ServerIP = strLocalip.Mid(0, Position + 1);
	ServerIP += "255";

	m_Msg.IDCode = BROADCAST_SERVER_IP;
	//Create a UDP socket,so can send local ip address to whole network	
	m_sockBroadcast.Create(6820, SOCK_DGRAM, NULL);
	m_sockBroadcast.SetSockOpt(SO_BROADCAST, (char*) &bBroadcast, sizeof(BOOL));

    CountIntervals();
	
	SetTimer(BROADCAST_SERVER_IP,2000,NULL);
	SetTimer(2,1000,NULL);

	SetTimer(3,600000,NULL); //10分钟
	
	SetTimer(4,5000,NULL); //20秒 20000

	//SetTimer(5,60000,NULL);
	//Create a socket that can accept connection
	m_pListenSocket = new CListenSocket(this);
	m_pListenSocket->Create(6810);
	m_pListenSocket->Listen();

	if(!IdleUIInit())
	{
		AfxMessageBox(IDS_INIT_IDLE_ERROR, MB_ICONWARNING);
	}

	AfxGetApp()->WriteProfileInt("LockWindow","Status",0);

	CMenu* pMenu = this->GetSystemMenu(FALSE);
	pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED);


	// CG: The following line was added by the Splash Screen component.	CSplashWnd::ShowSplashScreen(this);
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	//cs.style &= ~WS_MAXIMIZEBOX;
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	// MENUEX_ADD - Mainframe menu is ready to measure prior to drawing
	m_menu.MeasureItem(this,lpMeasureItemStruct);
	
	CFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// MENUEX_ADD - Mainframe menu is ready to draw
	m_menu.DrawItem(lpDrawItemStruct);
	
	CFrameWnd::OnDrawItem(nIDCtl, lpDrawItemStruct);
}


void CMainFrame::OnTimer(UINT nIDEvent) 
{
	static int nCount = 0;
	CRecMsg m_daoRecMsg;
	int RecMsgCount = 0;

	int nmin;
	int IdleMin = 1;

	int LockStatus = AfxGetApp()->GetProfileInt("LockWindow","Status",0);
	if (LockStatus != 1)  //锁定控制台
	{
		m_IdleMin = AfxGetApp()->GetProfileInt("LockWindow","idlemin",0);
		if (m_IdleMin == 0)
			m_IdleMin = 1;
		nmin = (GetTickCount() - IdleUIGetLastInputTime())/1000/60;		
		if(nmin == IdleMin && IdleMin != 0)
		{
			AfxGetApp()->WriteProfileInt("LockWindow","Status",1);
			CString str;
			LockStatus = AfxGetApp()->GetProfileInt("LockWindow","Status",0);
			str.Format("%d",LockStatus);
			CUnlockDeskWindow UnlockDeskWindowdlg;
			UnlockDeskWindowdlg.DoModal();
		}
	}
	

	if (nIDEvent == 1)  //给局域网中所有客户端发送消息
	{
		int iSend= m_sockBroadcast.SendTo(&m_Msg, sizeof(SMessage), 6830, ServerIP, 0);
		if(nCount == 2)
		{
			KillTimer(1);
			m_sockBroadcast.Close();
		}
		nCount++;
	}
	
	if(nIDEvent == 2)  //计费
	{
		SetStatusText();
		CString strTime;
		CString str;
		static int Status = 2;
		long nWorkTime;
		
        CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();
		int nCount = clc.GetItemCount();
		str.Format("%d",nCount);
		if (Status == 1)
			Status = 2;
		else
			Status = 1;
		for(int i = 0; i < nCount; i++) //检测客户端是否给服务器发送消息
		{
			CString strTemp = clc.GetItemText(i, 8);
			if(strTemp.Compare("工作中") == 0)
			{
				CString strName = clc.GetItemText(i, 0);
				m_daoRecMsg.m_strFilter = "[Name]=\"" + strName + '\"';
				m_daoRecMsg.Open();

				if(!(m_daoRecMsg.IsBOF() && m_daoRecMsg.IsEOF()))
				{
					RecMsgCount++;
					LVITEM lvi;
					lvi.iItem = i;
					lvi.iSubItem = 0;
					clc.GetItem( &lvi );
					lvi.mask |= LVIF_IMAGE;
					lvi.iImage = Status;
					clc.SetItem(&lvi);
					MessageBeep(MB_OK);
				}
				else
				{
					LVITEM lvi;
					lvi.iItem = i;
					lvi.iSubItem = 0;
					clc.GetItem( &lvi );
					lvi.mask |= LVIF_IMAGE;
					lvi.iImage = 2;
					clc.SetItem(&lvi);
				}
				m_daoRecMsg.Close();
			}
			
			strTemp = clc.GetItemText(i, 8);
			if(strTemp.Compare("工作中") == 0)
			{
				bool IsLeaguer = true;
				if (clc.GetItemText(i,4) == "")
					IsLeaguer = false;
				
				strTime = clc.GetItemText(i,5);
				nWorkTime = atoi(strTime.Mid(0,2)) * 3600 + atoi(strTime.Mid(3,2)) * 60 + atoi(strTime.Mid(6,2));
				nWorkTime++;
				CDaoRecord& DaoRecordFree = ((CServerDoc*)GetActiveDocument())->m_daoRecord;		
				
				//大于最小计费时间
				if (nWorkTime % (m_daoPayProperty.m_MiniSecond * 60) == 0 && nWorkTime == (m_daoPayProperty.m_MiniSecond * 60))
				{
					clc.SetItemText(i,6,"0.5");
					CString strFilter("[计算机名]=\"");
					strFilter += clc.GetItemText(i,0);
					strFilter += '\"';
					if(DaoRecordFree.FindFirst(strFilter))
					{
						DaoRecordFree.Edit();
						DaoRecordFree.m_fFree = 0.5;
						DaoRecordFree.Update();
					}
				}

				str = ConvertString(nWorkTime/3600);
				int ntemp = nWorkTime % 3600;
				str +=":";
				str += ConvertString(ntemp/60);
				str +=":";
				str += ConvertString(ntemp%60);
				clc.SetItemText(i,5,str);
				
				CString strLimitTime = clc.GetItemText(i, 3);
				CString strWorkTime = clc.GetItemText(i, 5);
				
				int nWorkTime = atoi(strWorkTime.Mid(0,2)) * 3600 + atoi(strWorkTime.Mid(3,2)) * 60 + atoi(strWorkTime.Mid(6,2));
				CString str;
				str.Format("%d", nWorkTime);

				//限时已到
				if((atoi(strLimitTime) * 60) <= nWorkTime && atoi(strLimitTime) != 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -