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

📄 smsdlg.cpp

📁 这是一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// SMSDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "SMS.h"
#include "SMSDlg.h"
#include "StdLib.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//CAboutDlg对话框的实现
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	m_backcolor=m_RGB_BkColor;
	m_brush.CreateSolidBrush(m_backcolor);
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何属性
	if(m_bColor)//如果用系统的,则直接返回
		return hbr;
	pDC->SetTextColor (m_RGB_CtrlColor);
	pDC->SetBkMode(BKMODE_LAST);pDC->SetBkColor (m_RGB_BkColor);
	return (HBRUSH)m_brush.GetSafeHandle ();
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
//	return hbr;
}


// CSMSDlg 对话框

CSMSDlg::CSMSDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSMSDlg::IDD, pParent)
	, m_pLogionSet(&theApp.m_db )
	, m_pCalendaSet(&theApp.m_db )
	, m_pRemindSet(&theApp.m_db )
	, m_pUserSet(&theApp.m_db )
{
	ntipNum=0;
	RemindAmount=0;
	m_pStudyDlg=NULL;
	m_pWorkDlg=NULL;
	m_pFinanceMainDlg=NULL;
	m_pSocialiseDlg=NULL;
	m_pSetRemindDlg=NULL;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	//显示窗口颜色
	m_backcolor=m_RGB_BkColor;
	m_brush.CreateSolidBrush(m_backcolor);
}

void CSMSDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STUDY_BT, m_Study_Bt);
	DDX_Control(pDX, IDC_WORK_BT, m_Work_Bt);
	DDX_Control(pDX, IDC_SOCIALISE_BT, m_Socialise_Bt);
	DDX_Control(pDX, IDC_FINANCE_BT, m_Finance_Bt);
	DDX_Control(pDX, IDC_ENTERTAIN_BT, m_Entertain_Bt);
	DDX_Control(pDX, IDC_REMIND_BT, m_Remind_Bt);
	DDX_Control(pDX, IDC_SET_BT, m_Set_Bt);
	DDX_Control(pDX, IDC_INFO_LIST, m_cInfoListCtrl);
}

