clockdlg.cpp

来自「个人计算机定时自动执行软件,是 一个值得看看的程序。」· C++ 代码 · 共 2,235 行 · 第 1/5 页

CPP
2,235
字号

				//创建对话框
				BOOL ret = pDialog->Create(IDD_QUICK_DIALOG,this);
				//显示对话框
				pDialog->ShowWindow(SW_SHOW);
				KillTimer(nIDEvent);
			}
			m_setquickdef3=0;
		}
	}

	if(nIDEvent==124)///////快速定时器记数器
	{
		m_count4++;
		if(m_count4==m_countsecond4)
		{
			_beginthread(beginThreadFunc,0,NULL);

			CQuickdlg* pDialog= new CQuickdlg();
			if(pDialog != NULL)
			{
				//将数据拷贝给对话框。
				memcpy((void*)&(pDialog->m_quick),(void*)(&quick4),sizeof(QUICK));

				//创建对话框
				BOOL ret = pDialog->Create(IDD_QUICK_DIALOG,this);
				//显示对话框
				pDialog->ShowWindow(SW_SHOW);
				KillTimer(nIDEvent);
			}
			m_setquickdef4=0;
		}
	}

	CDialog::OnTimer(nIDEvent);
}//////////////////////////////////////////////////////////////////////end OnTimer





void CClockDlg::OnSysCommand(UINT nID, LPARAM lParam)//标题栏
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else if (nID == SC_MAXIMIZE)//屏蔽最大化,
	{
	}
	else if (nID == SC_MINIMIZE)//将最小化至隐藏窗口
	{
		ShowWindow(SW_HIDE);
		m_isNotifyIcon=true;
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}

}

void CClockDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)//在任务栏图标
{
	if((wParam == IDR_MAINFRAME) && (lParam == WM_LBUTTONDBLCLK))//光标左键双击
	{
		ShowWindow(SW_SHOWNORMAL);
		SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
	
		m_isNotifyIcon=false;
		
		if(m_minstartup)//最小化启动第4步
		{
			SetTimer(3, 100, NULL);
		
		}

	}
	if((wParam == IDR_MAINFRAME) && (lParam == WM_RBUTTONDOWN))//光标右键单击
	{
		PopupMainMenu();
	}
}

void CClockDlg::OnContextMenu(CWnd* pWnd, CPoint point)//在主窗口的右键
{
	PopupMainMenu();
}

void CClockDlg::PopupMainMenu()//弹出式主菜单
{
	CMenu menu;
	if (!menu.LoadMenu(IDR_MENU))//导入菜单
		return ;
	CMenu* pSubMenu = menu.GetSubMenu(0);
	if (!pSubMenu) 
		return ;

	// 设置菜单第一项为粗体
	::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
	if(m_isNotifyIcon==false)
		pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,ID_MENU_MIN,"最小化闹钟(&M)");
	else
		pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,ID_MENU_MIN,"闹钟还原(&M)");


	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");
	m_alwayfront = GetPrivateProfileInt("Settings","m_alwayfront",1,files_path);
	m_autorun = GetPrivateProfileInt("Settings","m_autorun",0,files_path);
	m_minstartup = GetPrivateProfileInt("Settings","m_minstartup",0,files_path);
	
	//菜单“总在最前面”前打勾
	if (m_alwayfront==1)
      pSubMenu->CheckMenuItem(ID_MENU_ALWAYFRONT, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_MENU_ALWAYFRONT, MF_BYCOMMAND|MF_UNCHECKED);
	
	//开机自动运行打勾
	if (m_autorun==1)
      pSubMenu->CheckMenuItem(ID_MENU_AUTORUN, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_MENU_AUTORUN, MF_BYCOMMAND|MF_UNCHECKED);	
	
	//最小化启动打勾
	if (m_minstartup==1)
      pSubMenu->CheckMenuItem(ID_MENU_MINSTARTUP, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_MENU_MINSTARTUP, MF_BYCOMMAND|MF_UNCHECKED);
	
	//////////////////////////////////////////////////////////////	
	if (m_one==1)//快速定时一分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERONEM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERONEM, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_five==1)//快速定时五分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFIVEM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFIVEM, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_ten==1)//快速定时十分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTENM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTENM, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_twenty==1)//快速定时二十分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWENTYM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWENTYM, MF_BYCOMMAND|MF_UNCHECKED);
	
	if (m_thirty==1)//快速定时三十分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTHIRTYM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTHIRTYM, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_fortyfive==1)//快速定时四十五分钟
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFORTYFIVEM, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFORTYFIVEM, MF_BYCOMMAND|MF_UNCHECKED);


	/////////////////////////////////////////////


	if (m_oneh==1)//快速定时一小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERONEH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERONEH, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_twoh==1)//快速定时二小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWOH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWOH, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_threeh==1)//快速定时三小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTHREEH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTHREEH, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_sixh==1)//快速定时六小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERSIXH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERSIXH, MF_BYCOMMAND|MF_UNCHECKED);
	
	if (m_nineh==1)//快速定时九小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERNINEH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERNINEH, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_twelveh==1)//快速定时十二小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWELVEH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERTWELVEH, MF_BYCOMMAND|MF_UNCHECKED);

	if (m_fifteenh==1)//快速定时十五小时
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFIFTEENH, MF_BYCOMMAND|MF_CHECKED);
	else
      pSubMenu->CheckMenuItem(ID_QUICK_AFTERFIFTEENH, MF_BYCOMMAND|MF_UNCHECKED);

