clockdlg.cpp
来自「个人计算机定时自动执行软件,是 一个值得看看的程序。」· C++ 代码 · 共 2,235 行 · 第 1/5 页
CPP
2,235 行
// clockDlg.cpp : implementation file
//
#include "stdafx.h"
#include "clock.h"
#include "clockDlg.h"
#include <math.h>
#include <process.h>
#include "ClockSet.h"
#include "Mmsystem.h"
#include "QuickDef.h"
#include "FaceBrowse.h"
#pragma comment(lib,"Winmm.lib")
//#include "TimerPage.h"
//#include "ChoicePage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
#include<wininet.h>
#pragma comment(lib,"wininet.lib")//该指令将一个注释记录放入一个对象文件或可执行文件中。
//常用的lib关键字,可以帮我们连入一个库文件。
#include <winsock2.h>
#pragma comment(lib, "wsock32")
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
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)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClockDlg dialog
CClockDlg::CClockDlg(CWnd* pParent /*=NULL*/)
: CDialog(CClockDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CClockDlg)
m_nowTime = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CClockDlg::~CClockDlg()//析构函数,释放生成的数据组
{
FreeData();
}
void CClockDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClockDlg)
DDX_Text(pDX, IDC_NOW_TIME, m_nowTime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClockDlg, CDialog)
//{{AFX_MSG_MAP(CClockDlg)
ON_WM_SYSCOMMAND()
ON_WM_DESTROY()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_ABOUT, OnAbout)
ON_WM_TIMER()
ON_WM_CLOSE()
ON_COMMAND(ID_EXIT, OnExit)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_MENU_SHOWCALENDAR, OnShowCalendar)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_MENU_MIN, OnMenuMin)
ON_COMMAND(ID_MENU_ALWAYFRONT, OnAlwayFront)
ON_COMMAND(ID_MENU_AUTORUN, OnAutoRun)
ON_COMMAND(ID_MENU_MINSTARTUP, OnMinStartup)
ON_COMMAND(ID_ADJUST_NETTIME, OnAdjustNetTime)
ON_COMMAND(ID_MENU_CLOCKEDIT, OnClockEdit)
ON_COMMAND(ID_QUICK_USERDEF0, OnQuickDef)
ON_COMMAND(ID_SKIN_FACEBROWSE, OnFaceBrowse)
ON_COMMAND(ID_HELP_FEEDBACK_ERRORREPORT, OnErrorReport)
ON_COMMAND(ID_HELP_FEEDBACK_OTHER, OnOther)
ON_COMMAND(ID_HELP_FEEDBACK_IDEA, OnIdea)
ON_COMMAND(ID_ADJUST_CONTORLFACEPLATEE, OnContorlFace)
ON_COMMAND(ID_QUICK_AFTERONEH, OnAfterOneH)
ON_COMMAND(ID_QUICK_AFTERFIFTEENH, OnAfterFifteenH)
ON_COMMAND(ID_QUICK_AFTERFIVEM, OnAfterFiveM)
ON_COMMAND(ID_QUICK_AFTERFORTYFIVEM, OnAfteFortyfiveM)
ON_COMMAND(ID_QUICK_AFTERNINEH, OnAfterNineH)
ON_COMMAND(ID_QUICK_AFTERSIXH, OnAfterSixH)
ON_COMMAND(ID_QUICK_AFTERTENM, OnAfterTenM)
ON_COMMAND(ID_QUICK_AFTERTHIRTYM, OnAfterThirtyM)
ON_COMMAND(ID_QUICK_AFTERTHREEH, OnAfterThreeH)
ON_COMMAND(ID_QUICK_AFTERTWENTYM, OnAfterTwentyM)
ON_COMMAND(ID_QUICK_AFTERTWOH, OnAfterTwoH)
ON_COMMAND(ID_QUICK_AFTERTWELVEH, OnAfterTwelveH)
ON_COMMAND(ID_QUICK_AFTERONEM, OnAfterOneM)
ON_COMMAND(ID_QUICK_USERDEF1, OnQuickDef1)
ON_COMMAND(ID_QUICK_USERDEF2, OnQuickDef2)
ON_COMMAND(ID_QUICK_USERDEF3, OnQuickDef3)
ON_COMMAND(ID_QUICK_USERDEF4, OnQuickDef4)
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
ON_MESSAGE(WM_HOTKEY,OnHotKey)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
ON_WM_QUERYENDSESSION( )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClockDlg message handlers
BOOL CClockDlg::OnInitDialog()//初始化函数
{
// 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 32x32
SetIcon(m_hIcon, FALSE); // Set small icon 16x16
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);
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,WS_EX_TOOLWINDOW); //不在任务栏显示图标
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);
}
}
//在任盘显示图标
m_nd.cbSize = sizeof (NOTIFYICONDATA);
m_nd.hWnd = m_hWnd;
m_nd.uID = IDR_MAINFRAME;
m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_nd.uCallbackMessage = WM_NOTIFYICON;
m_nd.hIcon = m_hIcon;
//////////////////////////////////注册快捷键//////////////////////////////////////////
WORD vk=AfxGetApp()->GetProfileInt("HotKey","vk",0);
WORD sk=AfxGetApp()->GetProfileInt("HotKey","sk",0);
UINT fs = 0;
if (sk & HOTKEYF_ALT) fs|= MOD_ALT;
if (sk & HOTKEYF_CONTROL) fs|= MOD_CONTROL;
if (sk & HOTKEYF_SHIFT) fs|= MOD_SHIFT;
RegisterHotKey(m_hWnd,ID_MENU_CLOCKEDIT,MOD_CONTROL|MOD_SHIFT,'S');//闹钟设置快捷键
RegisterHotKey(m_hWnd,ID_MENU_SHOWCALENDAR,MOD_CONTROL|MOD_SHIFT,'V');//显示日历快捷键
RegisterHotKey(m_hWnd,ID_ABOUT,MOD_CONTROL|MOD_SHIFT,'A');//显示关于快捷键
//////////////////////////////////注册快捷键//////////////////////////////////////////
//将数据保存到文件中
char files_path[512];
GetModuleFileName(NULL,files_path,512);//得到程序运行所在位置
char *p = strrchr(files_path,'\\');//从得到路径字符串,反向一直搜索到"\"为止。
p[1]='\0';//将'\'之后的字符赋为0.
strcat(files_path,"Settings.ini");//再将Settings.ini添加到修改之后的路径之后。
//启动时自动调整到上一次程序所在位置。
move_rect.top = GetPrivateProfileInt("Rect","top",0,files_path);
move_rect.bottom = GetPrivateProfileInt("Rect","bottom",0,files_path);
move_rect.left = GetPrivateProfileInt("Rect","left",0,files_path);
move_rect.right = GetPrivateProfileInt("Rect","right",0,files_path);
if(move_rect.top>0 && move_rect.bottom>0 && move_rect.left>0 && move_rect.right>0)
{
MoveWindow(&move_rect);
}
else if(move_rect.top==0 && move_rect.bottom==0 && move_rect.left==0 && move_rect.right==0)
{//如果程序第一次运行,得不到程序所在位置,则将程序移动到屏幕右上角
CRect rect;
GetWindowRect(&rect);
MoveWindow(850,10,rect.Width(),rect.Height(),TRUE);
}
else
{
CRect rect;
GetWindowRect(&rect);
MoveWindow(850,10,rect.Width(),rect.Height(),TRUE);
}
///////////////////////////////////////////////////界面/////////////////////////////////////////////////////////////////
//从文件中读取面板所选择的图片,然后载入
int g_facenumber = GetPrivateProfileInt("Face","m_face",0,files_path);
CBitmap bmp;
switch(g_facenumber)
{
case 0:
bmp.LoadBitmap(IDB_BIT1);
m_nNumX=10;
m_nNumY=119;
break;
case 1:
bmp.LoadBitmap(IDB_BIT2);
m_nNumX=8;
m_nNumY=124;
break;
case 2:
bmp.LoadBitmap(IDB_BIT3);
m_nNumX=8;
m_nNumY=124;
break;
case 3:
bmp.LoadBitmap(IDB_BIT4);
m_nNumX=8;
m_nNumY=125;
break;
case 4:
bmp.LoadBitmap(IDB_BIT5);
m_nNumX=8;
m_nNumY=122;
break;
case 5:
bmp.LoadBitmap(IDB_BIT6);
m_nNumX=8;
m_nNumY=122;
break;
case 6:
bmp.LoadBitmap(IDB_BIT7);
m_nNumX=7;
m_nNumY=108;
break;
case 7:
bmp.LoadBitmap(IDB_BIT8);
m_nNumX=8;
m_nNumY=120;
break;
case 8:
bmp.LoadBitmap(IDB_BIT9);
m_nNumX=9;
m_nNumY=104;
break;
case 9:
bmp.LoadBitmap(IDB_BIT10);
m_nNumX=8;
m_nNumY=125;
break;
case 10:
bmp.LoadBitmap(IDB_BIT11);
m_nNumX=13;
m_nNumY=121;
break;
case 11:
bmp.LoadBitmap(IDB_BIT12);
m_nNumX=8;
m_nNumY=122;
break;
}
HRGN rgn;
rgn = BitmapToRegion((HBITMAP)bmp, RGB(255, 0, 255));
SetWindowRgn(rgn, TRUE);
bmp.DeleteObject();
m_nh1=0;
m_nh2=0;
m_nm1=0;
m_nm2=0;
m_ns1=0;
m_ns2=0;
//主窗口上的时间显示, 设置计时器,每秒一次
SetTimer(1, 1000, NULL);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**********************************透明**************************************/
int pos=GetPrivateProfileInt("Settings","nTrans",218,files_path);//得到透明度
SetWindowLong(AfxGetMainWnd()->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(AfxGetMainWnd()->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun =(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
fun(AfxGetMainWnd()->GetSafeHwnd(),0,pos,2);
FreeLibrary(hInst);
}
/**********************************透明**************************************/
//读取"总在最前面"变量m_alwayfront
m_alwayfront = GetPrivateProfileInt("Settings","m_alwayfront",1,files_path);
if(m_alwayfront)
AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
//读取"开机自动运行"变量m_autorun
m_autorun = GetPrivateProfileInt("Settings","m_autorun",0,files_path);
//最小化有两个变量,m_isNotifyIcon和m_minstartup
//ShowWindow(SW_SHOWNORMAL);
m_isNotifyIcon=false;//false对应为隐藏
//读取"最小化启动"变量m_minstartup
m_minstartup = GetPrivateProfileInt("Settings","m_minstartup",0,files_path);
if(m_minstartup)//最小化启动第1步
{
CRect rect;
GetWindowRect(&rect);
//这里的最小化采用,先将窗口移到频幕之外,双击ICON或者还原主窗口时,再采用SetTimer将主窗口移到频幕之内。
//分五步:1、移到视频外2、设置隐藏的SetTimer 3、隐藏 4、设置显示窗口的SetTimer 5、显示窗口
SetWindowPos(NULL,rect.left-300,rect.top-300,rect.Width(),rect.Height(),0);
//ShowWindow(SW_HIDENORMAL);
m_isNotifyIcon=true;//true对应为隐藏
}
//读取"启用整点报时"
int m_usingreport=GetPrivateProfileInt("Sound","m_usingreport",0,files_path);
if(m_usingreport==1)
{
SetTimer(8,1000,NULL);
}
SYSTEMTIME st;
CString strTemp;
GetLocalTime(&st);
strTemp.Format("%02i:%02i:%02i",st.wHour,st.wMinute,st.wSecond);
GetDlgItem(IDC_NOW_TIME)->SetWindowText(strTemp);
CString strtip;
strtip.Format(TEXT("%d年%d月%d日"),st.wYear,st.wMonth,st.wDay);
strcpy(m_nd.szTip,strtip);
//从任务栏中增加, 修改, 或者删除图标
Shell_NotifyIcon(NIM_ADD, &m_nd);
if(m_minstartup)//最小化启动第2步
{
SetTimer(2, 100, NULL);
}
m_one=0;
m_onetimecount=0;//一分钟记数器
m_five=0;
m_fivetimecount=0;//五分钟记数器
m_ten=0;
m_tentimecount=0;//十分钟记数器
m_twenty=0;
m_twentytimecount=0;//二十分钟记数器
m_thirty=0;
m_thirtytimecount=0;//三十分钟记数器
m_fortyfive=0;
m_fortyfivetimecount=0;//四十五分钟记数器
m_oneh=0;
m_onehcount=0;//一小时记数器
m_twoh=0;
m_twohcount=0;//二小时记数器
m_threeh=0;
m_threehcount=0;//三小时记数器
m_sixh=0;
m_sixhcount=0;//六小时记数器
m_nineh=0;
m_ninehcount=0;//九小时记数器
m_twelveh=0;
m_twelvehcount=0;//十二小时记数器
m_fifteenh=0;
m_fifteenhcount=0;//十五小时记数器
m_setquickdef0=0;//快速定时变量,确定后,菜单变为“取消定时器”,再点击为设置定时器
m_setquickdef1=0;
m_setquickdef2=0;
m_setquickdef3=0;
m_setquickdef4=0;
m_count0=0;//秒计数器
m_countsecond0=0;//秒计算
m_count1=0;
m_countsecond1=0;
m_count2=0;
m_countsecond2=0;
m_count3=0;
m_countsecond3=0;
m_count4=0;
m_countsecond4=0;
LoadData();//从文件中读取数据
ChecktoClock();//将数据传给设置闹钟的函数
m_cyclecount=0;
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?