BEGIN_MESSAGE_MAP(CSMSDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
    ON_WM_TIMER ()
	ON_WM_SIZE()
	ON_WM_SIZING()
	ON_BN_CLICKED(IDC_STUDY_BT, &CSMSDlg::OnBnClickedStudyBt)
	ON_BN_CLICKED(IDC_FINANCE_BT,&CSMSDlg::OnBnClickedFinanceBt )
	ON_BN_CLICKED(IDC_SOCIALISE_BT,&CSMSDlg::OnBnClickedSocialiseBt)
	ON_BN_CLICKED(IDC_WORK_BT, &CSMSDlg::OnBnClickedWorkBt )
	ON_BN_CLICKED(IDC_SET_BT, &CSMSDlg::OnBnClickedSetBt )
	ON_BN_CLICKED(IDC_REMIND_BT,&CSMSDlg::OnBnClickedRemindBt )
	ON_BN_CLICKED(IDC_ENTERTAIN_BT, &CSMSDlg::OnBnClickedEntertainBt )
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_NOTIFY(HDN_ITEMCLICK, 0, &CSMSDlg::OnHdnItemclickSocialisePersonList)
	ON_MESSAGE (WM_USER_STUDYDLG_DESTROYED, OnStudyDlgDestroyed)
	ON_MESSAGE (WM_USER_WORKDLG_DESTROYED, OnWorkDlgDestroyed)
	ON_MESSAGE (WM_USER_SOCIALISEDLG_DESTROYED, OnSocialiseDlgDestroyed)
	ON_MESSAGE (WM_USER_FINANCEMAINDLG_DESTROYED, OnFinanceMainDlgDestroyed)
	ON_MESSAGE (WM_USER_SETREMINDDLG_DESTROYED,OnSetRemindDlgDestroyed)
	ON_MESSAGE (WM_USER_REBOOT,&CSMSDlg::OnExit)
	ON_WM_CTLCOLOR()
	ON_COMMAND(ID_POP_STUDY, &CSMSDlg::OnPopStudy)
	ON_COMMAND(ID_POP_WORK, &CSMSDlg::OnPopWork)
	ON_COMMAND(ID_POP_SOCIALISE, &CSMSDlg::OnPopSocialise)
	ON_COMMAND(ID_POP_FINANCE, &CSMSDlg::OnPopFinance)
	ON_COMMAND(ID_POP_ENTERTAIN, &CSMSDlg::OnPopEntertain)
    ON_COMMAND(ID_POP_REMIND, &CSMSDlg::OnPopRemind)
	ON_COMMAND(ID_POP_SET, &CSMSDlg::OnPopSet)
	ON_COMMAND(ID_POP_EXIT, &CSMSDlg::OnPopExit)
	ON_COMMAND(ID_MAIN_ABOUT, &CSMSDlg::OnMainAbout)
	ON_WM_CONTEXTMENU()
    ON_WM_ENDSESSION ()
	ON_BN_CLICKED(IDC_REMIND_BT, &CSMSDlg::OnBnClickedRemindBt)
	ON_COMMAND(ID_WINDOWS_CAL, &CSMSDlg::OnWindowsCal)
END_MESSAGE_MAP()

//下面是easysize的消息队列
BEGIN_EASYSIZE_MAP(CSMSDlg)
	EASYSIZE(IDC_WELCOME_STATIC,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
    EASYSIZE(IDC_TODAY_STATIC,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_TODAY_DTP,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_MOTTO_STATIC,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
	EASYSIZE(IDC_PICTURE_LOGION_STATIC,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
	EASYSIZE(IDC_LOGION_STATIC,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
	EASYSIZE(IDC_STUDY_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_WORK_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_SOCIALISE_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_ENTERTAIN_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_FINANCE_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_SET_BT,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)
	EASYSIZE(IDC_INFO_STATIC,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
	EASYSIZE(IDC_INFO_LIST,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
	EASYSIZE(IDC_PICTURE_STATIC,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,0)
	EASYSIZE(IDC_COPYRIGHT_STATIC,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,0)

END_EASYSIZE_MAP

// CSMSDlg 消息处理程序

BOOL CSMSDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
    BeginWaitCursor();
	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
    CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	// TODO: 在此添加额外的初始化代码
	//从注册表中读出是否真的重启
	CString version=L"Version 1.0";//软件版本
	//要重新启动的时候只要把注册表修改便可!第一次运行,默认为false!
	if(!theApp.GetProfileInt (version,L"Reboot",false))
	{
		CString sPath;
		GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
		sPath.ReleaseBuffer ();
		int nPos;	
		nPos=sPath.ReverseFind('\\');
		sPath=sPath.Left (nPos);
		CString lpszFile = sPath + L"\\铃声\\";
	if(LoginDlg.DoModal()==IDOK)
		{
			//成功登陆
			switch(m_iRunBell)
			{
			case 0://无,则跳出
				break;
			case 1://自定义的
				PlaySound(LoginDlg.m_sRunBell, NULL,SND_ASYNC); 
				break;
			case 2://系统带的
				lpszFile+=L"Bell_1.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC);
				break;
			case 3://系统带的
				lpszFile+=L"Bell_2.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 4://系统带的
				lpszFile+=L"Bell_3.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 5://系统带的
				lpszFile+=L"Bell_4.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 6://系统带的
				lpszFile+=L"Bell_5.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 7://系统带的
				lpszFile+=L"Bell_6.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 8://系统带的
				lpszFile+=L"Bell_7.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 9://系统带的
				lpszFile+=L"Bell_8.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			case 10://系统带的
				lpszFile+=L"Bell_9.wav";
				PlaySound(lpszFile, NULL, SND_ASYNC); 
				break;
			}
		}
		else
		{
			PostMessage(WM_CLOSE);
			return TRUE;
		}
   }
	SetTimer(SMS_TIME_TIMER, 1000, NULL);//设置定时期,每一秒更新一次,用于更新系统时钟和欢迎信息
	SetTimer(SMS_LOGION_TIMER,10000,NULL);//设置定时期,每十秒更新一次,用于轮流显示名言
	if(m_iTipTime>=10)//小于10则不用提醒
	    SetTimer(SMS_TIP_TIMER,m_iTipTime*2000,NULL);//设置定时器用于提示
	//
	//****************************************************************************//
	//
	//下面的操作很耗内存及时间,最好开后台线程来实现,暂且先用界面线程处理一下,待以后再用后台线程
	//下面显示欢迎信息
	CString StrRunBell;
	CString StrWelcome;
	CString StrTime;
	CTime   tTime;
	int Hour;
	if(m_pUserSet.IsOpen())
		m_pUserSet.Close();
	m_pUserSet.Open(AFX_DB_USE_DEFAULT_TYPE,L"Select * From User Order By uId");
	m_pUserSet.MoveFirst();
	m_sUserName=m_pUserSet.m_uName;
	m_pUserSet.Close();
	tTime=CTime::GetCurrentTime();
	Hour=tTime.GetHour();
    if(Hour<=8)
		StrWelcome=m_sUserName+L",早上好!欢迎使用学生管理软件!";
	else
		if(Hour>8&&Hour<=12)
			StrWelcome=m_sUserName+L",上午好!欢迎使用学生管理软件!";
		else
			if(Hour>12&&Hour<=18)
			    StrWelcome=m_sUserName+L",下午好!欢迎使用学生管理软件!";
			else
				StrWelcome=m_sUserName+L",晚上好!欢迎使用学生管理软件!";
	SetDlgItemText(IDC_WELCOME_STATIC, StrWelcome);
	//下面首次设置时间, 这样做是为了不存在开始启动的闪烁
	StrTime.Format(L"现在时间 %02i:%02i:%02i",tTime.GetHour(),tTime.GetMinute(),tTime.GetSecond());
	SetDlgItemText(IDC_TIME_TIP_STATIC, StrTime);
	//下面显示名言
	CString StrLogion;
	if(m_pLogionSet.IsOpen())
		m_pLogionSet.Close();
	m_pLogionSet.Open(AFX_DB_USE_DEFAULT_TYPE,L"Select * From Logion Order By lKind");
	int Count;
	m_pLogionSet.m_strFilter .Empty ();
	Count=m_pLogionSet.GetRecordCount();
	if(Count==0)//如果没有名言
	{
		m_pLogionSet.Close ();
	}
	else//否则随机选择显示
	{	
		Count=0;
		m_pLogionSet.MoveFirst();
	    while(!m_pLogionSet.IsEOF())
	    {
			m_pLogionSet.MoveNext();
            Count++;//先计算总数
		}
		m_pLogionSet.MoveFirst();//再跳回到第一个
		srand((unsigned) time(NULL));
		int rth=rand()%Count;//随机找到那个
		int i=0;
		while(!m_pLogionSet.IsEOF())
		{
			if(i==rth)//随机取一个
			{
				StrLogion=m_pLogionSet.m_lContent;//直接复制,并且退出循环
				break;
			}
			i++;
			m_pLogionSet.MoveNext();
		}
		m_pLogionSet.Close();
	}
    SetDlgItemText(IDC_MOTTO_STATIC,StrLogion);
    //下面显示今日信息
    //先设置标题
	m_cInfoListCtrl.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_cInfoListCtrl.InsertColumn (0,L"主题",LVCFMT_IMAGE|LVCFMT_LEFT);
	m_cInfoListCtrl.SetColumnWidth(0,63);
	m_cInfoListCtrl.InsertColumn (1,L"内容");
    m_cInfoListCtrl.SetColumnWidth(1,1100);
	//下面先处理日程的信息
	CString StrStartDate;
	CString StrEndDate;
	CString StrCalendaInfo;
	if(m_pCalendaSet.IsOpen())
		m_pCalendaSet.Close();
	m_pCalendaSet.Open(AFX_DB_USE_DEFAULT_TYPE,L"Select * From Calenda Order By cStartDate");
	if(m_pCalendaSet.GetRecordCount()==0)//若日程为空,则跳过
		m_pCalendaSet.Close();
	else
	{
		StrTime=DateToString(tTime);
		m_pCalendaSet.MoveFirst();
		while(!m_pCalendaSet.IsEOF())
		{
            StrStartDate=DateToString(m_pCalendaSet.m_cStartDate);
			StrEndDate=DateToString(m_pCalendaSet.m_cEndDate);
			if(StrStartDate<=StrTime&&StrEndDate>=StrTime)//若该日程在这天当中,则显示
			{
				m_cInfoListCtrl.InsertItem(0,L"日程" ,0);
    			StrCalendaInfo=L"今天,您有日程,名称为:";
				StrCalendaInfo+=m_pCalendaSet.m_cName;
				if(m_pCalendaSet.m_cCharge!=L"")
				{
				   StrCalendaInfo+=L",负责人为:";
                   StrCalendaInfo+=m_pCalendaSet.m_cCharge;
				}
				if(m_pCalendaSet.m_cTeamName!=L"")
				{
				   StrCalendaInfo+=L",所属团体为:";
                   StrCalendaInfo+=m_pCalendaSet.m_cTeamName;
				}
		        m_cInfoListCtrl.SetItemText (0,1,StrCalendaInfo);	
			}
			m_pCalendaSet.MoveNext();
		}
		m_pCalendaSet.Close();
	}
    //下面处理提醒信息
	CString StrRemindInfo;
	if(m_pRemindSet.IsOpen())
		m_pRemindSet.Close();
	m_pRemindSet.Open(AFX_DB_USE_DEFAULT_TYPE,L"Select * From Remind Order By rStartDate");
	if(m_pRemindSet.GetRecordCount()==0)//若提醒为空,则跳过
		m_pRemindSet.Close();
	else
	{
		StrTime=DateToString(tTime);
		m_pRemindSet.MoveFirst();
		while(!m_pRemindSet.IsEOF())
		{
			
			if(m_pRemindSet.m_rFinished==true)//若完成了提醒,则不需要再提醒
			{
				m_pRemindSet.MoveNext();
				continue;
			}
			StrStartDate=DateToString(m_pRemindSet.m_rStartDate);
            StrEndDate=DateToString(m_pRemindSet.m_rEndDate);
			if(StrStartDate<=StrTime&&StrEndDate>=StrTime)//若该提醒在这天当中,则显示
			{
				RemindAmount++;
				m_cInfoListCtrl.InsertItem(0,L"提醒" ,0);
				StrRemindInfo=L"内容:";
				StrRemindInfo+=m_pRemindSet.m_rContent;
				if(m_pRemindSet.m_rKind!=L"")
				{
				   StrRemindInfo+=L";    类型:";
                   StrRemindInfo+=m_pRemindSet.m_rKind;
				}
		        m_cInfoListCtrl.SetItemText (0,1,StrRemindInfo);	
			}
			m_pRemindSet.MoveNext();
		}
		m_pRemindSet.Close();
	}
    //
	//耗时耗内存的信息处理总算完成了。。。。。
	//
	//
	INIT_EASYSIZE;
	menu.LoadMenu(IDR_MAIN_MENU); 
	SetMenu(&menu);
    EndWaitCursor();
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CSMSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();

⌨️ 快捷键说明

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