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

📄 lockdlg.cpp

📁 C语言课程设计案例精编
💻 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 + -