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

📄 mainfrm.cpp

📁 我上载了那么多怎么都说已经有上载的啦
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "GPMIS.h"

#include "MainFrm.h"
#include "GPMISDoc.h"
#include "GPMISView.h"
#include "selectview.h"
#include "global.h"
#include "SheetView.h"
#include "ThemeView.h"
#include "TimeView.h"
#include "ScoreView.h"
#include "SpreadSheet.h"
#include "PasswordDlg.h"
#include "TermDlg.h"
#include "Teacher.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
extern CGPMISApp theApp;

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_COMMAND(ID_TEACHER_INFO, OnTeacherInfo)
	ON_UPDATE_COMMAND_UI(ID_TEACHER_INFO, OnUpdateTeacherInfo)
	ON_COMMAND(ID_ADMIN_PASSWORD, OnAdminPassword)
	ON_UPDATE_COMMAND_UI(ID_ADMIN_PASSWORD, OnUpdateAdminPassword)
	ON_COMMAND(ID_SET_TERM, OnSetTerm)
	ON_UPDATE_COMMAND_UI(ID_SET_TERM, OnUpdateSetTerm)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, OnUpdateTime)
	ON_UPDATE_COMMAND_UI(ID_INDICATOR_TASK, OnUpdateTask)
	ON_COMMAND(ID_BACKUP_DB, OnBackupDb)
	ON_UPDATE_COMMAND_UI(ID_BACKUP_DB, OnUpdateBackupDb)
	ON_COMMAND(ID_RESTORE_DB, OnRestoreDb)
	ON_UPDATE_COMMAND_UI(ID_RESTORE_DB, OnUpdateRestoreDb)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CString CMainFrame::m_sServer;
CString CMainFrame::m_sAddress;
CString CMainFrame::m_sUsername;
CString CMainFrame::m_sPassword;
BOOL	CMainFrame::m_bClosing = FALSE;

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	m_nLevel = 1;
	
	m_bModifySheet = FALSE;
	m_bModifyTheme = FALSE;
	m_bModifyScore = FALSE;

	m_strTask = "";
}

CMainFrame::~CMainFrame()
{
	CGlobal::GetInstance().RemoveStudentList();
	CGlobal::GetInstance().RemoveClassList();
	CGlobal::GetInstance().RemoveTitleMap();
	CGlobal::GetInstance().RemoveOthersMap();
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	m_nYear = CTime::GetCurrentTime().GetYear();

	CGlobal::GetInstance().CreateStudentList(m_nYear);
	CGlobal::GetInstance().CreateClassList(m_nYear);
	CGlobal::GetInstance().CreateTitleMap();
	CGlobal::GetInstance().CreateOthersMap();

	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	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
	}

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	theApp.GetRegistryValue("Parameters\\Administrator","EMail",m_sEMail,"zengfanfeng@sina.com");
	theApp.GetRegistryValue("Parameters\\Mail","Server",m_sServer,"smtp.sina.com");
	theApp.GetRegistryValue("Parameters\\Mail","Address",m_sAddress,"zengfanfeng@sina.com");
	theApp.GetRegistryValue("Parameters\\Mail","Username",m_sUsername,"zengfanfeng");
	theApp.GetRegistryValue("Parameters\\Mail","Password",m_sPassword,"");
	if( m_sPassword.GetLength() >= 48 )
	{
		BYTE *pData;
		CBlowfish* pBlowfish = theApp.GetBlowfish();
		pData = new BYTE[17];
		for(int i=0; i<16 ; i++)
		{
			CString strChr;
			strChr = m_sPassword.Mid(3*i,3);
			pData[i] = atoi(strChr);
		}

		pBlowfish->Decrypt(pData, 16);
		m_sPassword.Format("%s",pData);
		delete pData;
	}

	SetTimer(0x0001,500,NULL);
	SetTimer(0x0199,50,NULL);
	
	return 0;
}

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	int i = 0;
	m_bCanSizing = FALSE;
	if (m_wndSplitter.CreateStatic(this,1,2))
	{
		m_bCanSizing = TRUE;
		CRect rect;
		GetClientRect(&rect);
		CSize size = rect.Size();
		size.cx = (long)(0.125*size.cx);

		if( size.cx < 100 )
			size.cx = 100;

		m_nViewNo[i++] = m_wndSplitter.AddView(0, 1, RUNTIME_CLASS(CTimeView), pContext);
		m_pTimeView = (CTimeView*)m_wndSplitter.GetPane(0,1);
		m_nViewNo[i++] = m_wndSplitter.AddView(0, 1, RUNTIME_CLASS(CSheetView), pContext);
		m_pSheetView = (CSheetView*)m_wndSplitter.GetPane(0,1);
		m_nViewNo[i++] = m_wndSplitter.AddView(0, 1, RUNTIME_CLASS(CThemeView), pContext);
		m_pThemeView = (CThemeView*)m_wndSplitter.GetPane(0,1);
		m_nViewNo[i++] = m_wndSplitter.AddView(0, 1, RUNTIME_CLASS(CScoreView), pContext);
		m_pScoreView = (CScoreView*)m_wndSplitter.GetPane(0,1);

		m_nCurrView = m_nViewNo[0];

		m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSelectView),  CSize(10,10),pContext);
		m_pSelectView = (CSelectView*)m_wndSplitter.GetPane(0,0);

		m_wndSplitter.SetColumnInfo( 0, size.cx, 0 );

		m_nViewStyle = TIME_STYLE;

		SwitchRightViews(m_nViewStyle);  


		return TRUE;
	}
	return FALSE;
}

