📄 lockdlg.cpp
字号:
// LockDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Page.h"
#include "LockDlg.h"
#include"PageDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLockDlg dialog
CLockDlg::CLockDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLockDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLockDlg)
m_state = _T("");
//}}AFX_DATA_INIT
}
void CLockDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLockDlg)
DDX_Control(pDX, IDC_LOCK, m_lock);
DDX_Control(pDX, IDC_RE, m_re);
DDX_Control(pDX, IDD_CHANGE_PWD, m_changepwd);
DDX_Control(pDX, IDOK, m_ok);
DDX_Control(pDX, IDC_SHUTDOWN, m_shut);
DDX_Control(pDX, IDC_EXIT, m_exit);
DDX_Control(pDX, IDC_PASSWORD, m_pwd);
DDX_Text(pDX, IDC_STATE, m_state);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLockDlg, CDialog)
//{{AFX_MSG_MAP(CLockDlg)
ON_BN_CLICKED(IDD_CHANGE_PWD, OnChangePwd)
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_BN_CLICKED(IDC_SHUTDOWN, OnShutdown)
ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_RE, OnRe)
ON_BN_CLICKED(IDC_LOCK, OnLock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLockDlg message handlers
void CLockDlg::OnChangePwd()
{
}
void CLockDlg::OnOK()
{
TCHAR NewPassword[15],OldPassword[15],NewPassword2[15];
GetDlgItem(IDC_OLDPSW)->GetWindowText(OldPassword,15);
if(strcmp(Password,OldPassword)==0) //检查旧密码是否正确
{
GetDlgItem(IDC_NEWPSW2)->GetWindowText(NewPassword2,15);
GetDlgItem(IDC_NEWPSW)->GetWindowText(NewPassword,15);
if(strcmp(NewPassword,NewPassword2)==0)
{
WriteProfileString("实用闹钟","密码",NewPassword); //设定新密码
m_state="密码设置成功!";
UpdateData(false); MessageBeep(MB_ICONASTERISK);
strcpy(Password,NewPassword);
}
else
{
m_state="新密码不一致!"; MessageBeep(0xffffffff);
UpdateData(false);
}
}
else
{
m_state="原始密码错误!"; MessageBeep(0xffffffff);
UpdateData(false);
}
}
void CLockDlg::OnCancel()
{
}
void CLockDlg::OnExit()
{
MessageBeep(MB_ICONASTERISK);
CDialog::OnOK();
AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL);
}
void CLockDlg::OnShutdown()
{
MessageBeep(MB_ICONASTERISK);
if(MessageBox("你真的要关机吗? ","闹钟",MB_ICONQUESTION | MB_YESNO |MB_DEFBUTTON2 )==IDYES)
{
if( ((CPageDlg*)AfxGetMainWnd())->GetOSVersion()=="Win2000")
{
static HANDLE hToken; //为了能在WinNT/2K下实现关机功能
static TOKEN_PRIVILEGES tp;
static LUID luid;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount =1;
tp.Privileges [0].Luid =luid;
tp.Privileges [0].Attributes =SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL);
ExitWindowsEx(EWX_SHUTDOWN,0); //关机
}
else
ExitWindowsEx(EWX_SHUTDOWN,0); //关机
}
}
int CLockDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
::GetProfileString("实用闹钟","密码","000",Password,(DWORD)15); //密码默认为000,由Password返回
SetTimer(1,50,NULL);
return 0;
}
UINT snd(LPVOID wParam)
{
PlaySound("IDR_LOCK",AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT );
return 0;
}
void CLockDlg::OnTimer(UINT nIDEvent)
{
// ::GetWindowText(GetDlgItem(hwnd,IDC_PASSWORD),szPassword,20);
m_pwd.GetWindowText(szPassword,20);
if(strcmp(szPassword,Password)==0) //密码为:000
{
KillTimer(1); //关闭计时器,
GetDlgItem(IDC_EXIT)->EnableWindow(true);
m_state="你的密码正确!"; MessageBeep(MB_ICONASTERISK );
UpdateData(false);
::ShowWindow(renxu,SW_SHOW);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,TRUE,&dan,NULL);
ClipCursor(NULL);
GetDlgItem(IDC_LOCK)->EnableWindow(true);
}
CDialog::OnTimer(nIDEvent);
}
BOOL CLockDlg::OnInitDialog()
{
CDialog::OnInitDialog();
TCHAR szName[16];
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN); //获得屏幕高度、宽度
unsigned long size=16;
renxu=::FindWindow("Shell_traywnd",0);
::ShowWindow(renxu,SW_HIDE);
GetUserName(szName,&size); //取得当前用户名
GetDlgItem(IDC_USERNAME)->SetWindowText(szName);
GetDlgItem(IDC_PASSWORD)->SetFocus();
MoveWindow(0,0,x,y,TRUE);
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); //保持窗口一直在上面
GetDlgItem(IDC_AREA)->GetWindowRect(&rMove); //取得窗口区域
ClipCursor(&rMove); //把鼠标移动范围限制在该区域中 */
GetDlgItem(IDC_EXIT)->EnableWindow(false);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,FALSE,&dan,NULL); //进入屏幕保护状态
LOGFONT lf;
::ZeroMemory(&lf,sizeof(lf)); //API函数,它将一块内存清零
lf.lfHeight =500;
lf.lfWeight =FW_BOLD; //粗体, FW_NORMAL常规
lf.lfItalic =false;
::lstrcpy(lf.lfFaceName ,"Times New Roman");
//::lstrcpy也是API函数,它将一个文本字符串从一个内存位置复制到另一个内存位置
//你也可以用C函数memset和 strcpy(实际上,应该调用 _tcscpy()而不是strcpy这样就能
//处理ANSI或Unicode 字符了),但是经常调用API函数减少了静态连接库的程序代码
m_font.CreatePointFontIndirect(&lf);
GetDlgItem(IDC_STATE)->SetFont(&m_font);
GetDlgItem(IDC_LOCK)->EnableWindow(false);
m_state="处于锁定状态!";
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
HBRUSH CLockDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
/* HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_STATE)
pDC->SetTextColor(RGB(0,128,192));
return hbr; */
pDC->SetBkColor(RGB(0,0,0)); //设置成黑色的背景
pDC->SetTextColor(RGB(33,93,222));
return (HBRUSH)CreateSolidBrush(RGB(0,0,0));
}
void CLockDlg::OnRe()
{
MessageBeep(MB_ICONEXCLAMATION);
SetDlgItemText(IDC_OLDPSW,"");
SetDlgItemText(IDC_NEWPSW,"");
SetDlgItemText(IDC_NEWPSW2,"");
GetDlgItem(IDC_OLDPSW)->SetFocus();
}
void CLockDlg::OnLock()
{
MessageBeep(MB_ICONASTERISK);
ClipCursor(&rMove); //把鼠标移动范围限制在该区域中 */
m_state="处于锁定状态!";
UpdateData(false);
renxu=::FindWindow("Shell_traywnd",0);
::ShowWindow(renxu,SW_HIDE);
GetDlgItem(IDC_EXIT)->EnableWindow(false);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,FALSE,&dan,NULL);
SetTimer(1,50,NULL);
m_pwd.SetWindowText("");
m_pwd.SetFocus();
GetDlgItem(IDC_LOCK)->EnableWindow(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -