电源管理(MFC)

// Show_Power.cpp : 实现文件
//


#include "stdafx.h"
#include <Windows.h>
#include <WinBase.h>
#include "afxdialogex.h"
#include "Power.h"
#include "Show_Power.h"
#include <string>
#include <fstream>
#include <atlimage.h>
//#include <time.h>
#include "resource.h"
using namespace std;


fstream fout;
SYSTEM_POWER_STATUS Lps;
BOOL Flag_power=FALSE; //判断是否插电源了


// CShow_Power 对话框


IMPLEMENT_DYNAMIC(CShow_Power, CDialog)


CShow_Power::CShow_Power(CWnd* pParent /*=NULL*/)
: CDialog(CShow_Power::IDD, pParent)
, m_static_time()
, m_static_power_status(_T(""))
, m_static_left(_T(""))
{

}


CShow_Power::~CShow_Power()
{
CWnd::KillTimer(TIMER);
}


void CShow_Power::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_STATIC_time, m_static_time);
DDX_Text(pDX, IDC_STATIC_power_status, m_static_power_status);
DDX_Text(pDX, IDC_STATIC_left, m_static_left);
}




BEGIN_MESSAGE_MAP(CShow_Power, CDialog)
ON_BN_CLICKED(IDOK, &CShow_Power::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CShow_Power::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BUTTON_battery, &CShow_Power::OnClickedButtonBattery)
ON_BN_CLICKED(IDC_BUTTON_shutdown, &CShow_Power::OnBnClickedButtonshutdown)
// ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_TIMER()
//ON_STN_CLICKED(IDC_STATIC_minute, &CShow_Power::OnStnClickedStaticminute)
//ON_STN_CLICKED(IDC_STATIC_status, &CShow_Power::OnStnClickedStaticstatus)
END_MESSAGE_MAP()




// CShow_Power 消息处理程序




void CShow_Power::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialog::OnOK();
BOOL Flag;
Flag=GetSystemPowerStatus(&Lps);
if(Flag==0)
{
AfxMessageBox(_T("获取电池信息失败!"));
}
else
{
if(Lps.ACLineStatus==0)
{
//AfxMessageBox(_T("脱机状态"));
GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_SHOW);
switch(Lps.BatteryFlag)
{
case 1: AfxMessageBox(_T("电量高于66%")); break;
case 2: AfxMessageBox(_T("电量高于5%,低于33%")); ExitWindowsEx(EWX_SHUTDOWN,0); break;
case 4: AfxMessageBox(_T("电量低于5%")); break;
default:AfxMessageBox(_T("电量高于33%,低于66%")); break;
}
}
else if(Lps.ACLineStatus==1)
{
if(Lps.BatteryFlag==128)
{
AfxMessageBox(_T("此电脑没有电池"));
GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_HIDE);
}
else
{
AfxMessageBox(_T("此电脑装配了电池,但是在使用交流电"));
GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_HIDE);
//GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_SHOW);
//AfxMessageBox(_T("在线状态"));
}
}
}

}




void CShow_Power::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
//PostQuitMessage(0);
exit(0);
//CDialog::OnCancel();
}


void CShow_Power::OnClickedButtonBattery()
{
// TODO: 在此添加控件通知处理程序代码
BOOL Flag;
Flag=GetSystemPowerStatus(&Lps);
if(Lps.ACLineStatus==0)
{
//fout.open("F://Test_say_hello.txt");
m_static_time=(int)Lps.BatteryLifeTime/60; //显示电量剩余
//string temp="电池剩余电量:";
//temp=temp+remain_time; //电量显示有问题
//fout<<"电池剩余电量:"<<remain_time<<endl;


//fout.close();
UpdateData(FALSE); //向控件显示数据



}
else
{
AfxMessageBox(_T("无电池信息!!!"));
}
}




void CShow_Power::OnBnClickedButtonshutdown()
{
// TODO: 在此添加控件通知处理程序代码
ExitWindowsEx(EWX_SHUTDOWN,0);
}




//void CShow_Power::OnTimer(UINT_PTR nIDEvent)
//{
// // TODO: 在此添加消息处理程序代码和/或调用默认值
// m_static_time++;
// UpdateData(FALSE); //将变量的值传给控件
// AfxMessageBox(_T(m_static_time));
// CDialog::OnTimer(nIDEvent);
//}
//void CALLBACK EXPORT TimeProc(HWND hwnd,UINT msg,UINT nIDEvent,DWORD dwtime)
//{
//AfxMessageBox(nIDEvent);
//};


int CShow_Power::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;


// TODO:  在此添加您专用的创建代码

CWnd::SetTimer(TIMER,5000,NULL);

return 0;
}




