上岸充通大 1896 1920 006 C++程序设计与实践 第8讲Windows应用程序设计 上海交通大学 机械与动力工程学院 2014.9-2015.1 上究通大粤 1B96 1920 1. MFC消息机制 2. CDialog类的结构 3. 案例介绍 1
1 C++程序设计与实践 上海交通大学 机械与动力工程学院 2014.9-2015.1 第8讲 Windows应用程序设计 1. MFC 消息机制 2. CDialog类的结构 3. 案例介绍的使用
MFC消息机制 客人进入饭店安排座位 请服务员过来点餐 服务员记录菜名 送菜 厨师找菜谱名 厨师做菜 国上清夫道大些 3/19 Windowsi程序运行原理 口Vindows/应用程序,操作系统,计算机硬件之 间的相互关系 应用程序 消息队列 3 4 操作系统 >向下的箭头3表示应用程序 可以通知操作系统执行某个 2 具体的动作 输入输出设备 国上海大学 4/19 2
2 3/19 MFC 消息机制 客人进入饭店安排座位 请服务员过来点餐 服务员记录菜名 厨师找菜谱名 厨师做菜 送菜 4/19 Windows应用程序,操作系统,计算机硬件之 间的相互关系 Windows程序运行原理 向下的箭头3 表示应用程序 可以通知操作系统执行某个 具体的动作 应用程序 消息队列 操作系统 输入输出设备 1 3 4 2
关于消息及消息队列 口向上的箭头4表示操作系统能够将输入设备的变化上传给 应用程序。 口如用户在某个程序活动时按了一下键盘,操作系统马上 能够感知到这一享件,并且能够知道用户按下的是哪一 个键,操作系统并不决定对这一事件如何作出反应,而 是将这一事件转交给应用程序,由应用程序决定如何对 这一事件作出反应。 应用程序 消息队列 3 操作系统 2 国上清夫道大些 输入输出设备 5/19 关于Windows API 口操作系统把它所能够完成的功能以函数的形式提供给应 用程序使用: 口应用程序是以函数调用的方式来通知操作系统执行相应 的功能,称为系统调用; 口这些函数的集合就是Windows操作系统提供给应用程 序编程的接口(Application Programming Interface), 简称Vindows API; ▣如CreateWindow就是一个API函数,应用程序中调用 这个函数,操作系统就会按照该函数提供的参数信息产 生一个相应的窗口; 口Windows:提供了上千个标准函数、宏和数据结构的定 义。 国上海大学 6/19 3
3 5/19 关于消息及消息队列 向上的箭头4表示操作系统能够将输入设备的变化上传给 应用程序。 如用户在某个程序活动时按了一下键盘,操作系统马上 能够感知到这一事件,并且能够知道用户按下的是哪一 个键,操作系统并不决定对这一事件如何作出反应,而 是将这一事件转交给应用程序,由应用程序决定如何对 这一事件作出反应。 应用程序 消息队列 操作系统 输入输出设备 1 3 4 2 6/19 关于Windows API 操作系统把它所能够完成的功能以函数的形式提供给应 用程序使用; 应用程序是以函数调用的方式来通知操作系统执行相应 的功能,称为系统调用; 这些函数的集合就是Windows操作系统提供给应用程 序编程的接口(Application Programming Interface), 简称Windows API; 如CreateWindow就是一个API函数,应用程序中调用 这个函数,操作系统就会按照该函数提供的参数信息产 生一个相应的窗口; Windows提供了上千个标准函数、宏和数据结构的定 义
MFC消息机制 添加事件 座位 按钮 显示文字: 菜谱 函数声明 点餐 afx_msg void OnBnClickedButton1(); BEGIN MESSAGE_MAP(CMyDlgDlg,CDialogEx) ON_WM_SYSCOMMANDO ON WM PAINTO 消息列表 ON_WM_QUERYDRAGICONO ON_BN_CLICKED(IDC BUTTON1,&CMyDlgDlg::OnBnClick END_MESSAGE_MAPO void CMyDlgDlg::OnBnClickedButton1 记录 /T0D0:在此添加控件通知处理程序代码 m_strText=按钮按下了," UpdateData(FALSE); 函数定义 做菜 倒上文通大学 7/19 MFC消息机制 MyDlg 点餐 01202092 座位 消息框 添加变量 void CMyDlgDlg::DoDataExchange(CDataEx CDialogEx::DoDataExchange(pDX): 记录 OoX.Tex(pDx,IDC_EDIT,m-Tet变量对应 菜谱 变量声明 变量赋值与更新 CString m strText; void CMyDlgDlg::OnBnClickedButton1( ∥TO00:在此 取菜与送菜 m_strText="按按下了,; 是否 UpdateData(FALSE); 送过? 国上济大学 UpdateData(TRUE) 8/19 4
4 7/19 MFC 消息机制 函数定义 函数声明 添加事件 消息列表 座位 点餐 记录 菜谱 做菜 8/19 MFC 消息机制 添加变量 消息框 变量声明 变量对应 变量赋值与更新 座位 点餐 记录 菜谱 取菜与送菜 是否 送过? UpdateData(TRUE)
MFC消息机制 MyDlg HD1202092 按钮■ 显示文字: CPaintDC dc(this:/∥用于绘制的设备上下文 dc.Rectangle(300,50,500,150):/绘制拒形框 /画斜线 dc.MoveTo(300,50); dc.LineTo(500,150); /画水平直线 dc.MoveTo(300,100); dc.LineTo(500,100); 国上海文大等 9/19 上究通大粤 1896 1920 2006 1. MFC消息机制 2. CDialoga类的结构 3.案例介绍 SHAN 5
5 9/19 MFC 消息机制 X Y 1. MFC 消息机制 2. CDialog类的结构 3. 案例介绍的使用
MFC类库组成 —class map CObject 应用程序框架 口 图形绘制的绘制对象 CCmdTarget 文件服务 CWinThread 口 异常处理 CWinApp 口 结构-List、Array等 ▣ Internet服务 CMyWinAPP ▣ OLE 2 CWnd ▣ 数据库 CView 框架类 ▣ 通用类 CMyView CFrameWnd CMyFrameWnd CDocument CMyDoc 国上产文大等 11/19 CDialog 口对话框是一种用户界面,它为用户提供了一种标准的处理 数据的方法。 CObject CCmdTarget CWnd CDialog CDialogEx □有☐ CMyDlgDlg ■CWnd类的继承类, 基本功能: 移动窗口、改变窗口大小、关闭窗口 圈上海大大学 12/19 6
6 11/19 MFC 类库组成——class map 应用程序框架 图形绘制的绘制对象 文件服务 异常处理 结构 - List、Array等 Internet 服务 OLE 2 数据库 通用类 框架类 12/19 CDialog 对话框是一种用户界面,它为用户提供了一种标准的处理 数据的方法。 CWnd类的继承类,基本功能: 移动窗口、改变窗口大小、关闭窗口
CDialog 口对话框是一种用户界面,它为用户提供了一种标准的处理 数据的方法。 CObject CWnd::UpdateData() 通过调用DoDataExchange()设 CCmdTarget 置或获取对话框控件的数据 CWnd CWnd::DoDataExchange() CDialog 被UpdateData(调用以实现对话 框数据交换,不能直接调用 CDialogEx CMyDlgDlg CDialog::Onok() 单击OK按钮时调用该函数,接 CDialog::DoModal() 收对话框输入数据,关闭对话框 激活模态对话框,显示对话框窗 CDialog::OnCancel() CDialog::Create() 单击Cancel:按钮或按Esc键时调 根据对话框资源模板创建非模态 用该函数,不接收对话框输入数 上 对话框窗口 据,关闭对话框 13/19 CDialog 口简单应用:三角形绘制 CMyDIgDlg::OnPaint() Pnt1 ∥定义三角形三个顶点 CPoint Pnt1(150,30): CPoint Pnt2(30.200): CPoint Pnt3(270,200); Pnt2 Pnt3 连线绘制三角形 CPaintDC dc(this);∥用于绘制的设备上下文 /第一条边 dc.MoveTo(Pnt1): dc.LineTo(Pnt2); 第二条边 dc.MoveTo(Pnt2): dc.LineTo(Pnt3); /第三条边 dc.MoveTo(Pnt3): dc.LineTo(Pnt1); 能 CDialogEx::OnPaint(); 上酒天通大等 14/19 7
7 13/19 CDialog 对话框是一种用户界面,它为用户提供了一种标准的处理 数据的方法。 CWnd::UpdateData() 通过调用DoDataExchange()设 置或获取对话框控件的数据 CWnd::DoDataExchange() 被UpdateData()调用以实现对话 框数据交换,不能直接调用 CDialog::DoModal() 激活模态对话框,显示对话框窗 CDialog::Create() 根据对话框资源模板创建非模态 对话框窗口 CDialog::OnOk() 单击OK按钮时调用该函数,接 收对话框输入数据,关闭对话框 CDialog::OnCancel() 单击Cancel按钮或按Esc键时调 用该函数,不接收对话框输入数 据,关闭对话框 14/19 CDialog 简单应用:三角形绘制 CMyDlgDlg::OnPaint() //定义三角形三个顶点 CPoint Pnt1(150, 30); CPoint Pnt2(30, 200); CPoint Pnt3(270, 200); //连线绘制三角形 CPaintDC dc(this); // 用于绘制的设备上下文 //第一条边 dc.MoveTo(Pnt1); dc.LineTo(Pnt2); //第二条边 dc.MoveTo(Pnt2); dc.LineTo(Pnt3); //第三条边 dc.MoveTo(Pnt3); dc.LineTo(Pnt1); CDialogEx::OnPaint(); Pnt1 Pnt2 Pnt3
CDialog 口新功能实现方法:CDialog类中添加函数 函数重定义 MyMFC_Animation 学号姓名 OnCreate() OnTimer( 函数自定义 Draw() 肌有 国上海文大停 15/19 CDialog GaGC.ainatiomle:0nCreatouGEAiESiRI1cr6atoSrue) if (CDialogEx::0nCreate(lpCreateStruct)==-1) return-1: /ToDO:在此添加您专用的创建代码 7破间 SetTimer(1,750,MULL): return 0: /OO:在比添加有息处理程序代码和/或调用驻认值 /位变 Drav_MoveCircle() /形夏 Drav_ChangeShape () 见下页 /色 void CHyMFC_AninationDlg:Draw_MoveCircle() void ClylFC_AninationDlg:Draw_ChangeShape ( CDialogEx::OnTiner (nIDEvent) void CMyMFC_AninationDIg::Drav_ChangeColor ( 国上海通大学 16/19 8
8 15/19 CDialog 新功能实现方法:CDialog类中添加函数 函数自定义 函数重定义 OnCreate() OnTimer() Draw() 16/19 CDialog 见下页
CDialog td8ic一atiom:r.nwGrea0 /获耻当前D CVnd *pCanvasWnd-GetDlgItea(IDC_CANVAS1) CDC *pCanvasDC=pCanvaslnd-XGetDC () mybrushl.CreateSolidBrush (RGB(255,255,255)) pCanvasDC->FillRect(rect,aaybrushl) /定义位段个教 int nu 6: /针草当丽离心位五 ble x de 更新圆心坐标 //单径 double radius rect.Height ()/2-5; /画图 pCanvasDC->Ellipse(x-radius,y-radius,x+radius,y+radius) /使1Cozt环 _iCount1=(n_iCount 1+1)%num 全局变量控制 上人人字 17/19 上究通大粤 1B96 1920 2005 1. MFC消息机制 2. CDialog类的结构 3.案例介绍 参见Word文档 9
9 17/19 CDialog 全局变量控制 更新圆心坐标 1. MFC 消息机制 2. CDialog类的结构 3. 案例介绍的使用 参见Word 文档