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

📄 ontcdlg.cpp

📁 也是一款定时关机的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OnTCDlg.cpp : implementation file
//
#include "stdafx.h"
#include "OnTime.h"
#include "OnTCDlg.h"
#include "SetDlg.h"
#include "CloseDlg.h"
#include "AlertDlg.h"
#include "BarterDlg.h"
#include "ChangeBarterDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include<direct.h>
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	afx_msg void OnStaticEmail();
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

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

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	ON_BN_CLICKED(IDC_STATIC_EMAIL, OnStaticEmail)
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
	ON_WM_ENDSESSION()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COnTCDlg dialog

COnTCDlg::COnTCDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COnTCDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COnTCDlg)
	m_rem = _T("");
	m_close_time = 0;
	m_static_time = _T("");
	m_alert = _T("");
	i=0;
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void COnTCDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COnTCDlg)
	DDX_Text(pDX, IDC_REM, m_rem);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER, m_close_time);
	DDX_Text(pDX, IDC_STATIC_DATE, m_static_time);
	DDX_Text(pDX, IDC_ALERT, m_alert);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(COnTCDlg, CDialog)
	//{{AFX_MSG_MAP(COnTCDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_EN_CHANGE(IDC_ALERT, OnChangeAlert)
	ON_EN_CHANGE(IDC_REM, OnChangeRem)
	ON_BN_CLICKED(IDC_CLOSE, OnClose)
	ON_BN_CLICKED(IDC_HIDE, OnHide)
	ON_BN_CLICKED(IDC_SET, OnSet)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETIMEPICKER, OnDatetimechangeDatetimepicker)
	ON_WM_TIMER()
	ON_COMMAND(IDM_OTHER_EXIT,OnOtherExit)
	ON_COMMAND(IDM_LOCK,OnLock)
	ON_COMMAND(IDM_BARTER,OnBarter)
	ON_COMMAND(IDM_SHOW,OnShow)
	ON_COMMAND(IDM_SET,OnMenuSet)
	ON_MESSAGE(MYICON,OnMyicon)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COnTCDlg message handlers

BOOL COnTCDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	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);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
///////////////////////////////////////////////////////
	SetWindowText("定时提醒第二版");
	m_hidetime=0;//初始化隐藏记录标志
	// TODO: Add extra initialization here
	m_set_flag=FALSE;
	m_barter_flag=FALSE;
	m_lock_flag=FALSE;
	m_otherexit_flag=FALSE;
	if(RegRead())
	{
		HKEY key=HKEY_USERS;
		::RegCreateKeyEx(key, ".DEFAULT\\Software\\OnTC", 0L, NULL,REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &key, 0);
		LPCTSTR inf="gaotc";
		::RegSetValueEx(key,"barter",0L,REG_SZ,(CONST BYTE *)inf,1);
		::RegCloseKey(key);
		m_data[0]=15+32;//默认定时
		m_data[1]=5+32;//默认延时
		m_data[2]=0+32;//启动最小化
		m_data[3]=0+32;//关机模式
		m_data[4]=0+32;//记录模式
		m_data[5]=23+32;//关机时
		m_data[6]=59+32;//关机分
		m_alert="定时关机程序第二版,2003年5月";
		RegWrite();
	}
	HKEY key=HKEY_USERS;char  szString[512];DWORD dwSize = 200;
	int flag=(::RegOpenKeyEx(key,".DEFAULT\\Software\\OnTC", 0L,KEY_ALL_ACCESS, &key));
	if(flag==0)
	{
		::RegQueryValueEx(key, "string", NULL,0, (BYTE *) szString, &dwSize);	
		m_alert=szString;
		::RegCloseKey(key);
	}
//	char buf[80];getcwd(buf,80);m_dir=buf;
	time(&m_now);
	if(m_data[4]-32)//确认是否默认
	{
		m_ctime=m_now;
		m_rem.Format("%d",((m_data[5]-32-m_ctime.GetHour())*3600+(m_data[6]-32-m_ctime.GetMinute())*60)/60);
		if(atoi(m_rem)<=0)
		{
			CString str;
			str.Format("你设定的关机时间已经过去%d分钟了,\n\t确实要关机吗?",atoi(m_rem)*(-1));
			if(MessageBox(str,"早该关机了",MB_OKCANCEL|MB_ICONWARNING)==IDOK)
			{
				Close();
				return TRUE;
			}
			else
				m_rem.Format("%d",m_data[0]-32);
		}	
		m_close_time=m_now+atoi(m_rem)*60-1;
	}
	else
	{
		m_close_time=(m_data[0]-32)*60+m_now-1;
		m_rem.Format("%d",m_data[0]-32);
		HKEY key=HKEY_LOCAL_MACHINE; 
		::RegOpenKeyEx(key,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0L,KEY_ALL_ACCESS, &key);
		::RegDeleteValue(key, "OnTC");
		::RegCloseKey(key);
	}
///////////////////////////////
	NOTIFYICONDATA tnid;
	tnid.cbSize = sizeof(NOTIFYICONDATA);
	tnid.hWnd = AfxGetApp()->m_pMainWnd->m_hWnd;
	tnid.uID = IDR_MAINFRAME;
	tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
	tnid.uCallbackMessage = MYICON;
	tnid.hIcon = m_hIcon;
	CString iconstr,mode;
	if(m_data[3]-32)mode="立即关机";
	else mode="弹出对话框";
	iconstr.Format("%s分后%s\"%s\"",m_rem,mode,m_alert);
	lstrcpyn(tnid.szTip, iconstr, sizeof(tnid.szTip));
	Shell_NotifyIcon(NIM_ADD,&tnid);
////////////////////////////////
	SetTimer(1,1000,NULL);
	UpdateData(FALSE);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

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

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void COnTCDlg::OnPaint() 
{if(m_data[2]-32)if(!i)OnHide();i=1;
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR COnTCDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


void COnTCDlg::OnChangeAlert() 
{
	UpdateData(TRUE);	
}

void COnTCDlg::OnChangeRem() 
{
	UpdateData(TRUE);
	m_close_time=atoi(m_rem)*60+m_now-1;
	UpdateData(FALSE);
}

void COnTCDlg::OnClose() 
{
	if(m_data[3]-32)
	{
		if(atoi(m_rem)<=0)
			Close();
		else
		{
			KillTimer(1);
			CAlertDlg dlg;
			if(dlg.DoModal()==IDOK)
				Close();
			else
				SetTimer(1,1000,NULL);
		}
	}
	else
	{
		KillTimer(1);
		CAlertDlg dlg;
		if(dlg.DoModal()==IDOK)
			Close();
		else
		{
			if(atoi(m_rem)<=0)
			{
				m_rem.Format("%d",m_data[1]-32);
				m_close_time=atoi(m_rem)*60+m_now-1;
			}
			UpdateData(FALSE);
			SetTimer(1,1000,NULL);
		}
	}
}

void COnTCDlg::OnHide() 
{
	// TODO: Add your control notification handler code here
	ShowWindow(SW_HIDE);
	m_data[2]=33;
	m_data[4]=33;
	m_data[5]=m_close_time.GetHour()+32;
	m_data[6]=m_close_time.GetMinute()+32;
	HKEY key=HKEY_LOCAL_MACHINE;
//	LPCTSTR inf;
	::RegOpenKeyEx(key,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0L,KEY_ALL_ACCESS, &key);

⌨️ 快捷键说明

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