📄 smsdlg.cpp
字号:
}
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 + -