MFC对话框与组件控件编程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
Lab. of Marine Dynamic Simulation & Control
MFC Programming
标准控件常用控件
• 信息显示控件:如静态文本、图形、树状、 列表框等,用于向用户显示数据 • 信息请求控件:按钮、树状、列表框等,使 用户能从应用程序中获取信息 • 信息修改控件:编辑框、单选按钮、复选框 等,使用户能够修改应用程序的数据
17
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 通用窗口(CWnd)的一些用法
– 改变窗口状态:
• EnableWindow\IsWindowEnabled设置查询窗口 的禁止/允许状态 • ModifyStyle\ModifyStyleEx 修改窗口风格 • IsWindowVisible 可以检查窗口是否被显示 • ShowWindow; (SW_HIDE,SW_SHOW等)
MFC Programming
• 常用控件:
– – – – – 微调控件 进程指示器 滑块 热键 列表控件 树状控件 选项卡控件 动画控件 月历 多信息文本编辑控件 IP地址控件 日期/时间调节器 扩展组合框
15
Lab. of Marine Dynamic Simulation & Control
Lab. of Marine Dynamic Simulation & Control
MFC Programming
工程中加入无模式对话框
• 工程中加入无模式对话框步骤:
– 1)利用资源编辑器和ClassWizard创建对话框模板 和对话框类 – 2)调用CDialog的缺省构造函数构造对象,可以将 父窗口指针保存,用于发送消息 – 3)调用CDialog::Create(IDD)创建对话框窗口
MFC Programming
• 标准控件和常用控件在MFC中都有对应 的类,从CWnd类派生出来的,都具有窗 口的属性
16
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 控件不但可以在对话框模板中设计并显 示,也可以脱离对话框存在 • 简单的控件直接在对话框中设计并简单 映射成员变量和消息即可很好的使用 • 复杂的控件可以由GetDlgItem返回指向 控件的类指针,通过该指针可以对该控 件进行程序运行时操作 • 也可以通过这种方法运行时增加控件
5
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 设计对话框模板
– – – – 在资源编辑器中插入对话框模板 在模板中添加所需控件 设置控件的各种属性 设计对话框模板时经常使用的工具(如图钉 按钮,对齐,统一大小),规划对话框中的 各种元素,使之美观大方,使用方便
• 对话框是基于资源的,资源指定其包含的元素和布局。 • 对话框包含最基本的窗口元素:控件 • 一个从CDialog类派生的MFC类完成和对话框界面的 联系
4
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 有模式对话框:对话框关闭之前,用户 无法在该程序的其它窗口中工作,如记 事本中的字体对话框。 • 无模式对话框:对话框关闭前,用户可 在其它窗口工作(但对话框在最顶端),如 记事本中的替换对话框。
MFC Programming
MFC对话框与组件 控件编程
1
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 1、对话框编程 • 2、组件和ActiveX控件的使用
2
Lab. of Marine Dynamic Simulation & Control
23
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 标准DDV (动态数据验证)
– – – – DDV_MinMaxInt(pDX,m_number,1,200); 在给控件添加成员变量时可设置改变量的大小范围 也可在DoDataExchange中修改范围 它只能简单的设置,复杂的数据有效判断需编程实 现
9
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 有模式对话框的运行过程:
– – – – – – 用户输入数据或进行其他消息处理操作 用户单击OK按钮 OnOK UpdateData(TRUE)从控件传到数据成员 DoDataExchage Cdialog::EndDialog(IDOK)
• 通用窗口的一些用法
– 窗口查找:
• FindWindow/IsChild/GetParent/GetDlgItem/ • GetDlgCtrlID/WindowFromPoint
– 可以利用重载来添加消息处理的虚函数
• • • • • • OnCreate/OnDestroy;窗口被创建/销毁时被调用 OnGetMinMaxInfo需要得到窗口尺寸时被调用 OnSize窗口改变大小后被调用 OnMove窗口被移动后时被调用 OnPaint( ); OnChar/OnKeyDown/OnKeyUp键盘字符消息 OnLButtonDown/OnRButtonDown/OnLButtonUp/On RButtonUp/OnLButtonDblClk/OnRButtonDblClk/On 19 MouseMove鼠标消息
• 无模式对话框也可由函数ShowWindow 显示和隐藏,而不直接销毁窗口:
– pDlg->ShowWindow(SW_SHOW); – pDlg->ShowWindow(SW_HIDE);
21
Lab. of Marine Dynamic Simulation & Control
MFC Programming
– 改变窗口位置
• MoveWindow/GetWindowRect/IsIconic/SetWind owPos
– 使窗口失效,印发重绘
• Invalidate/InvalidateRect
Lab. of Marine Dynamic Simulation & Control
18
MFC Programming
24
Lab. of Marine Dynamic Simulation & Control
MFC Programming
使用标准对话框
• 常用标准对话框
6
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 生成对话框类:
– ClassWizard生成对话框类派生类 – 添加数据成员,与控件进行交互操作:
• 用ClassWizard定义一个与控件相关联的成员变 量(可为一控件对象,也可为一数据量),可在构 造函数中或OnInnitDialog函数中进行初始化 • 在程序运行中创建一个MFC控件的窗口对象,使 用GetDlgItem方法为对话框的控件获取一个指向 CWnd对象的指针
• if(pDlg->m_hWnd==NULL){ • pDlg->Create(IDD_TESTDIALOG); • } • pDlg->ShowWindow(SW_SHOW);
Lab. of Marine Dynamic Simulation & Control
20
MFC Programming
22
Lab. of Marine Dynamic Simulation & Control
MFC Programming
对话框中的数据交换wenku.baidu.com
• 标准DDX (动态数据交换)
– DDX_Text(pDX,IDC_EDIT1,m_number);
• UpdateData用于保持所有DDX关联的同步
– UpdateData(TRUE):数据从控件传递给相关联 的成员变量 – UpdateData(FALSE):数据从成员变量传递给 相关联的控件
• 自定义消息:
– #define WM_GOODBYE WM_USER+5 – 手工加入消息映射
• 可以通过向视图发送用户定义的消息处处 理按钮消息。
– SendMessage(WM_GOODBYE) – PostMessage(WM_GOODBYE) – 触发由消息映射定义的消息处理函数。
• 消息是谁发送谁接收。
– 先创建对话框类实例:仅仅是一个类对象 – 调用DoModal函数
• disable原窗口,使原窗口无法接收用户输入 • 创建基于对话框模板的窗口 • 建立自己的窗口过程:可进行消息处理
– WM_INITDIALOG消息触发调用 OnInitDialog,进行一些对话框初始化工作 – CWnd::UpdateData(FALSE) – DoDataExchage
10
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 处理关于在使用对话框时Enter键和 Escape键的处理:
– 在使用对话框是你会发现当你按下Enter键 或Escape键都会退出对话框,这是因为 Enter键会引起CDialog::OnOK()的调用,而 Escape键会引起CDialog::OnCancel()的调用。 而这两个调用都会引起对话框的退出。 – 在MFC中这两个成员函数都是虚拟函数,所 以我们需要进行重载,如果我们不希望退出 对话框那么我们可以在函数中什么都不做。 如果需要进行检查则可以添加检查代码,然 后调用父类的OnOK()或OnCancel()。 11
• • • • • • CTestDialog dlg; if(dlg.DoModal( )==IDOK) { … } (注:在文件头加上对话框的头文件)
8
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 有模式对话框的运行过程:
– 接收来自控件的BN_CLICKED等各种消息: 用ClassWizard添加消息映射
7
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 工程中加入有模式对话框步骤:
– 使用对话框编辑器创建对话框资源,并用 ClassWizard生成派生对话框类,添加数据 成员和消息映射 – 特殊控件初始化:程序控制 – 在视图中编写代码,激活对话框对象
13
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 标准控件(基本控件):
– – – – 图形控件 分组框 单选按钮 横向滚动条 静态文本 按钮 组合框 纵向滚动条 编辑框 复选框 列表框
14
Lab. of Marine Dynamic Simulation & Control
MFC Programming
1、对话框编程
• • • • • 工程中加入有模式对话框 标准控件常用控件 工程中加入无模式对话框 对话框中的数据交换 使用标准对话框
3
Lab. of Marine Dynamic Simulation & Control
MFC Programming
工程中加入有模式对话框
Lab. of Marine Dynamic Simulation & Control
MFC Programming
• 在对话框中绘图:重载OnPaint函数
– – – – – – – – – void CTestDialog::OnPaint() { CPaintDC dc(this); COLORREF color=RGB(255,0,0); CPen pen(PS_SOLID,10, color); CPen* pOldPen=dc.SelectObject(&pen); dc.Rectangle(150,150,200,200); dc.SelectObject(pOldPen); }
相关文档
最新文档