void CShow_Power::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//int temp=_ttoi(m_static_time);
//temp++;
//m_static_time.Format(_T("%d"),temp);
//UpdateData(FALSE);
//MessageBox(m_static_time);
GetDlgItem(IDC_STATIC_status)->ShowWindow(SW_SHOW);
BOOL Flag;
Flag=GetSystemPowerStatus(&Lps);
if(Flag==0)
{
AfxMessageBox(_T("获取电池信息失败!"));
}
else
{
if(Lps.ACLineStatus==0) //判断使用的电池还是交流电
{
//AfxMessageBox(_T("脱机状态"));
if(Flag_power==FALSE)
{
Flag_power=TRUE;
AfxMessageBox(_T("亲,现在使用的是备用电源,请插上插头!"));
}
m_static_power_status=_T("正在使用备用电源,请接上电源!");
m_static_time=(int)Lps.BatteryLifeTime/60; //显示电量剩余
UpdateData(FALSE); //向控件显示数据
GetDlgItem(IDC_STATIC)->ShowWindow(SW_SHOW); //若使用交流电则隐藏电池信息
GetDlgItem(IDC_STATIC_time)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_minute)->ShowWindow(SW_SHOW);

//GetDlgItem(IDC_STATIC_power_status)->ShowWindow(SW_SHOW); //show the power status


//GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_SHOW);
switch(Lps.BatteryFlag) //判断电池状态
{
case 1: m_static_left=_T("电量高于66%"); UpdateData(FALSE); GetDlgItem(IDC_STATIC_left)->ShowWindow(SW_SHOW); break;
case 2: m_static_left=_T("电量高于5%,低于33%"); UpdateData(FALSE); GetDlgItem(IDC_STATIC_left)->ShowWindow(SW_SHOW); ExitWindowsEx(EWX_SHUTDOWN,0); break;
case 4: m_static_left=_T("电量低于5%"); UpdateData(FALSE); GetDlgItem(IDC_STATIC_left)->ShowWindow(SW_SHOW); break;
default:m_static_left=_T("电量高于33%,低于66%"); UpdateData(FALSE); GetDlgItem(IDC_STATIC_left)->ShowWindow(SW_SHOW); break;
}


if(Lps.BatteryLifePercent>=80)
{
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/100%.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));


}
else if(Lps.BatteryLifePercent>=60)
{
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/80%.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));
}
else if(Lps.BatteryLifePercent>=40)
{
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/60%.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));
}
else if(Lps.BatteryLifePercent>=20)
{
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/40%.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));
}
else
{
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/20%.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));
}


}
else if(Lps.ACLineStatus==1)
{
GetDlgItem(IDC_STATIC)->ShowWindow(SW_HIDE); //若使用交流电则隐藏电池信息
GetDlgItem(IDC_STATIC_time)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_minute)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_left)->ShowWindow(SW_HIDE);


if(Lps.BatteryFlag==128)
{
AfxMessageBox(_T("此电脑没有电池"));
GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_HIDE);
//GetDlgItem(IDC_STATIC_power_status)->ShowWindow(SW_HIDE);
}
else //装备了电池但是没使用
{
//GetDlgItem(IDC_STATIC_power_status)->ShowWindow(SW_SHOW); //show the power status
Flag_power=FALSE;
m_static_power_status=_T("正在使用交流电,请放心使用!");
UpdateData(FALSE); //放在要显示信息的下方
//AfxMessageBox(_T("此电脑装配了电池,但是在使用交流电"));
//GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_HIDE);
//GetDlgItem(IDC_BUTTON_battery)->ShowWindow(SW_SHOW);
//AfxMessageBox(_T("在线状态"));
CImage image_test; //动态显示电源图标
image_test.Load(_T("res/充电.png"));
image_test.Draw(GetDC()->m_hDC,CRect(290,10,332,32));
}
}
}


CDialog::OnTimer(nIDEvent);
}




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

// TODO:  在此添加额外的初始化
Font_edit.CreatePointFont(140,"黑体");
GetDlgItem(IDC_STATIC_minute)->SetFont(&Font_edit);
GetDlgItem(IDC_STATIC_time)->SetFont(&Font_edit);
GetDlgItem(IDC_STATIC)->SetFont(&Font_edit);
GetDlgItem(IDC_STATIC_power_status)->SetFont(&Font_edit);
GetDlgItem(IDC_STATIC_status)->SetFont(&Font_edit);
GetDlgItem(IDC_STATIC_left)->SetFont(&Font_edit);


//GetDlgItem(IDC_STATIC_status)->ShowWindow(SW_SHOW);
//GetDlgItem(IDC_STATIC_power_status)->ShowWindow(SW_SHOW);


return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}



猜你喜欢

转载自blog.csdn.net/a519736285/article/details/31352847