版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)小鬧鐘VC程序設(shè)計報告一 課題內(nèi)容和要求【問題描述】編一個小鬧鐘程序,運(yùn)行后可以在指定的時間到時,在屏幕上顯示提醒時間到的語句,并使得電腦發(fā)出了悠揚(yáng)的樂聲。二 需求分析1顯示時間功能,即時顯示當(dāng)前時間2鬧鐘功能,能夠根據(jù)用戶設(shè)置的時間來提醒用戶,可以通過聲音或者文字提醒3時間設(shè)置功能,提供菜單設(shè)置時鐘的當(dāng)前時間和提醒的鬧鐘時間4界面設(shè)計,可模擬真實(shí)鐘表界面,也可用數(shù)字界面顯示,要求美觀,實(shí)用和個性化三 詳細(xì)設(shè)計該程序擁有四個源文件,分別為AlarmClock.cpp A
2、larmClockDlg.cpp RingDlg.cpp stdafx.cpp 如下圖所示:其作用分別為AlarmClock.cpp : 定義應(yīng)用程序的類行為AlarmClockDlg.cpp : 實(shí)現(xiàn)文件RingDlg.cpp : 實(shí)現(xiàn)文件另外stdafx.cpp : 只包括標(biāo)準(zhǔn)包含文件的源文件AlarmClock.pch 將作為預(yù)編譯頭stdafx.obj 將包含預(yù)編譯類型信息 在鬧鐘設(shè)置面板上添加當(dāng)前時間,通過文本框和標(biāo)簽設(shè)置需要設(shè)置的鬧鐘的時,分,秒。設(shè)置列表框提供鬧鐘的音樂供以選擇。設(shè)置開關(guān)按鈕決定鬧鐘的開始和結(jié)束另外于MFC播放背景音樂的問題解決如下:1.建立一個MFC的程序2.插
3、入資源(插入-資源-定制-(輸入WAVA)3.在resources中找到WAVA文件,打開有個IDR_WAVA14.右鍵-import-瀏覽后綴名為.wav的音頻文件5.在CMainFrame中的OnCreate函數(shù)中加入語句PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP); 6.在該文件的上方,添加頭文件#include mmsystem.h7.(工程-設(shè)置-連接-庫模板添加winmm.lib)8.編譯運(yùn)行即可程序源代碼#inc
4、lude stdafx.h#include AlarmClock.h#include AlarmClockDlg.h#include afxdialogex.h#include RingDlg.h#include #ifdef _DEBUG#define new DEBUG_NEW#endif/ CAlarmClockDlg 對話框CAlarmClockDlg:CAlarmClockDlg(CWnd* pParent /*=NULL*/): CDialogEx(CAlarmClockDlg:IDD, pParent), m_hour(0), m_minute(0), m_second(0),
5、m_prompt(_T(時間到,鬧鐘響!)/載入圖標(biāo)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);/默認(rèn)響鈴時長60秒iLast = 60;/試聽狀態(tài)標(biāo)識為FALSEisListening = FALSE;/響鈴狀態(tài)標(biāo)識為FALSE/isRinging = FALSE;/用不到void CAlarmClockDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_STATIC_NOW, m_static_now);DDX_Con
6、trol(pDX, IDC_STATIC_LEFT, m_static_left);DDX_Text(pDX, IDC_EDIT_H, m_hour);DDV_MinMaxUInt(pDX, m_hour, 0, 23);DDX_Text(pDX, IDC_EDIT_M, m_minute);DDV_MinMaxUInt(pDX, m_minute, 0, 59);DDX_Text(pDX, IDC_EDIT_S, m_second);DDV_MinMaxUInt(pDX, m_second, 0, 59);DDX_Control(pDX, IDC_SPIN_H, m_spin_h);DDX_
7、Control(pDX, IDC_SPIN_M, m_spin_m);DDX_Control(pDX, IDC_SPIN_S, m_spin_s);DDX_Text(pDX, IDC_EDIT_PROMPT, m_prompt);DDV_MaxChars(pDX, m_prompt, 18);DDX_Control(pDX, IDC_COMBO_RING, m_combo_ring);BEGIN_MESSAGE_MAP(CAlarmClockDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_CTLCOLOR()ON_WM_TIMER(
8、)ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, &CAlarmClockDlg:OnNMClickSyslink1)ON_BN_CLICKED(IDC_BUTTON_RESET, &CAlarmClockDlg:OnBnClickedButtonReset)ON_EN_CHANGE(IDC_EDIT_H, &CAlarmClockDlg:SetAlarmTime)ON_EN_CHANGE(IDC_EDIT_M, &CAlarmClockDlg:SetAlarmTime)ON_EN_CHANGE(IDC_EDIT_S, &CAlarmClockDlg:SetAlarmTim
9、e)ON_BN_CLICKED(IDC_BUTTON_LISTEN, &CAlarmClockDlg:OnBnClickedButtonListen)ON_CBN_SELCHANGE(IDC_COMBO_RING, &CAlarmClockDlg:OnCbnSelchangeComboRing)ON_MESSAGE(WM_NC, &CAlarmClockDlg:OnNotifyIcon)ON_WM_SYSCOMMAND()ON_WM_CLOSE()/ON_WM_DESTROY()END_MESSAGE_MAP()/ CAlarmClockDlg 消息處理程序BOOL CAlarmClockDl
10、g:OnInitDialog()CDialogEx:OnInitDialog();/ 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動/ 執(zhí)行此操作SetIcon(m_hIcon, TRUE);/ 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE);/ 設(shè)置小圖標(biāo)/ TODO: 在此添加額外的初始化代碼/ 獲得當(dāng)前系統(tǒng)時間timeNow = CTime:GetCurrentTime();m_static_now.SetWindowTextW(timeNow.Format(_T(%H : %M : %S);/ 設(shè)置默認(rèn)鬧鐘時間timeAlarm = timeNow ;m_sta
11、tic_left.SetWindowTextW(_T(00 : 00 : 00);m_hour = timeAlarm.GetHour();m_minute = timeAlarm.GetMinute();m_second = timeAlarm.GetSecond();m_spin_h.SetBuddy(GetDlgItem(IDC_EDIT_H);m_spin_h.SetRange(0,23);/m_spin_h.SetPos(m_hour);m_spin_m.SetBuddy(GetDlgItem(IDC_EDIT_M);m_spin_m.SetRange(0,59);/m_spin_m
12、.SetPos(m_minute);m_spin_s.SetBuddy(GetDlgItem(IDC_EDIT_S);m_spin_s.SetRange(0,59);/m_spin_s.SetPos(m_second);/試聽鈴聲選第1組m_combo_ring.SetCurSel(0);/聲音資源選第1組pszSound = MAKEINTRESOURCE(IDR_WAVE0);/設(shè)置字體LOGFONT logFont;fontBig = new CFont;GetDlgItem(IDC_STATIC_LEFT)-GetFont()-GetLogFont(&logFont);logFont.
13、lfHeight *= 1.5;logFont.lfWidth *= 1.5;logFont.lfWeight = FW_BOLD;fontBig-CreateFontIndirectW(&logFont);GetDlgItem(IDC_STATIC_LEFT)-SetFont(fontBig, FALSE);GetDlgItem(IDC_STATIC_BIG)-SetFont(fontBig, FALSE);fontSmall = new CFont;GetDlgItem(IDC_STATIC_INFO)-GetFont()-GetLogFont(&logFont);logFont.lfHe
14、ight *= 0.9;logFont.lfWidth *= 0.9;fontSmall-CreateFontIndirectW(&logFont);GetDlgItem(IDC_STATIC_INFO)-SetFont(fontSmall, FALSE);GetDlgItem(IDC_SYSLINK1)-SetFont(fontSmall, FALSE);/設(shè)置托盤NotifyIcon.hWnd = GetSafeHwnd();NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);NotifyIcon.hIcon = AfxGetApp()-LoadIcon(
15、IDR_MAINFRAME);lstrcpy(NotifyIcon.szTip, _T(小小鬧鐘);NotifyIcon.uCallbackMessage = WM_NC;NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;Shell_NotifyIcon(NIM_ADD,&NotifyIcon);/ 刷新顯示UpdateData(FALSE);/ 開啟計時器,以1000ms為時間間隔SetTimer(1, 1000, NULL);return TRUE; / 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUEvoid CAlarmClockDlg:
16、OnPaint()if (IsIconic()CPaintDC dc(this); / 用于繪制的設(shè)備上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使圖標(biāo)在工作區(qū)矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (r
17、ect.Height() - cyIcon + 1) / 2;/ 繪制圖標(biāo)dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/當(dāng)用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)顯示HCURSOR CAlarmClockDlg:OnQueryDragIcon()return static_cast(m_hIcon);HBRUSH CAlarmClockDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialogEx:OnCtlColor(pDC, pWnd, nCtl
18、Color);/ TODO: 在此更改 DC 的任何特性switch (pWnd-GetDlgCtrlID()case IDC_STATIC_BIG:pDC-SetBkMode(TRANSPARENT);pDC-SetTextColor(RGB(255, 0, 0);break;case IDC_STATIC_NOW:pDC-SetBkMode(TRANSPARENT);pDC-SetTextColor(RGB(0, 0, 0);/pDC-SetBkColor(RGB(0,0,255);hbr = CreateSolidBrush(RGB(0,0,255);break;case IDC_STA
19、TIC_LEFT:pDC-SetBkMode(TRANSPARENT);pDC-SetTextColor(RGB(255, 255, 255);hbr = CreateSolidBrush(RGB(0,0,0);break;/ TODO: 如果默認(rèn)的不是所需畫筆,則返回另一個畫筆return hbr;void CAlarmClockDlg:OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)/ TODO: 在此添加控件通知處理程序代碼PNMLINK pNMLink = (PNMLINK) pNMHDR;if (wcslen(pNMLink-ite
20、m.szUrl)ShellExecuteW(NULL, Lopen, pNMLink-item.szUrl, NULL, NULL, SW_SHOWNORMAL); /打開主頁*pResult = 0;void CAlarmClockDlg:OnTimer(UINT_PTR nIDEvent)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值switch(nIDEvent)case 1:/每隔1秒更新一下顯示數(shù)值timeNow = CTime:GetCurrentTime();timeLeft = timeAlarm - timeNow;m_static_now.SetWindowTex
21、tW(timeNow.Format(_T(%H : %M : %S);if(timeLeft DeleteObject();fontSmall-DeleteObject();delete fontBig;delete fontSmall;/刪除托盤圖標(biāo)Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);return CDialogEx:DestroyWindow();void CAlarmClockDlg:SetAlarmTime()/ 以當(dāng)前各文本框內(nèi)容設(shè)置鬧鐘時間UpdateData(TRUE);tm alarm;timeNow.GetLocalTm(&al
22、arm);alarm.tm_hour = m_hour;alarm.tm_min = m_minute;alarm.tm_sec = m_second;timeAlarm = _mktime64(&alarm);/如果定時時間小于當(dāng)前時間,將之推遲一天if(timeAlarm timeNow)timeAlarm += CTimeSpan(1,0,0,0);timeLeft = timeAlarm - timeNow;/設(shè)置鬧鐘定時if(timeLeft = 0)KillTimer(2);/取消鬧鐘定時elseSetTimer(2, timeLeft.GetTotalSeconds()*1000
23、, NULL);/設(shè)置鬧鐘定時m_static_left.SetWindowTextW(timeLeft.Format(_T(%H : %M : %S);void CAlarmClockDlg:SetAlarmTime(const CTime &tAlarm)/ 以tAlarm設(shè)置鬧鐘時間UpdateData(TRUE);timeAlarm = tAlarm;m_hour = timeAlarm.GetHour();m_minute = timeAlarm.GetMinute();m_second = timeAlarm.GetSecond();/m_spin_h.SetPos(m_hour)
24、;/m_spin_m.SetPos(m_minute);/m_spin_s.SetPos(m_second);timeLeft = timeAlarm - timeNow;if(timeLeft SetFocus();/CDialogEx:OnOK();void CAlarmClockDlg:OnBnClickedButtonReset()/ TODO: 在此添加控件通知處理程序代碼SetAlarmTime(timeNow);void CAlarmClockDlg:OnCbnSelchangeComboRing()/ TODO: 在此添加控件通知處理程序代碼/ 根據(jù)列表框選擇鈴聲switch(
25、m_combo_ring.GetCurSel()case 1:pszSound = MAKEINTRESOURCE(IDR_WAVE1);break;case 2:pszSound = MAKEINTRESOURCE(IDR_WAVE2);break;case 0:default:pszSound = MAKEINTRESOURCE(IDR_WAVE0);void CAlarmClockDlg:OnBnClickedButtonListen()/ TODO: 在此添加控件通知處理程序代碼if(isListening)/ 如果當(dāng)前處于試聽狀態(tài)/關(guān)閉試聽狀態(tài)isListening = FALSE;
26、/改按鈕標(biāo)簽為“試聽”GetDlgItem(IDC_BUTTON_LISTEN)-SetWindowTextW(_T(試聽);/改下拉框狀態(tài)為可選m_combo_ring.EnableWindow(TRUE);/關(guān)閉聲音PlaySound(NULL,AfxGetResourceHandle(),SND_PURGE);else/ 如果當(dāng)前不在試聽狀態(tài)/打開試聽狀態(tài)isListening = TRUE;/改按鈕標(biāo)簽為“停止”GetDlgItem(IDC_BUTTON_LISTEN)-SetWindowTextW(_T(停止);/改下拉框狀態(tài)為不可選m_combo_ring.EnableWindow
27、(FALSE);/打開聲音PlaySound(pszSound,AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);void CAlarmClockDlg:Ring()/如果當(dāng)前處于試聽狀態(tài),關(guān)閉試聽狀態(tài)if(isListening)OnBnClickedButtonListen();/響鈴對話框RingDlg dlg;/響鈴對話框數(shù)據(jù)設(shè)置dlg.SetData(pszSound, iLast, m_prompt);INT_PTR nResponse = dlg.DoModal();if (nRespons
28、e = IDOK)/ 如選擇“好了,我知道了!退下吧。”PostQuitMessage(0);/完成任務(wù),退出else if (nResponse = IDCANCEL)/ 如選擇“xx分鐘后再提醒我!”UINT delay = dlg.GetDelay();timeNow = CTime:GetCurrentTime();SetAlarmTime(timeNow + CTimeSpan(0,0,delay,0);/設(shè)置延時afx_msg LRESULT CAlarmClockDlg:OnNotifyIcon(WPARAM wParam, LPARAM lParam)/if(wParam !=
29、 IDR_MAINFRAME)/return 1;switch(lParam)case WM_RBUTTONUP:/右鍵起來時彈出快捷菜單LPPOINT lpoint=new tagPOINT;:GetCursorPos(lpoint);/得到鼠標(biāo)位置CMenu menu;menu.CreatePopupMenu();/聲明一個彈出式菜單/增加菜單項“退出”,點(diǎn)擊則發(fā)送消息WM_DESTROY給主窗口,將程序結(jié)束。menu.AppendMenu(MF_STRING,WM_DESTROY,_T(退出);/托盤彈出控制菜單后,單擊其他地方或者按ESC鍵使托盤菜單消失SetForegroundWindow();/確定彈出式菜單的位置menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint-x,lpoint-y,this);/資源回收HMENU hmenu = menu.Detach();menu.DestroyMenu();delete lpoint;break;case WM_LBUTTONDOWN:/按下左鍵的處理Sho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年廣場景觀施工合同
- 【初中生物】從種到界-2024-2025學(xué)年七年級生物上冊同步教學(xué)課件(人教版2024)
- 2024租地合同協(xié)議書范本農(nóng)村租地協(xié)議書范本
- 2024年度「新能源領(lǐng)域研究開發(fā)」合同
- 2024年冷庫建造施工合同模板
- 2024年度銷售合同:醫(yī)療設(shè)備供應(yīng)
- 2024年店鋪裝修合同范本
- 2024年度」品牌代言協(xié)議明星效應(yīng)助力品牌
- 2024年度智能制造生產(chǎn)線改造合同
- 認(rèn)識梯形課件教學(xué)課件
- 國家開放大學(xué)《計算機(jī)繪圖(本)》章節(jié)測試參考答案
- 虧損項目整改措施
- 第2講循環(huán)流化床鍋爐的構(gòu)造及工作原理ppt課件
- DB45∕T 2364-2021 公路路基監(jiān)測技術(shù)規(guī)范
- 英語培優(yōu)扶差記錄表(共7頁)
- 排球比賽記分表
- 網(wǎng)站服務(wù)合同域名續(xù)費(fèi)與維護(hù)
- 實(shí)驗(yàn)幼兒園陪餐記錄表
- JJG113_2013_標(biāo)準(zhǔn)金屬洛氏硬度塊檢定規(guī)程_解讀
- 小學(xué)數(shù)學(xué)一位數(shù)加減混合運(yùn)算算術(shù)題(969道)
- 安全教育培訓(xùn)記錄運(yùn)輸車輛安全技術(shù)要求
評論
0/150
提交評論