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

📄 smsdlg.cpp

📁 这是一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CSMSDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
		//
		dc.FillSolidRect (rect,RGB(240,0xff,0xff));
		CDialog::OnPaint ();
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CSMSDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CSMSDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType, cx, cy);
	UPDATE_EASYSIZE;

	// TODO: 在此处添加消息处理程序代码
}

void CSMSDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
	CDialog::OnSizing(fwSide, pRect);
	EASYSIZE_MINSIZE(380,280,fwSide,pRect);

	// TODO: 在此处添加消息处理程序代码
}


void CSMSDlg::OnBnClickedStudyBt()
{
	// TODO: 在此添加控件通知处理程序代码
	BeginWaitCursor();
	if(m_pStudyDlg!=NULL)
		m_pStudyDlg->SetFocus ();
	else
	{
		m_pStudyDlg=new CStudyDlg;
		m_pStudyDlg->Create (IDD_STUDY_DLG);
		m_pStudyDlg->ShowWindow (SW_SHOW);
	}
	EndWaitCursor();
}

void CSMSDlg::OnBnClickedFinanceBt ()
{
	BeginWaitCursor();
	if(m_pFinanceMainDlg!=NULL)
		m_pFinanceMainDlg->SetFocus ();
	else
	{
		m_pFinanceMainDlg=new CFinanceMainDlg;
		m_pFinanceMainDlg->Create (IDD_FINANCE_MAIN_DLG);
		m_pFinanceMainDlg->ShowWindow (SW_SHOW);
	}
	EndWaitCursor();
}

void CSMSDlg::OnBnClickedSocialiseBt ()
{
	BeginWaitCursor();
	if(m_pSocialiseDlg!=NULL)
		m_pSocialiseDlg->SetFocus ();
	else
	{
		m_pSocialiseDlg=new CSocialiseDlg;
		m_pSocialiseDlg->Create (IDD_SOCIALISE_DLG);
		m_pSocialiseDlg->ShowWindow (SW_SHOW);
	}
	EndWaitCursor();
}