//////////////////////////////////////////////
	if(m_setquickdef0==1)
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF0,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF0,"取消定时器1");
	else
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF0,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF0,"自定义定时器1...");

	if(m_setquickdef1==1)
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF1,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF1,"取消定时器2");
	else
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF1,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF1,"自定义定时器2...");

	if(m_setquickdef2==1)
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF2,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF2,"取消定时器3");
	else
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF2,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF2,"自定义定时器3...");


	if(m_setquickdef3==1)
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF3,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF3,"取消定时器4");
	else
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF3,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF3,"自定义定时器4...");

	if(m_setquickdef4==1)
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF4,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF4,"取消定时器5");
	else
		pSubMenu->ModifyMenu(ID_QUICK_USERDEF4,MF_STRING|MF_BYCOMMAND,ID_QUICK_USERDEF4,"自定义定时器5...");







	CPoint mouse;
	GetCursorPos(&mouse);//捕捉光标位置
	//弹出菜单
	::SetForegroundWindow(m_nd.hWnd);	
	::TrackPopupMenu(pSubMenu->m_hMenu, TPM_LEFTALIGN, mouse.x,mouse.y,0,m_nd.hWnd, NULL);
}

void CClockDlg::OnMenuMin() //显示或隐藏主窗口
{
	if(m_isNotifyIcon==false)
	{
		ShowWindow(SW_HIDE);
		m_isNotifyIcon=true;
	}
	else
	{
		ShowWindow(SW_SHOWNORMAL);
		m_isNotifyIcon=false;

		if(m_minstartup)//最小化启动第4步
		{
			SetTimer(3, 100, NULL);
		
		}

	}
}

//对话框上的双击,隐藏至任务栏
void CClockDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	ShowWindow(SW_HIDE);
	m_isNotifyIcon=true;
	//CDialog::OnLButtonDblClk(nFlags, point);
}


//////////////////////////////////////////////////////////////////////////////////////////////////
void CClockDlg::OnAlwayFront() //总在最前面
{
	if(m_alwayfront)
	{
		AfxGetMainWnd()->SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
		m_alwayfront=0;
	}
	else
	{
		AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
		m_alwayfront=1;
	}
	
	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");
	::WritePrivateProfileString("Settings","m_alwayfront",m_alwayfront? "1":"0",files_path);
}
void CClockDlg::OnAutoRun() //开机自动运行
{
	HKEY hKey;
	
	if(m_autorun)
	{
		if(ERROR_SUCCESS==RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey))
		{
			RegDeleteValue(hKey,"autorun");//删除此键,
			RegCloseKey(hKey);
			m_autorun=0;
		}
	}
	else  
	{
		if(ERROR_SUCCESS==RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey))
		{
			char out_path[512];

			GetModuleFileName(NULL,out_path,512);//得到程序运行所在位置

			RegSetValueEx(hKey,"autorun",0,REG_SZ,(const unsigned char *)out_path,strlen(out_path)+1);

			RegCloseKey(hKey);
			m_autorun=1;
		}
	}
	
	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");
	::WritePrivateProfileString("Settings","m_autorun",m_autorun? "1":"0",files_path);
	
}

void CClockDlg::OnMinStartup()//最小化启动
{
	if(m_minstartup)
	{
		m_minstartup=0;
	}
	else
	{
		m_minstartup=1;
	}	
	
	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");
	::WritePrivateProfileString("Settings","m_minstartup",m_minstartup? "1":"0",files_path);
}

//////////////////////////////////////////////////////////////////////////////////////////////////

BOOL CClockDlg::OnQueryEndSession()//在用户退出Windows时自动退出应用
{
	CClockDlg::OnCancel();
	return TRUE;
}

void CClockDlg::OnDestroy()
{
	WinHelp(0L, HELP_QUIT);
	CDialog::OnDestroy();
}

void CClockDlg::OnPaint() //将对话框在桌面绘出来
{
	char files_path[512];
	GetModuleFileName(NULL,files_path,512);
	char *p = strrchr(files_path,'\\');
	p[1]='\0';
	strcat(files_path,"Settings.ini");

	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
	{
		CClientDC dc(this);// device context for painting
		CDC memDC;
		memDC.CreateCompatibleDC(&dc);//向系统申请内存设备环境句柄
		CBitmap bmp;

		//这里的读取文件,是用于更换面板的时重画用。

		int g_facenumber = GetPrivateProfileInt("Face","m_face",0,files_path);

		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_n

⌨️ 快捷键说明

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