CView* CMainFrame::GetCurrentView(int nStyle) const
{
	switch (nStyle)
	{
		case TIME_STYLE:
			return m_pTimeView;
		case SHEET_STYLE:
			return m_pSheetView;
		case THEME_STYLE:
			return m_pThemeView;
		case SCORE_STYLE:
			return m_pScoreView;
	}

	return NULL;
}

void CMainFrame::SwitchRightViews(int nStyle)
{
	int i = 0;

	switch (nStyle)
	{
		case TIME_STYLE:
			m_wndSplitter.ShowView(m_nViewNo[0]);
			m_nCurrView = m_nViewNo[0];
			break;
		case SHEET_STYLE:
			m_wndSplitter.ShowView(m_nViewNo[1]);
			m_nCurrView = m_nViewNo[1];
			break;
		case THEME_STYLE:
			m_wndSplitter.ShowView(m_nViewNo[2]);
			m_nCurrView = m_nViewNo[2];
			break;
		case SCORE_STYLE:
			m_wndSplitter.ShowView(m_nViewNo[3]);
			m_nCurrView = m_nViewNo[3];
			break;
	}
	m_wndSplitter.SetActivePane(0,1);
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style&=~FWS_ADDTOTITLE;
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN)-28; 
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN); 
    cs.y = 0;     
	cs.x = 0;

	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::OnUpdateTask(CCmdUI* pCmdUI)
{
	pCmdUI->Enable();
}

void CMainFrame::UpdateTask()
{
	char  szTask[40];

	CStatusBar* pStatusBar = (CStatusBar*) GetDescendantWindow(AFX_IDW_STATUS_BAR);

	if (pStatusBar == NULL)
		return;

	wsprintf(szTask, _T("%s"), m_strTask);

	// Now set the text of the pane
	UINT nID, nStyle;
	int nWidth, nIndex = pStatusBar->CommandToIndex(ID_INDICATOR_TASK);

	CClientDC dc(pStatusBar);
	CFont* pOldFont = dc.SelectObject(pStatusBar->GetFont());
	CSize szExtent = dc.GetTextExtent(szTask, strlen(szTask));
	dc.SelectObject(pOldFont);

	pStatusBar->GetPaneInfo(nIndex, nID, nStyle, nWidth);
	if( m_strTask == "" )
		nStyle |= SBPS_NOBORDERS  ; 
	else
		nStyle = SBPS_NORMAL  ; 
	pStatusBar->SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
	pStatusBar->SetPaneText(nIndex, szTask);

}

void CMainFrame::OnUpdateTime(CCmdUI* pCmdUI)
{
	UpdateTime();
	pCmdUI->Enable();
}

void CMainFrame::UpdateTime()
{
	CTime t = CTime::GetCurrentTime();
	char  szTime[20];
	int   nYear = t.GetYear();
	int   nMonth = t.GetMonth();
	int   nDay = t.GetDay();
	int   nHour = t.GetHour();
	int   nMinute = t.GetMinute();
	int   nSecond = t.GetSecond();

	CStatusBar* pStatusBar = (CStatusBar*) GetDescendantWindow(AFX_IDW_STATUS_BAR);

	if (pStatusBar == NULL)
		return;

	wsprintf(szTime, _T("%d%02d%02d %02i:%02i:%02i"), nYear, nMonth, nDay, nHour, nMinute, nSecond);

	// Now set the text of the pane
	UINT nID, nStyle;
	int nWidth, nIndex = pStatusBar->CommandToIndex(ID_INDICATOR_TIME);

	CClientDC dc(pStatusBar);
	CFont* pOldFont = dc.SelectObject(pStatusBar->GetFont());
	CSize szExtent = dc.GetTextExtent(szTime, strlen(szTime));
	dc.SelectObject(pOldFont);

	pStatusBar->GetPaneInfo(nIndex, nID, nStyle, nWidth);
	pStatusBar->SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
	pStatusBar->SetPaneText(nIndex, szTime);

}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if( 0x0001 == nIDEvent )
	{
		UpdateTime();
	}
	if( 0x0199 == nIDEvent )  // 关闭程序
	{
		KillTimer(0x0199);
		UpdateTask();
	}

	CFrameWnd::OnTimer(nIDEvent);

	if( 0x0099 == nIDEvent )  // 关闭程序
	{
		KillTimer(0x0099);
		SendMessage(WM_CLOSE, 0, 0);
	}
	
}

void CMainFrame::DrawTitle(CString strTitle)
{
	if( strTitle.GetLength() > 0 )
	{
		m_strFrmTitle = strTitle;
		CString strFrmTitle ;
		strFrmTitle.Format("%s -- [%s]",GetTitle(),strTitle);
		SetWindowText(strFrmTitle);
	}

}

UINT CMainFrame::SendMailThreadProc(LPVOID parm)
{
	CMail* pMail = (CMail*)parm;

	pMail->m_sServer = m_sServer;
	pMail->m_sUserName = m_sUsername;
	pMail->m_sPassword = m_sPassword;
	pMail->m_sName = m_sUsername;
	pMail->m_sAddress = m_sAddress;

	CString strMsg;
	pMail->m_pMainFrm->SetTask("正在发送邮件");
	pMail->m_pMainFrm->SetTimer(0x0199, 50, NULL);
	if( SendMail(*pMail) )
	{
		pMail->m_pMainFrm->SetTask("");
		pMail->m_pMainFrm->SetTimer(0x0199, 50, NULL);
		strMsg.Format("发送邮件成功。");
		AfxMessageBox(strMsg);

⌨️ 快捷键说明

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