实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
// AutoShutDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AutoShut.h"
#include "AutoShutDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// 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 OnUrl();
//}}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_URL, OnUrl)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAutoShutDlg dialog
CAutoShutDlg::CAutoShutDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAutoShutDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAutoShutDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAutoShutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAutoShutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAutoShutDlg, CDialog)
//{{AFX_MSG_MAP(CAutoShutDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_BN_CLICKED(IDC_AUTOSHUT, OnAutoshut)
ON_BN_CLICKED(IDC_HELP, OnHelp)
ON_BN_CLICKED(IDC_VISITWEB, OnVisitweb)
ON_CBN_SELCHANGE(IDC_YEARCOMBO, OnSelchangeYearcombo)
ON_CBN_SELCHANGE(IDC_MONTHCOMBO, OnSelchangeMonthcombo)
ON_EN_CHANGE(IDC_HOUR, OnChangeHour)
ON_EN_CHANGE(IDC_MINUTE, OnChangeMinute)
ON_EN_CHANGE(IDC_SECOND, OnChangeSecond)
ON_BN_CLICKED(IDC_SHUTRADIO, OnShutradio)
ON_BN_CLICKED(IDC_RESTARTRADIO, OnRestartradio)
ON_BN_CLICKED(IDC_LOGOUT, OnLogout)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAutoShutDlg message handlers
BOOL CAutoShutDlg::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);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=this->m_hWnd;
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;
CString szToolTip;
szToolTip=_T("Windows定时关机助手1.1");
_tcscpy(m_tnid.szTip, szToolTip);
m_tnid.uID=IDR_MAINFRAME;
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tnid.hIcon=hIcon;
::Shell_NotifyIcon(NIM_ADD,&m_tnid);
if(hIcon)::DestroyIcon(hIcon);
ShowTime();
SetTimer(0,100,0);
CTime currentTime = CTime::GetCurrentTime();
int year = currentTime.GetYear();
int month = currentTime.GetMonth();
int day = currentTime.GetDay();
CComboBox *yearCombo = (CComboBox*)GetDlgItem(IDC_YEARCOMBO);
CComboBox *monthCombo = (CComboBox*)GetDlgItem(IDC_MONTHCOMBO);
CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO);
yearCombo->SetCurSel(year-2008);
monthCombo->SetCurSel(month-1);
InitDaycombo();
dayCombo->SetCurSel(day-1);
SetDlgItemText(IDC_HOUR,"00");
SetDlgItemText(IDC_MINUTE,"00");
SetDlgItemText(IDC_SECOND,"00");
CheckDlgButton(IDC_SHUTRADIO,TRUE);
return TRUE; // return TRUE unless you set the focus to a control
}
void CAutoShutDlg::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 CAutoShutDlg::OnPaint()
{
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();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAutoShutDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAutoShutDlg::ShowTime()
{
CTime currentTime = CTime::GetCurrentTime();
int year = currentTime.GetYear();
int month = currentTime.GetMonth();
int day = currentTime.GetDay();
int hour = currentTime.GetHour();
int minute = currentTime.GetMinute();
int second = currentTime.GetSecond();
CString yearS,monthS,dayS,hourS,minuteS,secondS;
yearS.Format("%d",year);
monthS.Format("%d",month);
dayS.Format("%d",day);
hourS.Format("%d",hour);
minuteS.Format("%d",minute);
secondS.Format("%d",second);
CString timeNow = yearS "年" monthS "月" dayS "日" hourS "时" minuteS "分" secondS "秒";
GetDlgItem(IDC_TIMENOW)->SetWindowText(timeNow);
}
int ii = 0;
int radio = 1;
void CAutoShutDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 0:
ShowTime();
CDialog::OnTimer(nIDEvent);
break;
case 1:
CTime shutTime = GetSetTime();
CTimeSpan oneMinTime(0,0,1,0);
if((shutTime - CTime::GetCurrentTime()) < oneMinTime)
{
if(radio == 1)
{
if(ii == 0)
{
ii ;
if(MessageBox("计算机将于1分钟内关闭,是否取消关闭?按\"是\"则取消自动关闭.若允许自动关闭,请保存尚未关闭的程序!","自动关机警告",MB_YESNO) == IDYES)
{
KillTimer(1);
ii = 0;
}
}
}
else if(radio == 2)
{
if(ii == 0)
{
ii ;
if(MessageBox("计算机将于1分钟内注销,是否取消注销?按\"是\"则取消自动注销.若允许自动关闭,请保存尚未关闭的程序!","自动注销警告",MB_YESNO) == IDYES)
{
KillTimer(1);
ii = 0;
}
}
}
else if(radio == 3)
{
if(ii == 0)
{
ii ;
if(MessageBox("计算机将于1分钟内重启,是否取消重启?按\"是\"则取消自动重启.若允许自动关闭,请保存尚未关闭的程序!","自动重启警告",MB_YESNO) == IDYES)
{
KillTimer(1);
ii = 0;
}
}
}
}
if(CTime::GetCurrentTime() == shutTime)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if(radio == 1)
{
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);
}
else if(radio == 2)
{
ExitWindowsEx(EWX_LOGOFF,0);
}
else if(radio == 3)
{
ExitWindowsEx(EWX_REBOOT,0);
}
}
}
break;
}
}
void CAutoShutDlg::OnAutoshut()
{
// TODO: Add your control notification handler code here
CTime shutTime = GetSetTime();
if(shutTime < CTime::GetCurrentTime())
{
MessageBox("设置的时间不能早于当前系统时间!");
}
else
{
SetTimer(1,1000,0);
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
if(radio == 1)
{
MessageBox("定时关机已启动!","定时关机已启动");
}
else if(radio == 2)
{
MessageBox("定时注销已启动!","定时关机已启动");
}
else if(radio == 3)
{
MessageBox("定时重启已启动!","定时关机已启动");
}
}
}
void CAutoShutDlg::OnExit()
{
// TODO: Add your control notification handler code here
this->SendMessage(WM_CLOSE);
}
void CAutoShutDlg::OnHelp()
{
// TODO: Add your control notification handler code here
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
void CAutoShutDlg::OnVisitweb()
{
// TODO: Add your control notification handler code here
ShellExecute(NULL,"open","http://www.tobeahero.cn/default.asp?cateID=5",NULL,NULL,SW_SHOWNORMAL);
}
void CAutoShutDlg::InitDaycombo()
{
CComboBox *yearCombo = (CComboBox*)GetDlgItem(IDC_YEARCOMBO);
CComboBox *monthCombo = (CComboBox*)GetDlgItem(IDC_MONTHCOMBO);
CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO);
int year = yearCombo->GetCurSel() 2008;
int month = monthCombo->GetCurSel() 1;
if(month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
{
for(int i = 1; i<32; i )
{
CString dayS;
dayS.Format("%d",i);
dayCombo->AddString(dayS);
}
}
else if(month == 2 && (year%400 == 0 || (year%4 == 0 && year%100 != 0)))
{
for(int i = 1; i<30; i )
{
CString dayS;
dayS.Format("%d",i);
dayCombo->AddString(dayS);
}
}
else if(month == 4 || month == 6 || month == 9 || month == 11)
{
for(int i = 1; i<31; i )
{
CString dayS;
dayS.Format("%d",i);
dayCombo->AddString(dayS);
}
}
else
{
for(int i = 1; i<29; i )
{
CString dayS;
dayS.Format("%d",i);
dayCombo->AddString(dayS);
}
}
dayCombo->SetCurSel(0);
}
void CAutoShutDlg::OnSelchangeYearcombo()
{
// TODO: Add your control notification handler code here
CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO);
dayCombo->ResetContent();
InitDaycombo();
}
void CAutoShutDlg::OnSelchangeMonthcombo()
{
// TODO: Add your control notification handler code here
CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO);
dayCombo->ResetContent();
InitDaycombo();
}
void CAutoShutDlg::OnChangeHour()
{
// TODO: Add your control notification handler code here
CString hour ;
GetDlgItem(IDC_HOUR)->GetWindowText(hour);
if(hour.GetLength() > 2)
{
GetDlgItem(IDC_HOUR)->SetWindowText("00");
}
if(atoi(hour) < 0 || atoi(hour) > 24)
{
GetDlgItem(IDC_HOUR)->SetWindowText("00");
}
}
void CAutoShutDlg::OnChangeMinute()
{
// TODO: Add your control notification handler code here
CString minute ;
GetDlgItem(IDC_MINUTE)->GetWindowText(minute);
if(minute.GetLength() > 2)
{
GetDlgItem(IDC_MINUTE)->SetWindowText("00");
}
if(atoi(minute) < 0 || atoi(minute) > 60)
{
GetDlgItem(IDC_MINUTE)->SetWindowText("00");
}
}
void CAutoShutDlg::OnChangeSecond()
{
// TODO: Add your control notification handler code here
CString second ;
GetDlgItem(IDC_SECOND)->GetWindowText(second);
if(second.GetLength() > 2)
{
GetDlgItem(IDC_SECOND)->SetWindowText("00");
}
if(atoi(second) < 0 || atoi(second) > 60)
{
GetDlgItem(IDC_SECOND)->SetWindowText("00");
}
}
void CAboutDlg::OnUrl()
{
// TODO: Add your control notification handler code here
ShellExecute(NULL,"open","http://www.tobeahero.cn/default.asp?cateID=5",NULL,NULL,SW_SHOWNORMAL);
}
void CAutoShutDlg::OnShutradio()
{
// TODO: Add your control notification handler code here
radio = 1;
}
void CAutoShutDlg::OnRestartradio()
{
// TODO: Add your control notification handler code here
radio = 3;
}
void CAutoShutDlg::OnLogout()
{
// TODO: Add your control notification handler code here
radio = 2;
}
CTime CAutoShutDlg::GetSetTime()
{
CString yearS,monthS,dayS,hourS,minuteS,secondS;
GetDlgItemText(IDC_YEARCOMBO,yearS);
GetDlgItemText(IDC_MONTHCOMBO,monthS);
GetDlgItemText(IDC_DAYCOMBO,dayS);
GetDlgItemText(IDC_HOUR,hourS);
GetDlgItemText(IDC_MINUTE,minuteS);
GetDlgItemText(IDC_SECOND,secondS);
return CTime(atoi(yearS),atoi(monthS),atoi(dayS),atoi(hourS),atoi(minuteS),atoi(secondS),-1);
}
LRESULT CAutoShutDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message){
case MYWM_NOTIFYICON:
//如果是用户定义的消息
if(lParam==WM_LBUTTONDOWN)
{ //鼠标单击时主窗口出现
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
}
break;
case WM_SYSCOMMAND:
//如果是系统消息
if(wParam==SC_MINIMIZE){
//接收到最小化消息时主窗口隐藏
AfxGetApp()->m_pMainWnd->
ShowWindow(SW_HIDE);
return 0;
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
void CAutoShutDlg::OnDestroy()
{
CDialog::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE,&m_tnid);
// TODO: Add your message handler code here
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论