基于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。基于vcmfc程序设计简易画图板
相关推荐
,对大系统在设计的早期可在远离门级的高层次上进行模开关 RTL 门 门 开关 算法 图 混合设计层次建模 拟,以利于设计者确定整个设计的结构和功能的可行性。 VHDL 强大的行为描述能力和程序结构,使其具有支持大规模设计进行分解,以及对已有的设计进行再利用的功能,运用 VHDL 设计系统硬件具有相对独立性,设计时没有嵌入与工艺有关的信息,对硬件的描述与具体的工艺技术和硬件结构无关
s: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision File Created // Additional Comments: // ///////////////////////////////////////////////////////////////////////////
机的使用,从而可以把设计人员从大量繁琐、重复的计算和绘图工作中解脱出来。 八十年代为 CAE 阶段。 这个阶段在集成电路与电子系统方法学,以及设计工具集成方面取得了众多成果,与 CAD 相比,除了纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。 九十年代为 EDA 阶段,尽管 CAD/CAE 技术取得了巨大的成功,但在整个设计过程中
会因素方面的可行性分析 ( 1) 法律方面的可行性 该系统的开发和研制 ,将不会侵犯他人、集体和国家的利益,不会违犯国家政策和法律。 ( 2) 使用方面的可行性 该系统由操作简单,售票工作者稍加培训即可操作,顾客购票操作简单明了,极易上手。 ( 3) 技术可行性 本系统由吾等三人小组设计及验证,所涉及知识均为大学本科阶段所学内容,不懂或者不会的内容可通过自学或请教老师解决。 因此在技术是可行的。
过程中要考虑完成系统功能需要用到哪些控件、这些控件之间的关系以及它们的相关性和重要性。 在大多数接口设计中,不是所有的接口元素都一样重要。 仔细斟酌是很有必要的,以确保越是重要的元素越要快速地显现给用户。 重要的或者频繁访问的元素应当放在显著的位置上,而不太重要的元素就应当降级到不太显著的位置上。 把控件分成组也很重要,尽量按功能或逻辑关系进行分组。 例如对数据库操作的按钮应当被形象地分成一组
内核的功能,而这是 90 年代的嵌入式操作系统内核, 如 VxWorks 和 VRTXsa 才有的技术口 1。 2. 3 uC/ OSIl 的任务 IlC/ OSII 内核提供的基本服务是任务切换。 内核负责为每个任务分配 CPU 时问,并且负责各任务之间的通讯。 一个任务,就是一个简单的程序,该程序可以独享 CPU 控制权。 在实时 应用的过程中,设计者把问题分割成多个任务