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 + -
显示快捷键?