void CSMSDlg::OnBnClickedWorkBt ()
{
	BeginWaitCursor();
	if(m_pWorkDlg!=NULL)
		m_pWorkDlg->SetFocus ();
	else
	{
		m_pWorkDlg=new CWorkDlg;
		m_pWorkDlg->Create (IDD_WORK_DLG);
		m_pWorkDlg->ShowWindow (SW_SHOW);
	}
	EndWaitCursor();
}
void CSMSDlg::OnBnClickedRemindBt()
{
	// TODO: 在此添加控件通知处理程序代码
	BeginWaitCursor();
	if(m_pSetRemindDlg!=NULL)
		m_pSetRemindDlg->SetFocus ();
	else
	{
		m_pSetRemindDlg=new CSetRemindDlg2;
		m_pSetRemindDlg->Create (IDD_SETREMIND_DLG);
		m_pSetRemindDlg->ShowWindow (SW_SHOW);
	}
	EndWaitCursor();
}
void CSMSDlg::OnBnClickedSetBt ()
{
	BeginWaitCursor();
	CString OldPw;
	int     OldTerm;
	SETALL  all;
	CString StrExitBell;
	CString StrRunBell;
    if(m_pUserSet.IsOpen ())
		m_pUserSet.Close ();
	m_pUserSet.Open ();
	m_pUserSet.MoveFirst ();
	OldPw=m_pUserSet.m_uPassword ;
	OldTerm=m_pUserSet.m_uTerm ;
	StrExitBell=m_pUserSet.m_uExitBell ;
	StrRunBell=m_pUserSet.m_uRunBell ;
	m_pUserSet.Close ();//最好现在关闭,待会成功了在连接
	CSetSheet ps(L"设置");
	//初始化属性页的数据
	ps.m_pSystemSetPage .m_iTerm =OldTerm;//控件上从零开始,故减去一
	ps.m_pSystemSetPage.m_bAutoRun =m_bAutoRun;//是否自动运行的初始化
	ps.m_pSystemSetPage .m_iRunBell =m_iRunBell;//启动铃声的初始化
	ps.m_pSystemSetPage .m_iExitBell =m_iExitBell;//退出铃声的初始化
	ps.m_pSystemSetPage .m_sRunbellUserMode =StrRunBell;
	ps.m_pSystemSetPage .m_sExitbellUserMode =StrExitBell;
	ps.m_pSystemSetPage .m_iSystemStyle =m_iSystemStyle;//系统主题的初始化
	ps.m_pSystemSetPage .m_iTipTime =(m_iTipTime-5)/5;
	if(ps.DoModal ()==IDOK)
	{
		//首先传送所有数据,不论修改与否
		all.m_bAutoRun =ps.m_pSystemSetPage .m_bAutoRun ;
		all.m_iRunBell =ps.m_pSystemSetPage .m_iRunBell ;
		all.m_sRunbellUserMode =ps.m_pSystemSetPage .m_sRunbellUserMode ;
		all.m_iExitBell =ps.m_pSystemSetPage .m_iExitBell ;
		all.m_sExitbellUserMode =ps.m_pSystemSetPage .m_sExitbellUserMode ;
		all.m_iTerm =ps.m_pSystemSetPage .m_iTerm ;
		all.m_iSystemStyle =ps.m_pSystemSetPage .m_iSystemStyle ;
		all.m_iTipTime =ps.m_pSystemSetPage .m_iTipTime ;
		all.m_sNewId =ps.m_pUserSetPage .m_sNewId ;
		all.m_sNewName =ps.m_pUserSetPage .m_sNewName ;
		all.m_sNewPw1 =ps.m_pUserSetPage .m_sNewPw1 ;
		all.m_sNewPw2 =ps.m_pUserSetPage .m_sNewPw2 ;
		all.m_sOldPw =ps.m_pUserSetPage .m_sOldPw ;
		//先登记系统设置的,先保存学期信息及相应的铃声
        if(m_pUserSet.IsOpen ())
			m_pUserSet.Close ();
		m_pUserSet.Open ();
		m_pUserSet.MoveFirst ();
		m_pUserSet.Edit ();
		m_pUserSet.m_uTerm =all.m_iTerm ;
		m_pUserSet.m_uExitBell =all.m_sExitbellUserMode ;
		m_pUserSet.m_uRunBell =all.m_sRunbellUserMode ;
		m_pUserSet.Update ();
		m_pUserSet.MoveLast ();
		m_pUserSet.Close ();
		//再通过全局变量保存其他信息
		m_iSystemStyle=all.m_iSystemStyle ;
		m_bAutoRun=all.m_bAutoRun ;
		m_iRunBell=all.m_iRunBell ;
		m_iExitBell=all.m_iExitBell ;
		m_iTerm=all.m_iTerm ;
		m_iTipTime=all.m_iTipTime *5+5;
		//上面这些信息保存都是不需要密码的
		//下面保存用户帐户信息,关系到保密性,故必须是用户自身才有权利修改
	    if(all.m_sOldPw !=OldPw)//旧密码不正确,不可以修改!
		{
			MessageBox(L"旧密码输入不正确,帐户设置失败!",L"错误",MB_ICONSTOP);
			return ;
		}
		//再次要确认两次的新密码是否相同
		if(all.m_sNewPw1 !=all.m_sNewPw2 )
		{
			MessageBox(L"两次密码不相符,帐户设置失败!",L"错误",MB_ICONSTOP);
			return ;
		}
		if(m_pUserSet.IsOpen ())
			m_pUserSet.Close ();
		m_pUserSet.Open ();
		m_pUserSet.MoveFirst ();
		m_pUserSet.Edit ();
		m_pUserSet.m_uId =all.m_sNewId ;
		m_pUserSet.m_uName =all.m_sNewName ;
		m_pUserSet.m_uPassword =all.m_sNewPw1 ;
        m_pUserSet.Update ();
		m_pUserSet.MoveLast ();
		m_pUserSet.Close ();//
		//最后,为了保证主题能够马上应用,必须重起
		//下面这一招用的很棒!!!巧妙地实现了重起!!!
		//并且还可以逃过登录对话框!Power的独创!
		//现在就来设置是否开机自动运行了
		if(m_bAutoRun)//通过注册表开机自动运行
		{
			CString sPath;
			GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
			sPath.ReleaseBuffer ();
			SetAutoRun(sPath);
		}
		else//否则删除注册表
		{
			CString sPath;
			GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
			sPath.ReleaseBuffer ();
			DeleteAutoRun(sPath);
		}
		WinExec(LPCSTR("SMS.exe"),NULL);//启动另一个程序
		//发消息告诉主窗口,要“重起”了,其实只是把它巧妙的关闭
		m_bReboot=true;
		PostMessage(WM_CLOSE);//设置对话框自己再关闭
		return ;

	}
	EndWaitCursor();
}

