超市留言板报告.doc_第1页
超市留言板报告.doc_第2页
超市留言板报告.doc_第3页
超市留言板报告.doc_第4页
超市留言板报告.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实 验 报 告1.实验项目名称:超市促销留言板的设计与实现 2.实验原理: mfc是微软基础类库的简称,是微软公司实现的一个c+类库,主要封装大部分的windows API函数。使用MFC可以方便的编写窗口型应用软件。MFC下各种窗口都由类CWnd派生。CWnd及其派生类的每个实例对应一个可见的窗口。与窗口的通信需要通过消息实现。3.实验目的: 通过编写一个留言板型的应用软件,学习和应用wingows下MFC编程。加强对MFC和系统消息处理、消息响应的理解。4.实验内容: 4.1基于MFC,开发一个对话框程序。4.2使用工具箱中的static text, radio button, check box, group box, button, edit control 控件设计一个交互式的界面。4.3对控件的ID和名称进行重命名。4.4为对话框添加一副背景图片。4.5为控件添加事件代码。4.6将从界面中收集到 的信息,输出到文本文件。4.7记录顾客的联系方式。4.8询问顾客对商品和品牌的喜欢。4.9提供相应接口,让顾客留下意见和建议。5.实验器材(设备、元器件):计算机,vs20086.实验步骤:6.1添加相关组件从工具栏拖出相应组件,设置好属性和ID,并添加控制变量和消息响应函数。用到的控件如下:1姓名信息:CstaticText,Cedit,Tip2性别信息:CstaticText,RADIO3年龄信息:CstaticText,Cedit,Spin,Tip4电话信息:CstaticText,Cedit5Email信息:CstaticText,Cedit,Tip6喜好信息:CstaticText ,Check7品牌信息:CstaticText,Cedit8留言信息:CstaticText,Cedit6.2对话框添加背景图片实现方法:将一张bmp格式图片添加到资源,记下资源ID。在OnPaint中添加如下代码,并注释掉工程自带的CDialog:OnPaint(),在对话框中画出图片。核心代码:CPaintDC dc(this);CDC memdc;memdc.CreateCompatibleDC(&dc);/创建兼容DCCBitmap 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初始化默认文件保存路径核心代码:CString newTitle;/设置默认存储路径TCHAR CurrenPathMAX_PATH;GetCurrentDirectory(sizeof(CurrenPath),CurrenPath);/当前程序路径m_SavePath.Format(_T(%ssaving.ini),CurrenPath);newTitle.Format(_T(MarketMessage(存储到%s),m_SavePath);SetWindowText(newTitle);/将路径显示到窗口标题6.3.2控件初始化 核心代码:m_CStaticText_Name.SetFocus();/焦点在NameEditm_RADIO_MALE.SetCheck(TRUE);/初始化为maleCEdit *pAge=(CEdit *)GetDlgItem(IDC_EDIT_AGE);pAge-SetWindowText(_T(5);/年龄初始设置成5m_Spin_Age.SetBuddy(pAge);/年龄CEdit关联spin控件m_Spin_Age.SetBase(1);m_Spin_Age.SetRange(5,150);6.3.3创建三个tip控件用于显示出错提示核心代码:m_Tip_NameError.Create(this,TTS_ALWAYSTIP|TTS_BALLOON);/创建3tipm_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处理各控件消息响应6.4.1屏蔽enter按键功能概述:为防止错误回车导致程序关闭,需要屏蔽enter按键响应。重载PreTranslateMessage(MSG * pMsg)函数,判断为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 姓名框失去焦点时响应功能概述:判断姓名输入是否为空,调整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年龄框失去焦点时响应功能概述:年龄限制在5-150岁以内,判断输入数值是否超出范围,如超出用tip控件进行错误提示。核心代码: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_AgeSetWindowText(_T(5);/年龄设置成5m_Tip_AgeError.UpdateTipText(_T(错误:年龄小于5), pAge);if(m_Edit_Age150)pAge-SetWindowText(_T(150);/年龄设置成150m_Tip_AgeError.UpdateTipText(_T(错误:年龄大于150), pAge);pAge-GetWindowRect(&rect);/得到显示位置m_Tip_AgeError.GetToolInfo(sTinfo, pAge);sTinfo.uFlags = TTF_TRACK; / 显示方式设置m_Tip_AgeError.SetToolInfo(&sTinfo); /以下用发送消息的方式控制tip框显示m_Tip_AgeError.SendMessage(TTM_TRACKPOSITION, 0,(LPARAM)MAKELONG(rect.left, rect.bottom);m_Tip_AgeError.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&sTinfo);/ tips显示/设置1秒的定时,在定时器中发送消息关闭tip框显示SetTimer(1000,1000,NULL);/定时关闭6.4.4Email框失去焦点时响应功能概述:判断输入的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(0)/后是否还有字符pFind=_tcschr(pFind+1,);if(pFind=NULL) return;/格式不合规范,显示tip提示RECT rect;CToolInfo sTinfo; / 提示信息CEdit *pEmail=(CEdit *)GetDlgItem(IDC_EDIT_EMAIL);m_Tip_EmailError.AddTool(pEmail,_T(Email不符合规范);m_Tip_EmailError.UpdateTipText(_T(Email格式有误), pEmail);pEmail-GetWindowRect(&rect);m_Tip_EmailError.GetToolInfo(sTinfo, pEmail);sTinfo.uFlags = TTF_TRACK; / 显示方式设置m_Tip_EmailError.SetToolInfo(&sTinfo); m_Tip_EmailError.SendMessage(TTM_TRACKPOSITION, 0,(LPARAM)MAKELONG(rect.left, rect.bottom);m_Tip_EmailError.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&sTinfo);/ tips显示SetTimer(1001,1000,NULL);/定时关闭6.4.5添加定时响应功能概述:添加响应ON_WM_TIMER()消息,重载OnTimer(UINT_PTR nIDEvent)函数核心代码:switch (nIDEvent)case 1000:/为自定义定时IDKillTimer(nIDEvent);/只响应一次,关闭相应定时m_Tip_AgeError.SendMessage(TTM_TRACKACTIVATE, FALSE, NULL); /关闭年龄 tip窗口break;case 1001:KillTimer(nIDEvent);m_Tip_EmailError.SendMessage(TTM_TRACKACTIVATE, FALSE, NULL); /关闭Email tip窗口break;case 1002:KillTimer(nIDEvent);m_Tip_NameError.SendMessage(TTM_TRACKACTIVATE, FALSE, NULL); /关闭姓名 tip窗口break;CDialog:OnTimer(nIDEvent);6.5按钮响应6.5.1清空按钮响应功能概述:将所有控件内容重新初始化,清空保存数据的结构。核心代码:void CMarketMessage2Dlg:OnBnClickedButtonClear()/ TODO: 在此添加控件通知处理程序代码MessageInit();/清空保存数据的数据结构m_CStaticText_Name.SetFocus();/焦点在NameEditm_RADIO_MALE.SetCheck(TRUE);/初始化为maleCEdit *pAge=(CEdit *)GetDlgItem(IDC_EDIT_AGE);pAge-SetWindowText(_T(5);/年龄初始设置成5m_CEdit_Name.SetWindowText(_T();m_CEdit_PhoneNumber.SetWindowText(_T();m_CEdit_Email.SetWindowText(_T();m_Edit_Message.SetWindowText(_T();m_CEdit_Brand.SetWindowText(_T();bool CMarketMessage2Dlg:MessageInit(void)m_MessageStruct.Name.SetString(_T();m_MessageStruct.Email.SetString(_T();m_MessageStruct.Brand.SetString(_T();m_MessageStruct.PhoneNumber.SetString(_T();m_MessageStruct.Message.SetString(_T();m_MessageStruct.Age.SetString(_T();m_MessageStruct.Gender.SetString(_T();m_MessageStruct.Preference.SetString(_T();m_MessageStruct.TotalSize=0;return true;6.5.2修改数据保存文件位置按钮响应功能概述:弹出一个选择文件对话框,记录选定的文件路径。核心代码:void CMarketMessage2Dlg:OnBnClickedButtonPlace()/ TODO: 在此添加控件通知处理程序代码CFileDialog *lpszOpenFile; /定义一个CfileDialog对象lpszOpenFile = new CFileDialog(TRUE,_T(),_T(),OFN_HIDEREADONLY , _T(文件类型(*.ini)|*.ini|所有文件 (*.*)|*.*|);if(lpszOpenFile-DoModal() =IDOK)/假如点击对话框确定按钮CString newTitle;m_SavePath = lpszOpenFile-GetPathName();/得到保存打开文件的路径newTitle.Format(_T(MarketMessage(存储到%s),m_SavePath);SetWindowText(newTitle);/重新设置窗口标题,显示新路径delete lpszOpenFile;/释放分配的对话框6.5.3最后提交按钮响应功能概述:首先判断姓名是否为空,为空返回错误提示。如不为空,获取各控件输入信息,打开路径文件,获取系统时间,将输入信息和系统时间格式调整后写入文件末尾。弹出对话框表明提交成功。核心代码:void CMarketMessage2Dlg:OnBnClickedButtonHandin()/ TODO: 在此添加控件通知处理程序代码MessageInit();m_CEdit_Name.GetWindowText(m_MessageStruct.Name);if(m_MessageStruct.Name.IsEmpty()/没有填写姓名,取消保存RECT rect;CToolInfo sTinfo; / 提示信息CEdit *pName=(CEdit *)GetDlgItem(IDC_EDIT_NAME);m_Tip_NameError.AddTool(pName,_T(未填写姓名);m_Tip_NameError.UpdateTipText(_T(未填写姓名), pName);pName-GetWindowRect(&rect);m_Tip_NameError.GetToolInfo(sTinfo, pName);sTinfo.uFlags = TTF_TRACK; / 显示方式设置m_Tip_NameError.SetToolInfo(&sTinfo); m_Tip_NameError.SendMessage(TTM_TRACKPOSITION, 0,(LPARAM)MAKELONG(rect.left, rect.bottom);m_Tip_NameError.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&sTinfo);/ tips显示SetTimer(1002,1000,NULL);/定时关闭return;HANDLE /打开指定路径文件 H_SaveFile=CreateFile(m_SavePath,GENERIC_WRITE|FILE_APPEND_DATA,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if(H_SaveFile=INVALID_HANDLE_VALUE)MessageBox(_T(存储文件打开失败);return;/读入性别信息if(m_RADIO_MALE.GetCheck()=TRUE) m_MessageStruct.Gender.SetString(_T(男);else m_MessageStruct.Gender.SetString(_T(女);/读入年龄信息UpdateData(true);m_MessageStruct.Age.Format(_T(%d),m_Edit_Age);/读入电话号码信息m_CEdit_PhoneNumber.GetWindowText(m_MessageStruct.PhoneNumber);/读入Email信息m_CEdit_Email.GetWindowText(m_MessageStruct.Email);/读入喜好信息if(m_Check_1=TRUE) m_MessageStruct.Preference.Append(_T(食品、);if(m_Check_2=TRUE) m_MessageStruct.Preference.Append(_T(日用品、);if(m_Check_3=TRUE) m_MessageStruct.Preference.Append(_T(服装、);if(m_Check_4=TRUE) m_MessageStruct.Preference.Append(_T(电子产品、);if(m_Check_5=TRUE) m_MessageStruct.Preference.Append(_T(奢侈品、);/读入品牌信息m_CEdit_Brand.GetWindowText(m_MessageStruct.Brand);/读入留言信息m_Edit_Message.GetWindowText(m_MessageStruct.Message);/获取系统时间信息SYSTEMTIME systime;CString Ctimestr;GetLocalTime( &systime ); Ctimestr.Format( %4d年%02d月%02d日 %02d:%02d:%02d 星期%1d,systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute, systime.wSecond,systime.wDayOfWeek); /将各信息格式进行调整,保存到一个Cstring结构中CString temp=Ctimestr+_T(rn)+_T(姓名 :)+m_MessageStruct.Name+_T(rn)+_T(性别 :)+m_MessageStruct.Gender+_T(rn)+_T(年龄 :)+m_MessageStruct.Age+_T(rn)+_T(电话 :)+m_MessageStruct.PhoneNumber+_T(rn)+_T(EMail:)+m_MessageStruct.Email+_T(rn)+_T(喜好 :)+m_MessageStruct.Preference+_T(rn)+_T(品牌 :)+m_MessageStruct.Brand+_T(rn)+_T(留言 :)+m_MessageStruct.Message+_T(rn)+_T(-rn);DWORD NumberOfBytesWritten;/在文件末尾写入数据,后关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论