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