void CSMSDlg::OnBnClickedEntertainBt ()
{
//削去了娱乐版了,这个地方放帮助文档
	BeginWaitCursor();
	HWND handle=0;
	ShellExecuteW(handle, _T("open"), _T("SMS.chm"), NULL, NULL, SW_SHOWNORMAL);
	EndWaitCursor();
}

int CSMSDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	
	return 0;
}
HBRUSH CSMSDlg::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(TRANSPARENT);//pDC->SetBkColor (m_RGB_BkColor);
	return (HBRUSH)m_brush.GetSafeHandle ();
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
//	return hbr;
}
void CSMSDlg::SaveWindowState(bool Reboot)//软件退出的时候保存软件状态
{
	CString version=L"Version 1.0";//软件版本
	theApp.WriteProfileInt (version,L"SystemStyle",m_iSystemStyle);//系统主题,从0到10,0为默认的,1到10为其他主题
	theApp.WriteProfileInt (version,L"AutoRun",m_bAutoRun);
	theApp.WriteProfileInt (version,L"RunBell",m_iRunBell);
	theApp.WriteProfileInt (version,L"ExitBell",m_iExitBell);
	theApp.WriteProfileInt (version,L"Reboot",Reboot);
	theApp.WriteProfileInt (version,L"TipTime",m_iTipTime);
}
void CSMSDlg::OnEndSession (BOOL bEnding)
{
    if (bEnding)
        SaveWindowState (false);
	CDialog::OnEndSession (bEnding);
}
void CSMSDlg::OnTimer(UINT nTimerId) 
{
	//下面更新系统时钟和欢迎信息
	switch(nTimerId)
	{
	case SMS_TIME_TIMER:
		{
			//显示系统时钟
			CString StrTime;
			CTime   Time;
			//刷新时间
			Time=CTime::GetCurrentTime();
			StrTime.Format(L"现在时间 %02i:%02i:%02i",Time.GetHour(),Time.GetMinute(),Time.GetSecond());
			SetDlgItemText(IDC_TIME_TIP_STATIC, StrTime);
			//根据系统时间更新欢迎信息,因为很可能用户用软件从上午到下午的情况。。。全面考虑
			CString StrWelcome;
			int Hour;
			Hour=Time.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);//显示
		}
		break;
	case SMS_LOGION_TIMER:
		{
			//下面显示名言
			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)//如果没有名言,则显示默认的名言,要很经典才行
			{
			    StrLogion=L"醉卧沙场君莫笑,古来征战几人回!";
				SetDlgItemText(IDC_MOTTO_STATIC,StrLogion);
				m_pLogionSet.Close ();
			}
			else//否则随机选择显示
			{	
				Count=0;
				m_pLogionSet.MoveFirst();
				while(!m_pLogionSet.IsEOF())
				{
					m_pLogionSet.MoveNext();
				    Count++;//先计算总数
				}
				m_pLogionSet.MoveFirst();//再跳回到第一个
				srand((unsigned) time(NULL)*rand());
				srand(rand());//再种多一个随机种子
				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);
			CDialog::OnTimer(nTimerId);
		}
		break;
	case SMS_TIP_TIMER:
		{
			if(ntipNum<RemindAmount)
			{
				CString StrCaption,StrMessage;
				StrCaption=m_cInfoListCtrl.GetItemText (ntipNum,0);
				StrMessage=m_cInfoListCtrl.GetItemText (ntipNum,1);
				CMsgWnd *pMsgWindow=new CMsgWnd;
				CMsgWnd& msgWindow=*pMsgWindow;
				msgWindow.m_iLine =StrMessage.GetLength ()/20+1;//计算总共多少行
				msgWindow.m_strMessage =StrMessage;
				msgWindow.m_strCaption =StrCaption;
				msgWindow.CreateMsgWindow();
				msgWindow.ShowWindow(SW_SHOW);
				msgWindow.UpdateWindow();
				ntipNum++;
			}
		}
		break;
	}
}
void CSMSDlg::OnClose()
{
	// TODO: 在此添加专用代码和/或调用基类
	SaveWindowState(m_bReboot);
    KillTimer(SMS_TIME_TIMER);
	KillTimer(SMS_LOGION_TIMER);
	if(m_iTipTime>=10)
	    KillTimer(SMS_TIP_TIMER);
	//先处理好退出声音
	if(!m_bReboot)//重起的时候不要用声音
	{
		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"\\铃声\\";
		switch(m_iRunBell)

⌨️ 快捷键说明

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