基于vcmfc程序设计简易画图板内容摘要:

dd()。 打开添加新提醒的窗体 新窗体中,获取年月日时分秒,以及提醒方式,提醒内容的信息,并存于闹钟结构体数组中。 值得说明的是,年月日时分秒都是 int型变量,提醒方式也根据项目序号,返回 int型变量,确定是哪一种方式。 完成后为闹钟编号 +1 当新窗口选择 OK,则将结构体数组中的数据,格式化处理,在主窗口的 ListControl中增加一行。 执行刷新函数。 其中的关键算法是 : //将子窗口的值放入结构体中 RemindData myAlarm_add。 //定义一个闹钟的结构体 =。 //将时间写入结构体 //其他数据类似写入即可 myAlarm[AlarmIndex] = myAlarm_add。 //将添加的闹钟放入编号为 AlarmIndex的闹钟 //将子窗口中的值传递过来 13 CString strTime = (%Y%m%d %H:%M:%S )。 //第一列,时间 //其他值也用此方式即可 //再通过 switch语句将 【 类型 】 赋值给字符串 //给 List Control中添加项目 int nRow = (AlarmIndex, strTime)。 //插入行 (nRow, 1, strAffair)。 //设置内容 (nRow, 2, strRemind)。 //设置状态 (nRow, 3, strSel)。 //设置类型 AlarmIndex++。 //最后还需要 闹钟数量自 增 1。 对提醒事项进行修改操作。 OnButtonEdit() 先通过 GetSelectionMark()函数,获取选中的行数,闹钟编号于行数是对应的 ,然后进行 OnButtonAdd()函数的操作。 打开修改提醒的窗体,该窗体获取年月日时分秒,以及提醒方式,提醒内容的信息,并存于闹钟结构体数组中。 值得说明的是,年月日时分秒都是 int型变量,提醒方式也根据项目序号,返回 int型变量,确定是哪一种方式。 完成后为闹钟编号不变。 当新窗口选择 OK,则将结构体数组中的数据,格式化处理,在主窗口的 ListControl中选中行进行 SetItemText()函数进行内容替换。 执行刷新函数。 对提醒事项进行删除操作。 OnButtonDel()。 先通过 GetSelectionMark()函数,获取选中的行数,闹钟编号于行数是对应的。 将该行进行删除,并且将选择项后面每一个函数向前覆盖,最后将闹钟总数 1 关键算法如下: int nItem = ()。 //得到选中行的序号 //将下一个闹钟覆盖到前一个 for (int i = 0。 i AlarmIndex1。 i++) { if (i = nItem) { myAlarm[i] = myAlarm[i+1]。 } } (nItem)。 //删除选中的行 AlarmIndex。 //让闹钟减 1 } 获取最近时钟。 Time_Refresh() 获取系统时间。 将每个闹钟进行如下操作,进行循环。 将闹钟结构体中 Ctime类的对象调出,用 CTimeSpan类的对象,将闹钟时间于系统时间相减,得到差值。 如果差值大于 0且最小,则记录下该闹 钟的编号,存为最接近的闹钟。 并且,将已经超过系统时间,即与系统时间差值为负数的闹钟,将其中的提醒状态设置为 True,14 即变成已提醒状态。 其中关键算法如下: int i=0 , return_ID= 1。 //返回 =0为最近的闹钟编号,返回 1为没有最近闹钟 . CTime TimeCur = CTime::GetCurrentTime()。 CTime Time[50]。 for (i = 0。 i= AlarmIndex。 i++) { Time[i] = myAlarm[i].nTime。 //将结构体中的时间取出来 } CTimeSpan span。 long time_Near = 0。 long diff。 //找到最接近的时间,并取最近闹钟的编号 for( i=0。 i= AlarmIndex。 i++) { span = Time[i] TimeCur。 diff = ()。 if( diff = 0 ) { if ( diff time_Near ) { time_Near = diff。 //将最小的差值复制给相差时间 return_ID = i。 //获取最近闹钟的编号 } else continue。 } return(return_ID)。 //获取最接近的闹钟编号 最近时钟对比系统时间 AlarmNear_Cmp( int AlarmNum ) SetTimer()设置一个计时器。 每一秒,进行 OnTimer()函数中的该函数。 该函数先获取系统时间,然后再将闹钟时间与系统时间进行做差值,差值中为 0,则可以认定为时 间到。 然后根据该闹钟的类型,通过 Switch语句,调用开机,关机,响铃,重启,开启程序,注销,锁定等操作。 进行完操作后,对闹钟进行刷新 Time_Refresh操作 关键算法如下: CTime TimeCur = CTime::GetCurrentTime()。 //获取系统时间 CTimeSpan span = myAlarm[ AlarmNum ].nTime TimeCur。 //将时间与系统时间相减 long diff = ()。 if ( diff == 0) { //新建一个提示框 CTips *tipsWindow。 tipsWindow = new CTips。 15 tipsWindowCreate(IDD_DIALOG3,GetDesktopWindow())。 //创建时,将窗口的父类设成桌面 CString strTips。 switch( myAlarm[ AlarmNum ].nType ) { case 0: Alarm_Ring( AlarmNum )。 //进行闹铃的函数 break。 case 1:„ „ default: .. }。 勾选该选项,可以让此小助手在系统开机时启动。 OnStart() 首先需要判断该选框对应变量的 Bool值。 如果为真,则打开注册表,找到开机启动的目录,将该程序的路径放入其中。 关闭注册表。 如果为假,则打开注册表,找到开机启动的目录,删除该程序对应的键值。 关键算法如下: if (m_IsStart)//判断是否选择了开机启动 { HKEY hKey。 //找到系统的启动项 LPCTSTR lpRun = Software\\Microsoft\\Windows\\CurrentVersion\\Run。 //打开启动项 Key long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, amp。 hKey)。 if(lRet == ERROR_SUCCESS) { char pFileName[MAX_PATH] = {0}。 //得到程序自身的全路径 DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH)。 //添加一个子 Key,并设置值 // 下面的 Assistant是应用程序名字(不加后缀 .exe) lRet = RegSetValueEx(hKey, Assistant, 0, REG_SZ, (BYTE *)pFileName, dwRet)。 RegCloseKey(hKey)。 //关闭注册表 if(lRet != ERROR_SUCCESS) //提示信息 { AfxMessageBox(系统参数错误 ,操作失 败 6)。 } else { AfxMessageBox(成功设置开机启动 !)。 } } else{„„ } //进行删除该启动项的操作,使用 RegDeleteValue()函数。 勾选该选项,可以在桌面显示当时时间。 OnClock() 16 新建一个闹钟类。 闹钟类是一个窗口。 该窗口,包含一个静态文本框。 在初始化该窗口时,先设置文本的颜色为绿色,将背景的颜色设置为灰色。 再将灰色设置为透明,则实现了镂空的桌面时钟。 在时钟显示这个部分,我们设计了 一个名为“ CClock”的类,用来在桌面显示时间。 使用 CTime::GetCurrentTime()语句来获取系统当前时间。 通过 if(nCtlColor==CTLCOLOR_EDIT||CTLCOLOR_STATIC) { pDCSetTextColor(RGB(63,192,69))。 pDCSetBkColor(RGB(183,94,28))。 BRUSH A=CreateSolidBrush(RGB(183,94,28))。 return A。 } 对窗体的颜色和字体的颜色进 行 调整,在把背景和窗体背景调整为一个颜色后, fun(thisGetSafeHwnd(),RGB(183,94,28),220,1)。 再将和那个颜色完全相同的数值进行镂空处理,使得起背景变为透明。 对背景进行镂空 设计使时间看起来比较美观同时不影响日常的使用。 最后进行存储设置。 勾选该选项,可以具有鼠标穿透功能 OnMouse() 设计一个 OnMouse()的类,使用 Check box的控件。 令一个名为 MouseThrough 的函数使时间窗口被锁定,这样既可以透过时间窗体 进行操作,同时也不会把窗体来回拖动来影响日常的使用。 最后进行存储设置。 m_MyDeskClockMouseThrough(m_IsMouseThrough)。 //鼠标前置的函数。 勾选该选项,可以具有时钟前置在别的窗口之上的功能。 OnFront() 设计了一个 OnFront()的类,使用 Check box的控件。 设计了一个 FrontWindow 的函数来进行时间前置使桌面时间可以时刻显示在屏幕上。 最后进行存储设置。 可以用户自己设定时间 ,到时可以根据用户设置 实现闹铃提醒,还可设置提醒内容。 Alarm_Ring() Beep(262, t) Beep函数,设置声音频率,持续时间,使蜂鸣器响。 可以用户自己设定时间 ,到时可以根据用户设置实现开启指定程序,并可以附加属性值。 Alarm_Software() 使用 ShellExecute()函数,将路径的字符串,参数的字符串填入,就可以启动该程序了。 可以用户自己设定时间 ,到时可以根据用户设置实现关机 Alarm_Shutdown() 使用 InitiateSystemShutdown(NULL,NULL,20,FALSE,FALSE)。 函数,设置好关机倒计时秒数,并且在关闭后不进行启动。 可以用户自己设定时间 ,到时可以根据用户设置实现注销 Alarm_Restart() 17 ::ExitWindowsEx(EWX_LOGOFF,0)。 即可调用 windows的注销函数进行注销。 可以用户自己设定时间 ,到时可以根据用户设置实现重启 Alarm_Logoff() 使用 InitiateSystemShutdown(NULL,NULL,20,FALSE,FALSE)。 函数,设置好关机倒计时秒数,并且在关闭后不进行启动。 可以用户自己设定时间 ,到时可以根据用户设置实现锁定 Alarm_Lock() 该操作需要调用动态链接库,使用 windows系统内的锁定功能。 关键算法如下: 先声明 HMODULE类型,以及 PROC类型的对象,通过 GetModuleHandle()调出动态链接库,使用 GetProcAddress(hUser32dll,LockWorkStation)。 可将锁定计算机的函数调出。 在启动闹 钟时,在桌面右下角弹出窗口,提示当前备忘内容。 首先,将窗口的长宽高导入 CRet类的对象中。 设置好每次上升的高度。 通过屏幕的坐标,设置一个计时器,在一定时间后,将窗口向上移动一点,最终到达需要到的位置。 其中使用到的关键函数有: ::GetSystemMetrics(SM_CXSCREEN)。 获取屏幕像素;MoveWindow()移动窗体位置 刷新。 可以手动刷新闹钟。 Time_Refresh()刷新时间 调用 Time_Refresh()函数即可。 退出。 提示是否退出程序。 OnCancel() 6 数据描述 类的名称 类的说明 类的属性 类的操作 名称 类型 说明 CAss。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。