第一篇:超市留言板報(bào)告
實(shí)
驗(yàn)
報(bào)
告
1.實(shí)驗(yàn)項(xiàng)目名稱:超市促銷留言板的設(shè)計(jì)與實(shí)現(xiàn)
2.實(shí)驗(yàn)原理:
mfc是微軟基礎(chǔ)類庫的簡稱,是微軟公司實(shí)現(xiàn)的一個(gè)c++類庫,主要封裝大部分的windows API函數(shù)。使用MFC可以方便的編寫窗口型應(yīng)用軟件。
MFC下各種窗口都由類CWnd派生。CWnd及其派生類的每個(gè)實(shí)例對應(yīng)一個(gè)可見的窗口。與窗口的通信需要通過消息實(shí)現(xiàn)。
3.實(shí)驗(yàn)?zāi)康模?/p>
通過編寫一個(gè)留言板型的應(yīng)用軟件,學(xué)習(xí)和應(yīng)用wingows下MFC編程。加強(qiáng)對MFC和系統(tǒng)消息處理、消息響應(yīng)的理解。
4.實(shí)驗(yàn)內(nèi)容:
4.1基于MFC,開發(fā)一個(gè)對話框程序。
4.2使用工具箱中的static text, radio button, check box, group box, button, edit control 控件設(shè)計(jì)一個(gè)交互式的界面。4.3對控件的ID和名稱進(jìn)行重命名。4.4為對話框添加一副背景圖片。4.5為控件添加事件代碼。
4.6將從界面中收集到 的信息,輸出到文本文件。4.7記錄顧客的聯(lián)系方式。
4.8詢問顧客對商品和品牌的喜歡。
4.9提供相應(yīng)接口,讓顧客留下意見和建議。
5.實(shí)驗(yàn)器材(設(shè)備、元器件):計(jì)算機(jī),vs2008 6.實(shí)驗(yàn)步驟:
6.1添加相關(guān)組件
從工具欄拖出相應(yīng)組件,設(shè)置好屬性和ID,并添加控制變量和消息響應(yīng)函數(shù)。
用到的控件如下:
1姓名信息:CstaticText,Cedit,Tip 2性別信息:CstaticText,RADIO 3年齡信息:CstaticText,Cedit,Spin,Tip 4電話信息:CstaticText,Cedit 5Email信息:CstaticText,Cedit,Tip 6喜好信息:CstaticText,Check 7品牌信息:CstaticText,Cedit 8留言信息:CstaticText,Cedit 6.2對話框添加背景圖片
實(shí)現(xiàn)方法:將一張bmp格式圖片添加到資源,記下資源ID。
在OnPaint中添加如下代碼,并注釋掉工程自帶的CDialog::OnPaint(),在對話框中畫出圖片。
核心代碼:
CPaintDC dc(this);CDC memdc;memdc.CreateCompatibleDC(&dc);//創(chuàng)建兼容DC CBitmap bkg;bkg.LoadBitmap(IDB_BITMAP1);//載入位圖 BITMAP bkginfo;bkg.GetBitmap(&bkginfo);//獲取位圖信息 memdc.SelectObject(&bkg);RECT rect;GetWindowRect(&rect);//獲取對話框信息
dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);//畫出圖片
6.3控件初始化
6.3.1初始化默認(rèn)文件保存路徑 核心代碼:
CString newTitle;//設(shè)置默認(rèn)存儲(chǔ)路徑 TCHAR CurrenPath[MAX_PATH];GetCurrentDirectory(sizeof(CurrenPath),CurrenPath);//當(dāng)前程序路徑 m_SavePath.Format(_T(“%ssaving.ini”),CurrenPath);newTitle.Format(_T(“MarketMessage(存儲(chǔ)到%s)”),m_SavePath);SetWindowText(newTitle);//將路徑顯示到窗口標(biāo)題
6.3.2控件初始化
核心代碼:
m_CStaticText_Name.SetFocus();//焦點(diǎn)在NameEdit m_RADIO_MALE.SetCheck(TRUE);//初始化為male CEdit *pAge=(CEdit *)GetDlgItem(IDC_EDIT_AGE);pAge->SetWindowText(_T(“5”));//年齡初始設(shè)置成5 m_Spin_Age.SetBuddy(pAge);//年齡CEdit關(guān)聯(lián)spin控件 m_Spin_Age.SetBase(1);m_Spin_Age.SetRange(5,150);6.3.3創(chuàng)建三個(gè)tip控件用于顯示出錯(cuò)提示 核心代碼:
m_Tip_NameError.Create(this,TTS_ALWAYSTIP|TTS_BALLOON);//創(chuàng)建3tip m_Tip_AgeError.Create(this,TTS_ALWAYSTIP|TTS_BALLOON);m_Tip_EmailError.Create(this,TTS_ALWAYSTIP|TTS_BALLOON);
m_Tip_NameError.EnableToolTips();m_Tip_NameError.Activate(TRUE);
m_Tip_AgeError.EnableToolTips();m_Tip_AgeError.Activate(TRUE);
m_Tip_EmailError.EnableToolTips();m_Tip_EmailError.Activate(TRUE);6.4處理各控件消息響應(yīng) 6.4.1屏蔽enter按鍵
功能概述:為防止錯(cuò)誤回車導(dǎo)致程序關(guān)閉,需要屏蔽enter按鍵響應(yīng)。重載PreTranslateMessage(MSG * pMsg)函數(shù),判斷為enter按鍵直接返回。核心代碼:
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
return
TRUE;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)
return
TRUE;
return
CDialog::PreTranslateMessage(pMsg);
6.4.2 姓名框失去焦點(diǎn)時(shí)響應(yīng)
功能概述:判斷姓名輸入是否為空,調(diào)整StaticText前加*號 核心代碼:
CString temp;m_CEdit_Name.GetWindowText(temp);if(temp.IsEmpty()==TRUE)m_CStaticText_Name.SetWindowText(_T(“*姓名:”));else m_CStaticText_Name.SetWindowText(_T(“姓名:”));6.4.3年齡框失去焦點(diǎn)時(shí)響應(yīng)
功能概述:年齡限制在5-150歲以內(nèi),判斷輸入數(shù)值是否超出范圍,如超出用tip控件進(jìn)行錯(cuò)誤提示。
核心代碼:
UpdateData(true);if(m_Edit_Age>=5&&m_Edit_Age<=150)m_CStaticText_Age.SetWindowText(_T(“年齡:”));else //輸入年齡超出范圍
{
RECT rect;
CToolInfo
sTinfo;// 提示信息
CEdit *pAge=(CEdit *)GetDlgItem(IDC_EDIT_AGE);
m_Tip_AgeError.AddTool(pAge,_T(“年齡超出范圍”));
m_CStaticText_Age.SetWindowText(_T(“*年齡:”));
if(m_Edit_Age<5)
{
pAge->SetWindowText(_T(“5”));//年齡設(shè)置成5
m_Tip_AgeError.UpdateTipText(_T(“錯(cuò)誤:年齡小于5”), pAge);
}
if(m_Edit_Age>150)
{
pAge->SetWindowText(_T(“150”));//年齡設(shè)置成150
m_Tip_AgeError.UpdateTipText(_T(“錯(cuò)誤:年齡大于150”), pAge);
}
pAge->GetWindowRect(&rect);//得到顯示位置
m_Tip_AgeError.GetToolInfo(sTinfo, pAge);
sTinfo.uFlags = TTF_TRACK;
// 顯示方式設(shè)置
m_Tip_AgeError.SetToolInfo(&sTinfo);//以下用發(fā)送消息的方式控制tip框顯示 m_Tip_AgeError.SendMessage(TTM_TRACKPOSITION, 0,(LPARAM)MAKELONG(rect.left, rect.bottom));
m_Tip_AgeError.SendMessage(TTM_TRACKACTIVATE, TRUE,(LPARAM)&sTinfo);// tips顯示
//設(shè)置1秒的定時(shí),在定時(shí)器中發(fā)送消息關(guān)閉tip框顯示
SetTimer(1000,1000,NULL);//定時(shí)關(guān)閉
} 6.4.4Email框失去焦點(diǎn)時(shí)響應(yīng)
功能概述:判斷輸入的Email信息是否符合格式,不合適給出tip提示 核心代碼:
CString temp;TCHAR *pFind=NULL;m_CEdit_Email.GetWindowText(temp);if(temp.IsEmpty()==TRUE)return;pFind=_tcschr(temp.GetBuffer(),'@');//判斷是否存在@ if(pFind!=NULL&&(*(pFind+1))!=_T('