windows编程实验报告.doc_第1页
windows编程实验报告.doc_第2页
windows编程实验报告.doc_第3页
windows编程实验报告.doc_第4页
windows编程实验报告.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

院 系: 计算机科学学院 专 业: 网络工程 年 级: 2010级 课程名称: Windows编程 学 号: 10066070 姓 名: 王彦廷 指导教师: 熊志勇 2013年 1月 6日年级10级班号3学号10066070专业网络工程姓名王彦廷实验名称熟悉mfc贴图过程实验类型设计型综合型创新型实验目的或要求 熟悉mfc贴图过程,学会添加图片,更加熟练的运用MFC实验原理(算法流程)1. 建立于对话框的mfc应用程序2. 插入一幅bmp图片3. 添加一个picture ctrl图片4. 修改空间中type属性为bitmap5. 在初始化函数里面添加load bitmap 函数加载图片#include stdafx.h#include test.h#include testDlg.h#include afxdialogex.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 对话框数据enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ CtestDlg 对话框CtestDlg:CtestDlg(CWnd* pParent /*=NULL*/): CDialogEx(CtestDlg:IDD, pParent)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CtestDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_Photo, m_picture);DDX_Control(pDX, IDC_picture, picture);BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CtestDlg:OnBnClickedButton1)END_MESSAGE_MAP()/ CtestDlg 消息处理程序BOOL CtestDlg:OnInitDialog()CDialogEx:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE); / 设置大图标SetIcon(m_hIcon, FALSE); / 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CtestDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CtestDlg:OnPaint()/*if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();CPaintDC dc(this);CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);CDC memDC;memDC.CreateCompatibleDC(&dc);CBitmap* pold=memDC.SelectObject(&bmp);CStatic* pPHoto=(CStatic*)GetDlgItem(IDC_Photo); /DC_PHOTO为指定的Picture控件RECT rect;pPHoto-GetClientRect(&rect);pPHoto-GetDC()-StretchBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,&memDC,0,0,200,100,SRCCOPY);dc.SelectObject(&pold);bmp.DeleteObject();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CtestDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CtestDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码CBitmap bitmap; / CBitmap对象,用于加载位图 HBITMAP hBmp; / 保存CBitmap加载的位图的句柄 bitmap.LoadBitmap(IDB_BITMAP1); / 将位图IDB_BITMAP1加载到bitmap hBmp = (HBITMAP)bitmap.GetSafeHandle(); / 获取bitmap加载位图的句柄 picture.SetBitmap(hBmp); / 设置图片控件m_jzmPicture的位图图片为IDB_BITMAP1 组内分工(可选)实验结果分析及心得体会添加的背景图片如下所示:心得体会:通过这次实验,我学会了给对话框添加背景图片,也熟悉了整个MFC的框架。年级10级班号3学号10066070专业网络工程姓名王彦廷实验名称数据库技术实验类型设计型综合型创新型实验目的或要求了解运用MFC连接数据库的基本方式,MFC ODBC数据库编程或MFC DAO数据库编程,知道如何运用mfc访问后台数据库,如何实现对数据库的基本操作:插入,删除,修改,遍历等,对于MFC ODBC数据库编程需要先在ODBC数据源管理器添加程序用要用到的数据源;同时,运用List control将后台数据库中的记录显示在前台的用户操作界面。实验原理(算法流程)1.创建数据源2.SQL Sever2005中创建表并为表添加数据,本实验中主要创建Flight航班表,Customer顾客表,Resort度假村表,Holiday度假表Flight航班表包含属性:flightNo,planeType,airportDepart,timeFromeAirport,departTime,airportArrive,ArriveTimeCustomer顾客表包含属性:customerNo,customerName,customerStreet,custTelNocustomerState,customerCity,customerPasswordResort度假村表包含属性:resortName,distanceFormAirport,timeFromeAirport,resortCityHoliday度假表包含属性:holidayNo,status,dateBooked,cateringType,totalCost,bookCustomerNo,hotelNo,apartmentNo,inwardFlightNo,resortNo3.将实验用到的数据源添加到ODBC数据源管理器中4.创建基于对话框的mfc应用程序,在对话框上添加tab control控件,是该程序能够进行多页面切换5.添加插入,删除,修改等按钮,实现对数据库的基本操作,添加list control控件,将后台的数据记录显示在前台的界面中。/ Travel 对话框IMPLEMENT_DYNAMIC(Travel, CDialogEx)Travel:Travel(CWnd* pParent /*=NULL*/): CDialogEx(Travel:IDD, pParent), arrivePlace(_T()Travel:Travel()void Travel:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, Ctrl_Travel);DDX_Text(pDX, IDC_EDIT2, arrivePlace);BEGIN_MESSAGE_MAP(Travel, CDialogEx)ON_BN_CLICKED(IDC_Find, &Travel:OnBnClickedFind)ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &Travel:OnLvnItemchangedList1)END_MESSAGE_MAP()BOOL Travel:OnInitDialog()CDialogEx:OnInitDialog();/ TODO: 在此添加额外的初始化CRect rc;Ctrl_Travel.GetWindowRect(&rc);/获取控件大小/设置了2列,大小是一样的Ctrl_Travel.InsertColumn(1, _T(度假地名称), LVCFMT_CENTER, rc.Size().cx/2, 0);Ctrl_Travel.InsertColumn(2, _T(所在城市), LVCFMT_CENTER, rc.Size().cx/2, 1);Ctrl_Travel.SetExtendedStyle(Ctrl_Travel.GetExtendedStyle() | LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_TWOCLICKACTIVATE);return TRUE; / return TRUE unless you set the focus to a control/ 异常: OCX 属性页应返回 FALSE/ Travel 消息处理程序void Travel:OnBnClickedFind()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);if(!theApp.m_db.IsOpen()& !theApp.m_db.OpenEx(_T(DSN=TravelAgent;UID=sa;PWD=bbzbb518), CDatabase:openReadOnly | CDatabase:noOdbcDialog)MessageBox(L连接错误!);return;/CRecordset类:代表从数据源选择一组记录(记录集)CRecordset m_set(&theApp.m_db);/Open方法打开记录集CString sql;sql.Format(_T(SELECT resortName,resortCity from Resort WHERE resortCity=%s ),arrivePlace);m_set.Open(CRecordset:forwardOnly,sql,CRecordset:readOnly);CDBVariant var; / 记录有数据的类型和数据的值,它封闭了VARIANT数据类型Ctrl_Travel.DeleteAllItems();/删除所有的项目short nFields = m_set.GetODBCFieldCount(); /得到列的数目int i = 0;/添加所有内容到控件while(!m_set.IsEOF()for(short index = 0; index nFields; index+)m_set.GetFieldValue(index, var);/ do something with varValue/添加一行记录if(index = 0)Ctrl_Travel.InsertItem(i, theApp.VariantToCString(&var);/继续增加记录的其他项elseCtrl_Travel.SetItemText(i, index, theApp.VariantToCString(&var);m_set.MoveNext();i+;/限制非法输入查询CString s = Ctrl_Travel.GetItemText(0,0);if(s.GetLength()=0)AfxMessageBox(_T(对不起,不支持该城市查询);m_set.Close();/凡打开theApp.m_db.Close(); /皆关闭void Travel:OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);/ TODO: 在此添加控件通知处理程序代码DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) );Ctrl_Travel.ScreenToClient(&point);LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;int nItem = Ctrl_Travel.SubItemHitTest(&lvinfo); /获得行数if(nItem != -1) CString temp,temp1;/temp.Format(_T(单击的是第%d行第%d列), lvinfo.iItem, lvinfo.iSubItem);DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos),HIWORD(dwPos);Ctrl_Travel.ScreenToClient(&point);LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;int nItem = Ctrl_Travel.SubItemHitTest(&lvinfo); /获取度假村名称ResortName = Ctrl_Travel.GetItemText(lvinfo.iItem,lvinfo.iSubItem); TravelInfo hotelinfodlg;hotelinfodlg.DoModal();*pResult = 0;/ TravelInfo 对话框IMPLEMENT_DYNAMIC(TravelInfo, CDialogEx)TravelInfo:TravelInfo(CWnd* pParent /*=NULL*/): CDialogEx(TravelInfo:IDD, pParent)TravelInfo:TravelInfo()void TravelInfo:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, Ctrl_TravelInfo);BEGIN_MESSAGE_MAP(TravelInfo, CDialogEx)ON_BN_CLICKED(IDbook, &TravelInfo:OnBnClickedbook)END_MESSAGE_MAP()/ TravelInfo 消息处理程序BOOL TravelInfo:OnInitDialog()CDialogEx:OnInitDialog();/ TODO: 在此添加额外的初始化 CRect rc; Ctrl_TravelInfo.GetWindowRect(&rc);/获取控件大小Ctrl_TravelInfo.InsertColumn(1, _T(度假村名称), LVCFMT_CENTER, rc.Size().cx/5, 0); Ctrl_TravelInfo.InsertColumn(2, _T(所在城市), LVCFMT_CENTER, rc.Size().cx*1.5/5, 1);Ctrl_TravelInfo.InsertColumn(3, _T(距机场距离), LVCFMT_CENTER, rc.Size().cx*1.5/5, 2); Ctrl_TravelInfo.InsertColumn(4, _T(距机场时间), LVCFMT_CENTER, rc.Size().cx/5, 3);Ctrl_TravelInfo.SetExtendedStyle(Ctrl_TravelInfo.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP| LVS_EX_TWOCLICKACTIVATE); if(!theApp.m_db.IsOpen() & !theApp.m_db.OpenEx(_T(DSN=TravelAgent;UID=sa;PWD=bbzbb518), CDatabase:openReadOnly | CDatabase:noOdbcDialog)MessageBox(L连接错误!);return false ;/CRecordset类:代表从数据源选择一组记录(记录集)CRecordset m_set(&theApp.m_db);/Open方法打开记录集CString sql;sql.Format(_T(SELECT resortName,resortCity,distanceFormAirport,timeFromeAirport from Resort WHERE resortName=%s),ResortName);m_set.Open(CRecordset:forwardOnly,sql,CRecordset:readOnly);CDBVariant var; / 记录有数据的类型和数据的值,它封闭了VARIANT数据类型Ctrl_TravelInfo.DeleteAllItems();/删除所有的项目short nFields = m_set.GetODBCFieldCount(); /得到列的数目int i = 0;/添加所有内容到控件while(!m_set.IsEOF()for(short index = 0; index GetCheck() /员工查询客户订单情况 str.Format(_T(SELECT * from Operator WHERoperatorName=%s),username); str1.Format(_T(AND operatorPassword=%s;),mima); str+=str1; m_set1.Open(CRecordset:forwardOnly,str,CRecordset:readOnly); if (!m_set1.IsEOF() Open_flag=TRUE; theApp.m_db.Close(); Customerorder dlg; dlg.DoModal(); else MessageBox(L您输入的用户名或密码不正确,请重新输入!); SetDlgItemText(IDC_EDIT1,L); SetDlgItemText(IDC_EDIT2,L); if(CButton*)GetDlgItem(IDC_manager)-GetCheck() /公司经理查询公司总订单情况 str.Format(_T(SELECT * from Employee WHemployeeName=%s),username); str1.Format(_T(AND password=%s;),mima); str+=str1; m_set2.Open(CRecordset:forwardOnly,str,CRecordset:readOnly); if (!m_set2.IsEOF() Open_flag=TRUE; theApp.m_db.Close(); Companydingdan dlg; dlg.DoModal(); else MessageBox(L您输入的用户名或密码不正确,请重新输入!); SetDlgItemText(IDC_EDIT1,L); SetDlgItemText(IDC_EDIT2,L); if(CButton*)GetDlgItem(IDC_customer)-GetCheck() /客户查询自己订单情况 str.Format(_T(SELECT * from Customer WHEcustomerName=%s),username); str1.Format(_T(AND customerPassword=%s;),mima); str+=str1; m_set3.Open(CRecordset:forwardOnly,str,CRecordset:readOnly); if (!m_set3.IsEOF() Open_flag=TRUE; theApp.m_db.Close(); Mydingdan dlg; dlg.DoModal(); else MessageBox(L您输入的用户名或密码不正确,请重新输入!); SetDlgItemText(IDC_EDIT1,L); SetDlgItemText(IDC_EDIT2,L); / Mydingdan 对话框IMPLEMENT_DYNAMIC(Mydingdan, CDialogEx)Mydingdan:Mydingdan(CWnd* pParent /*=NULL*/): CDialogEx(Mydingdan:IDD, pParent)Mydingdan:Mydingdan()void Mydingdan:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, Ctrl_Dingdan);BEGIN_MESSAGE_MAP(Mydingdan, CDialogEx)ON_BN_CLICKED(IDC_CustomerOrder, &Mydingdan:OnBnClickedCustomerorder)/ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &Mydingdan:OnLvnItemchangedList1)ON_BN_CLICKED(IDC_jiudian, &Mydingdan:OnBnClickedjiudian)ON_BN_CLICKED(IDC_hangban, &Mydingdan:OnBnClickedhangban)ON_BN_CLICKED(IDC_gongyu, &Mydingdan:OnBnClickedgongyu)ON_BN_CLICKED(IDC_dujiacun, &Mydingdan:OnBnClickeddujiacun)ON_BN_CLICKED(IDC_others, &Mydingdan:OnBnClickedothers)END_MESSAGE_MAP()/ Mydingdan 消息处理程序BOOL Mydingdan:OnInitDialog()CDialogEx:OnInitDialog();/ TODO: 在此添加额外的初始化CRect rc;Ctrl_Dingdan.GetWindowRect(&rc);/获取控件大小Ctrl_Dingdan.InsertColumn(1, _T(接待员), LVCFMT_CENTER, rc.Size().cx/6,0);Ctrl_Dingdan.InsertColumn(2, _T(电话), LVCFMT_CENTER, rc.Size().cx*2/6, 1);Ctrl_Dingdan.InsertColumn(3, _T(食宿类型), LVCFMT_CENTER, rc.Size().cx*2/6, 2);Ctrl_Dingdan.InsertColumn(4, _T(消费额), LVCFMT_CENTER, rc.Size().cx/6, 3);Ctrl_Dingdan.SetExtendedStyle(Ctrl_Dingdan.GetExtendedStyle() | LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP| LVS_EX_TWOCLICKACTIVATE); (CButton*)GetDlgItem(IDC_others)-SetCheck(TRUE); jiudain_flag=0, gongyu_flag=0, hangban_flag=0, dujiacun_flag=0, others=1; return TRUE; / return TRUE unless you set the focus to a control/ 异常: OCX 属性页应返回 FALSEvoid Mydingdan:OnBnClickedCustomerorder()/ TODO: 在此添加控件通知处理程序代码if(!theApp.m_db.IsOpen() & !theApp.m_db.OpenEx(_T(DSN=TravelAgent;UID=sa;PWD=bbzbb518), CDatabase:openReadOnly | CDatabase:noOdbcDialog)MessageBox(L连接错误!); /CRecordset类:代表从数据源选择一组记录(记录集)CRecordset m_set(&theApp.m_db); CString sql;if (others=1&(CButton*)GetDlgItem(IDC_others)-GetCheck() sql.Format(_T(SELECT operatorName,operTelNo,cateringType,totalCost FROM Customer,Operator,Holiday WHERE Operator.contactName=Customer.customerName AND bookCustomerNo =Customer.customerNo AND customerName=%s),username); /酒店订单查询if (jiudain_flag=1&(CButton*)GetDlgItem(IDC_jiudian)-GetCheck() sql.Format(_T(SELECT hotelName,hotelCity,hotelStreet,hotelRating from Hotel,Holiday,Customer WHERE Customer.customerNo=Holiday.bookCustomerNo AND Hotel.hotelNo=Holiday.hotelNo AND customerName=%s ),username); /公寓订单查询if (gongyu_flag=1&(CButton*)GetDlgItem(IDC_gongyu)-GetCheck() sql.Format(_T(SELECTapartmentName,apartmentCity,apartmentStreet,apartmentRating from Apartment,Holiday,Customer WHERE Customer.customerNo=Holiday.bookCustomerNo AND Apartment.apartmentNo=Holiday.apartmentNo AND customerName=%s ),username);/航班订单查询if (hangban_flag=1&(CButton*)GetDlgItem(IDC_hangban)-GetCheck() sql.Format(_T(SELECT flightNo,planeType,airportDepart,CONVERT(VARCHAR(20),departTime,108),airportArrive,CONVERT(VARCHAR(20),ArriveTime,108) from Flight,Holiday,Customer WHERE Customer.customerNo=Holiday.bookCustomerNo AND Flight.flightNo=Holiday.inwardFlightNo AND customerName=%s ),username);/度假村订单查询if (dujiacun_flag=1&(CButton*)GetDlgItem(IDC_dujiacun)-GetCheck() sql.Format(_T(SELECT resortName,distanceFormAirport,timeFromeAirport,resortCity from Resort,Holiday,Customer WHERE Customer.customerNo=Holiday.bookCustomerNo AND Resort.resortNo=Holiday.ResortNo AND customerName=%s),username); /Open方法打开记录集m_set.Open(CRecordset:forwardOnly,sql,CRec

温馨提示

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

评论

0/150

提交评论