Microsoft Word - ch05.doc

Size: px
Start display at page:

Download "Microsoft Word - ch05.doc"

Transcription

1 第 5 章菜单 工具栏和状态栏 教学提示 : 创建框架界面除了使用菜单 工具栏这两种常用资源之外, 还常在窗口的底部用状态栏来显示一些帮助信息和应用程序说明之类的用户界面信息 本章主要介绍 Windows 应用程序中常用的菜单 工具条和状态条的概念及其编程, 同时介绍 Windows 编程中资源的使用 对于菜单, 在本章将做详细的介绍, 包括菜单的种类 菜单的风格及其在编程中的实现方法 教学目标 : 了解菜单 工具栏和状态栏的概念, 掌握 Windows 编程中资源的使用, 会编程实现常用的菜单 工具条和状态条 5.1 资源与资源编辑器 Windows 资源用于创建程序的框架界面, 包括快捷键 (Accelerator) 位图(Bitmap) 光标 (Cursor) 对话框(Dialog) 图标(Icon) 菜单(Menu) 串表(String Table) 工具栏(Toolbar) 和版本信息 (Version) 等, 为此,Windows 资源提供了各种类型的资源编辑器 资源和资源符号资源作为一种界面元素, 可以从中获取信息并在其中执行某些操作 Visual C++ 在内部使用资源符号来标识资源 每当创建一个新的资源或资源对象时, 系统就会为其提供一个默认的资源符号名称并赋予一个整数值, 该定义被保存在 resource.h 文件中 在同一项目中, 资源符号不能重复 资源符号的命名通常用带有描述性的前缀来表示所代表的资源, 表 5-1 是 Visual C 中所提供的一些常用资源符号的前缀 表 5-1 常用资源符号前缀 资源符号前缀 IDR_ IDD_ IDC_ IDI_ IDB_ IDM_ ID_ IDC_ IDS_ IDP_ 快捷键或菜单及相关资源对话框资源光标资源图标资源位图资源菜单项命令项控件字符串表中的字符串消息框中使用的字符串 代表的资源

2 第 5 章菜单 工具栏和状态栏 资源编辑器在 Windows 环境下, 资源是独立于程序源代码的, 根据不同资源的特点,Visual C++ 提供了不同的可视化资源编辑器 创建或打开资源时, 系统将自动打开相应的编辑器 1. 创建资源用户可以通过在 Insert 菜单中选择 Resource 菜单项来创建新的资源 单击 Resource 菜单项, 弹出 Insert Resource 对话框, 如图 5.1 所示 首先在对话框的左侧选择资源类型, 然后根据具体情况, 单击右侧的不同按钮 若资源需要临时创建, 则单击 New 按钮, 在打开的相应资源编辑器中创建资源 若资源文件已经存在, 则单击 Import 按钮, 在 Import Resource 对话框中选择资源文件, 然后单击 Import 按钮 图 5.1 Insert Resource 对话框 2. 编辑资源用户可以通过项目工作区窗口的 ResourceView 视图来查看资源 在窗口中双击要查看的资源, 即可打开相应的资源编辑器 使用资源编辑器可以查看资源, 使用资源模板, 导入 导出资源以及查看 设置资源的属性 下面主要介绍图形 串表及版本信息资源编辑器, 其他资源编辑器将分别在以后的具体应用中进行介绍 (1) 图形编辑器图形编辑器主要用于绘制位图 图标 光标和工具条 双击 ResourceView 视图中的 Icon 图标资源或 Bitmap 位图资源, 都可以打开图形编辑器, 如图 5.2 所示 图 5.2 为双击图标资源后打开的图形编辑器, 从图中可以看出, 图标有 16 像素 16 像素和 32 像素 32 像素两种规格 像素图标显示在程序的控制菜单中和 Windows 任务栏上,32 像素 32 像素图标在资源管理器和 关于 对话框中显示 这两种规格的图标可以使用 Device 下拉列表框进行选择 图形编辑器的左上角是以实际大小显示的需编辑的图标, 右边是放大的图形, 用于图标的编辑 如果要修改应用程序的图标, 两种规格 97

3 98 Visual C++ 程序设计教程与上机指导 的图标应同时进行修改 选择图标 大小规格 图形工具栏 实际图形放大图形 颜色工具栏 图 5.2 图形编辑器 (2) 串表 (String Table) 编辑器运行一个 Windows 应用程序后, 当鼠标指向菜单项和工具栏按钮时, 在底部状态栏将显示所指项的有关提示信息, 串表就是这样一种资源字符串 使用串表编辑器可以对串表进行增加 删除及编辑等操作, 如图 5.3 所示 双击某项编辑串表 串表属性对话框 双击空白添加串表 图 5.3 串表编辑器注意 : 不能创建一个没有提示信息字符的串表 (3) 版本 (Version) 编辑器版本信息包括公司和产品的信息 语言 序列号 产品的操作系统 版权号和商标的声明 版本编辑器用于编辑上述信息, 如图 5.4 所示 每个应用程序有一个版本信息资源, 版本信息可帮助用户判断当前使用系统的版本号, 以避免用旧版本替换新的版本 例 5.1 编写一个单文档应用程序 Li5_1, 使用资源编辑器编辑图标 串表和版本信息 (1) 启动 Visual C++ IDE, 利用 MFC AppWizard[exe] 向导生成一个工程名为 Li5_1 的单文档应用程序 (2) 将应用的图标修改为 98

4 第 5 章菜单 工具栏和状态栏 99 打开 ResourceView 视图中的 Icon 文件夹, 双击 IDR_MAINFRAME 打开图形编辑器 用其他图形软件编辑新的图标文件, 并将其放在剪贴板上 分别选择 16 像素 16 像素和 32 像素 32 像素两种规格的图标, 将其粘贴在原有图标上, 调整其大小 图 5.4 版本编辑器 (3) 将程序运行时标题栏的信息改为 例 5.1 资源编辑器的使用 打开 ResourceView 视图中的 String Table 文件夹, 双击 String Table 打开串表编辑器 双击 IDR_MAINFRAME, 打开其属性对话框, 将 标题 内容改为 资源编辑器的使用 \n 例 5.1\nLi5_1\n\n\nLi51.Document\nLi5_1 Document (4) 在版本信息中的公司名中添加 北大出版社, 将版本号改为 1.1 打开 ResourceView 视图中的 Version 文件夹, 双击 VS_VERSION_INFO 打开版本编辑器 双击 CompanyName 项, 输入 北大出版社 同样将 FileVersion 和 ProductVersion 项的内容改为 1.1 修改 关于 对话框中显示信息, 显示更改内容, 操作方法请参考本书的有关章节 (5) 编译 链接并运行程序, 结果如图 5.5 所示 16 像素 16 像素图标新标题栏提示信息 32 像素 32 像素图标新的版本信息 图 5.5 资源编辑器的使用 99

5 100 Visual C++ 程序设计教程与上机指导 5.2 菜单的使用 菜单是 Windows 应用程序中必不可少的交互式操作界面工具之一, 它将一个应用程序的功能有效地按类组织, 并以列表的方式显示出来, 便于用户快速访问应用程序的各项功能 菜单的类型在一个 Windows 应用程序中, 常见的菜单类型有 3 种 : 主菜单 弹出菜单和快捷菜单 1. 主菜单主菜单是指出现在应用程序主窗口或最上层窗口的菜单 菜单名指出一组菜单项命令的主要功能和目标 常见的顶层菜单有 :File Edit Windows Help 等 一个菜单项是可选择或可执行的, 每一个菜单对应一个确定的功能 通常, 每个主菜单项对应有一个弹出菜单作为它的子菜单 2. 弹出菜单弹出菜单通常是指选择主菜单或一个菜单项时弹出的子菜单 用户可以定义多重嵌套的弹出式菜单, 菜单项右边的三角符号表示有子菜单存在 可以通过放置分隔线对逻辑或功能上紧密相关的菜单项分组 在标题栏的最左端, 通常都显示一个程序的小图标, 它可以激活系统菜单, 实际上它也是一个弹出式菜单 弹出式菜单的各项可以是 被选中的, 如果被选中, 将在菜单文本的最左端显示一个小的复选标记, 复选标记让用户知道从菜单中选择了哪些选项 这些选项之间可以是互斥的, 也可以是不互斥的 主菜单项不能被选中 主菜单或弹出式菜单项可以被启用 禁用或灰化, 也可以用激活或者不激活来标识 标以启用或禁用的菜单项在用户看来是一样的, 但是灰化的菜单项则使用灰色的文本来显示 3. 快捷菜单当右击某个界面对象时, 通常会弹出快捷菜单, 它出现在鼠标箭头的位置, 快速展示当前对象可用的命令功能, 免除在菜单中一一查找的麻烦 菜单组中的每个菜单项一般直接对应一个确定的功能 通常情况下, 使用 AppWizard 生成一个应用程序框架时, 定义了一个默认的菜单资源 IDR_MAINFRAME, 创建窗口时加载该资源和相应的命令处理函数 该菜单资源包括标准菜单, 例如 File 菜单中的 New 和 Open 但这个默认生成菜单资源往往不能满足实际需要, 需要用户利用菜单编辑器对其进行编辑 菜单设计一般需要经过下面两步 : (1) 使用菜单编辑器编辑菜单资源 ; (2) 使用 ClassWizard 进行消息映射, 编辑成员函数, 完成菜单所要实现的功能 100

6 第 5 章菜单 工具栏和状态栏 编辑菜单 我们可以使用菜单编辑器来编辑菜单资源 双击 ResourceView 视图中的 Menu 菜单资源, 即可打开菜单编辑器, 如图 5.6 所示 图 5.6 菜单编辑器 1. 插入新菜单项如果在当前空白菜单项位置插入, 则选定窗口中的空白菜单项后按回车键 ( 或双击空白菜单项 ), 系统弹出 Menu Item Properties 对话框, 如图 5.7 所示 图 5.7 Menu Item Properties 对话框如果要在某菜单项前插入, 选中该菜单项并按 Ins 键, 菜单编辑器将在该菜单项前插入一个空白菜单项, 然后双击该空白菜单项进行编辑 2. 属性对话框的设置如图 5.7 所示, 菜单项属性对话框用于输入菜单项的标识符 (ID) 标题(Caption) 和菜单项在状态栏上显示的提示 (Prompt) 信息, 并为该菜单项提供属性调整 对话框中各项的功能见表

7 102 Visual C++ 程序设计教程与上机指导 表 5-2 Menu Item Properties 对话框各项功能 选项 ID Caption Separator Pop-up Inactive Break Checked Grayed Prompt 功能菜单项的标识符菜单项名称, 包括热键及快捷键指明菜单项是一个水平线分隔条指明菜单项是一个弹出式子菜单指明菜单项是不活动的菜单指明菜单项是否放在新的一列指明菜单项前加上一个选中标记指明菜单项是不可用的为菜单项定义在状态栏上的提示信息 菜单项的标识符 ID 的输入方法有两种 : 从键盘直接输入 ; 或者打开属性对话框中 ID 的下拉菜单, 选取系统已经定义的 ID 在 Caption 文本框中, 输入菜单项名称, 如 新建 (&N)\tCtrl+N 其中, (&N) 表示给菜单定义的热键为 N, 字符 & 为 N 加上下划线 ; 转移字符 \t 表示使快捷键按右对齐显示 ; Ctrl+N 说明菜单的快捷键为 Ctrl+N, 此处仅起提示作用, 要真正成为快捷键还需要使用快捷键编辑器进行设置 3. 调整菜单项位置选中某菜单项将其拖至适当位置即可 4. 删除菜单项用鼠标单击菜单项或用上 下 左 右光标键选择菜单项, 然后单击 Cut 按钮或按 Del 键删除 在删除带有下拉菜单的菜单项时, 系统会弹出一个信息提示框, 提醒用户该操作将删除下拉菜单以及它所包含的全部内容 需要说明的是, 如果菜单中要使用中文, 则除了在菜单名一项中输入中文外, 还要将菜单资源的语言属性设置为中文 方法是 : 右击 ResourceView 视图中的菜单资源, IDR_MAINFRAME, 弹出快捷菜单, 选择 Properties, 打开该菜单资源的属性对话框 在 Language 下拉列表框中选择 Chinese(P.R.C.), 如图 5.8 所示 同样, 如果其他资源如对话框或字符串要使用中文, 也要将该资源的语言属性改为 Chinese(P.R.C.) 图 5.8 设置菜单项语言属性 102

8 第 5 章菜单 工具栏和状态栏 103 例 5.2 编写一个单文档应用程序 Li5_2, 在主菜单中增加一个 绘图 菜单项, 并在其中添加 图形类型 线框图 填充图 和 线框 / 填充切换 4 个菜单项 其中 图形类型 菜单项又带有 矩形 和 椭圆 两个子菜单 (1) 启动 Visual C++ IDE, 利用 MFC AppWizard[exe] 向导生成一个工程名为 Li5_2 的单文档应用程序 (2) 打开 ResourceView 视图中的 Menu 文件夹, 双击 IDR_MAINFRAME 打开菜单编辑器 双击菜单栏右侧的虚线空白菜单项, 弹出菜单项属性对话框, 在 Caption 栏中输入 绘图 (&D) 其他采用系统默认值 (3) 双击 绘图 菜单项下的虚线空白菜单项, 弹出菜单项属性对话框, 选择 Pop-up 选项, 在 Caption 栏中输入 图形类型 此时, 菜单项右侧出现一个三角形符号, 表示该菜单项还有子菜单 接着双击右侧虚线空白菜单项, 为该菜单项添加 矩形 和 椭圆 2 个子菜单 用同样的方法在 绘图 菜单项下添加 线框图 填充图 和 线框 / 填充切换 3 个菜单项, 并在 填充图 和 线框 / 填充切换 菜单项之间添加一条分隔线 各菜单项的属性见表 5-3 表 5-3 菜单项属性设置 ID 名称提示 - 绘图 (&D) - - 图形类型 - ID_RECTANGLE 矩形 (&R)\tCtrl+R 在视图中绘制矩形 \n 矩形 ID_ELLIPSE 椭圆 (&L)\tCtrl+L 在视图中绘制椭圆 \n 椭圆 ID_LINEFRAME 线框图 (&X)\tCtrl+X 图形以线框模式显示 \n 线框模式 ID_FILLDRAWING 填充图 (&T)\tCtrl+T 图形以填充模式显示 \n 填充模式 ID_TRANSFORM 线框 / 填充切换 (&Q)\tCtrl+Q 切换成另一种显示模式 (4) 为菜单项添加快捷键 打开 ResourceView 视图中的 Accelerator 文件夹, 双击 IDR_MAINFRAME 打开快捷键编辑器 双击编辑器底部的空白框, 打开 Accel Properties 对话框, 在 ID 栏下拉列表中选择 ID_RECTANGLE, 在编辑框中输入 R, 右边单选按钮接受默认值, 如图 5.9 所示 关闭对话框 用同样的方法为其他菜单项定义快捷键 图 5.9 快捷键的定义 103

9 104 Visual C++ 程序设计教程与上机指导 (5) 编译 链接并运行程序, 结果如图 5.10 所示 建立消息映射 图 5.10 程序 Li5_2 运行结果 在例 5.2 中仅添加了菜单, 并没有实现菜单的功能, 即没有对应的命令处理函数与菜单项对应, 因此, 添加的菜单项是灰色的, 即处于当前不可用状态 添加新的菜单项后, 还应该为菜单项指定一个处理函数, 即利用 ClassWizard 类向导添加一个消息处理函数 例 5.3 为例 5.2 的程序 Li5_2 增加的菜单项添加消息处理函数 (1) 启动 Visual C++ IDE, 打开例 5.2 中所创建的工程 Li5_2 (2) 单击 View ClassWizard 菜单项或按 Ctrl+W 键启动 ClassWizard 类向导 (3) 为 矩形 及 椭圆 菜单项添加消息处理函数 在 ClassWizard 对话框的 Class name 栏下拉列表中选择 CLi5_2View, 在 Object IDs 栏中选择 ID_RECTANGLE, 在 Messages 栏选择 COMMAND, 单击 Add Function 按钮, 接受系统默认函数名 单击 Edit Code 按钮, 为消息处理函数添加如下代码 void CLi5_2View::OnRectangle() // TODO: Add your command handler code here CClientDC dc(this); dc.rectangle(10,10,200,100);// 绘制矩形 用同样的方法为 椭圆 菜单项添加消息处理函数, 并编写如下代码 void CLi5_2View::OnEllipse() // TODO: Add your command handler code here CClientDC dc(this); dc.ellipse(250,100,450,250); 104

10 第 5 章菜单 工具栏和状态栏 105 (4) 为 线框图 填充图 和 线框 / 填充切换 3 个菜单项添加消息处理函数 方法与步骤 (3) 相同 不同的是, 在 ClassWizard 对话框的 Class name 栏下拉列表中选择 CMainFrame (5) 编译 链接并运行程序, 结果如图 5.11 所示 菜单的有效控制 图 5.11 例 5.3 程序运行结果 一般情况下, 菜单项都不止一种状态, 我们经常需要根据应用的内部状态来对菜单项作相应的改变 例如, 在我们没有选择任何内容时,Edit 菜单下的 Copy Cut 等菜单项是无效的 ( 灰色显示 ) 有时, 我们还会看到, 在菜单项旁边可能还会有检查标记, 表示它是选中的还是不选中的 比如, 在 Word 的视图菜单项下, 当用户选用 网格线 或 标尺 时, 相应菜单项前会出现一个 MFC 通过消息映射机制和 CCmdUI 类更新菜单项的显示 在类向导 ClassWizard 的 Message Map 标签中, 如果我们选择一个菜单 ID, 在 Messages 列表框中就会出现以下两项 : COMMAND UPDATE_COMMAND_UI 其中 UPDATE_COMMAND_UI 是更新命令用户接口消息, 专门用于处理菜单项和工具条按钮的更新 每一个菜单命令都对应于一个更新命令用户接口消息, 可以用更新命令用户接口消息编写消息处理函数来处理用户接口 ( 包括菜单和工具条按钮 ) 的更新 如果一条命令有多个用户接口对象 ( 比如一个菜单项和一个工具条按钮 ), 两者都被发送给同一个处理函数 这样, 对于所有等价的用户接口对象来说, 可以把用户接口更新代码封装在同一地方 当框架向处理函数发送更新命令时, 它传递给处理函数一个指向 CCmdUI 对象的指针, 105

11 106 Visual C++ 程序设计教程与上机指导 这个对象包含了相应菜单项或工具栏按钮的指针 更新处理函数利用该指针调用菜单项或工具栏的命令接口函数来更新用户接口对象 ( 包括灰化 使能 选中菜单项和工具栏按钮等 ) CCmdUI 提供的更新菜单项显示的成员函数见表 5-4 表 5-4 CCmdUI 的成员函数 Enable SetCheck SetRadio SetText 成员函数 功能设置菜单项是否有效增加或清除 标记增加或清除圆点标记改变菜单显示文本 例 5.4 为例 5.3 的程序 Li5_2 添加更新用户界面的消息处理函数, 完成以下功能 : 当程序启动时, 菜单项 线框图 填充图 和 线框 / 填充切换 处于不可用状态 ; 当用户单击菜单项 矩形 或者 椭圆 时, 菜单项变为可用 ; 当用户单击 线框图 或者 填充图 菜单项时, 在菜单项前显示 标记 (1) 启动 Visual C++ IDE, 打开例 5.3 中的工程 Li5_2 (2) 为 CMainFrame 类添加 3 个类型为 BOOL 属性为 public 的成员变量 m_line m_fill 和 m_trans, 并在构造函数 CMainFrame( ) 中将它们初始化为 false CMainFrame::CMainFrame() // TODO: add member initialization code here // 初始化成员变量 m_line=false; m_fill=false; m_trans=false; (3) 单击 View ClassWizard 菜单项或按 Ctrl+W 键启动 ClassWizard 类向导 (4) 为 线框图 填充图 和 线框 / 填充切换 菜单项添加更新消息处理函数, 使它们在程序启动时均处于不可用状态 在 ClassWizard 对话框的 Class name 栏下拉列表中选择 CMainFrame, 在 Object IDs 栏中选择 ID_ LINEFRAME, 在 Messages 栏选择 UPDATE_COMMAND_UI, 单击 Add Function 按钮, 接受系统默认函数名 单击 Edit Code 按钮, 为更新消息处理函数添加如下代码 void CMainFrame::OnUpdateLineframe(CCmdUI* pcmdui) // TODO: Add your command update UI handler code here pcmdui->enable(m_line); 用同样的方法为 填充图 和 线框 / 填充切换 菜单项添加更新消息处理函数, 并在相应的处理函数中添加代码 pcmdui->enable(m_fill); pcmdui->enable(m_trans); 106

12 第 5 章菜单 工具栏和状态栏 107 (5) 实现用户单击菜单项 矩形 或者 椭圆 时, 线框图 填充图 和 线框 / 填充切换 菜单项变为可用的功能 展开 ClassView 视图中的类 CLi5_2View, 双击打开 矩形 和 椭圆 菜单项的消息处理函数 OnRectangle( ) 及 OnEllipse( ), 在函数中添加如下代码 void CLi5_2View::OnRectangle() // TODO: Add your command handler code here // 获得框架窗口指针 CMainFrame *pmainframe=(cmainframe*)afxgetmainwnd(); // 将 CMainFrame 类的成员变量 m_line m_fill 和 m_trans 的值设置为 true pmainframe->m_line=true; pmainframe->m_fill=true; pmainframe->m_trans=true; CClientDC dc(this); dc.rectangle(10,10,200,100); (6) 为菜单项 线框图 和 填充图 设置单击显示标记 首先在 CMainFrame 类中添加两个类型为 BOOL 属性为 public 的成员变量 m_check1 和 m_check2, 并在构造函数 CMainFrame( ) 中将它们初始化为 false 展开 ClassView 视图中的类 CMainFrame, 双击打开 线框图 和 填充图 菜单项的消息处理函数 OnLineframe( ) 和 OnFilldrawing( ), 在这两个函数中分别添加如下代码 void CMainFrame::OnLineframe() // TODO: Add your command handler code here m_check1=true; m_check2=false; void CMainFrame::OnFilldrawing() // TODO: Add your command handler code here m_check1=false; m_check2=true; 展开 ClassView 视图中的类 CMainFrame, 双击打开 线框图 和 填充图 菜单项的更新消息处理函数 OnUpdateLineframe( ) 及 OnUpdateFilldrawing( ), 在函数中分别添加如下代码 pcmdui->setcheck(m_check1); pcmdui->setcheck(m_check2); (7) 编译 链接并运行程序, 结果如图 5.12 所示 图中显示的是用户先单击 矩形, 接着单击 线框图 菜单项后的效果 107

13 108 Visual C++ 程序设计教程与上机指导 图 5.12 菜单有效控制运行效果图 使用快捷菜单菜单分为两类, 除了前述的依附于框架窗口的一般菜单之外, 另一类是浮动的弹出式菜单, 也称快捷菜单或上下文菜单 当用户右击鼠标, 弹出式菜单就会出现在光标所在位置 在 Visual C++ IDE 中有大量这样的菜单 比如, 在项目工作区中右击时会弹出一个快捷菜单, 让用户选择 Docking View( 停泊视图 ) Hide( 隐藏 ) 和 Properties( 属性 ) 等操作 为应用程序创建快捷菜单主要有以下两种方法 1. 使用 Component Gallery 创建快捷菜单 Component Gallery( 组件画廊 ) 是一个组件库, 它保存着可以共享或重用的代码 这些代码包括由 Visual C++ 自带的组件和从用户工程中增加到 Gallery 中去的用户自定义组件 下面通过一个实例来介绍如何使用 Component Gallery 创建快捷菜单 例 5.5 为例 5.4 中的应用程序 Li5_2 增加一个快捷菜单 程序运行后, 用户在视图窗口中右击, 弹出一个快捷菜单, 显示主菜单 绘图 下的所有菜单项 (1) 启动 Visual C++ IDE, 打开例 5.4 中的工程 Li5_2 (2) 选择 Project Add To Project 菜单项, 单击 Components and Controls 子菜单项, 弹出 Components and Controls Gallery 对话框, 如图 5.13 所示 选择对话框中的 Visual C++ Components 文件夹, 单击 Insert 按钮, 打开该文件夹的内容, 如图 5.14 所示 (3) 选择对话框列表中的 Pop-up Menu 项, 单击 Insert 按钮, 在弹出的提示对话框中单击 OK 按钮, 弹出 Pop-up Menu 对话框, 如图 5.15 所示 在 Pop-up Menu 对话框的 Add pop-up menu to: 下拉列表中选择 CLi5_2View, 即将创建的快捷菜单与视图类相关联 接受默认的菜单 ID 值 单击 OK 按钮, 插入快捷菜单 108

14 第 5 章菜单 工具栏和状态栏 109 图 5.13 Components and Controls Gallery 对话框 图 5.14 Visual C++ Components 列表 图 5.15 Pop-up Menu 对话框 109

15 110 Visual C++ 程序设计教程与上机指导 (4) 编辑快捷菜单 展开 ResourceView 视图中的 Menu 文件夹, 双击新的菜单资源 CG_IDR_POPUP_LI5_2_VIEW, 打开菜单资源编辑器, 删除菜单 POPUP 下的默认菜单项 打开 IDR_MAINFRAME 菜单资源, 将主菜单 绘图 的所有下拉菜单项复制到剪贴板上 返回到新菜单资源编辑器, 将复制的内容粘贴到新的快捷菜单上 这样快捷菜单就具有了与 绘图 主菜单完全相同的功能 (5) 为快捷菜单连接一个类 将鼠标移到新的快捷菜单上, 右击选择 ClassWizard 菜单项, 打开 ClassWizard 窗口, 并弹出 Adding a Class 对话框, 如图 5.16 所示 图 5.16 Adding a Class 对话框选择 Select an existing class 项, 单击 OK 按钮, 在弹出的 Select Class 对话框类列表中选择 CLi5_2View, 单击 Select 按钮 (6) 编译 链接并运行程序, 结果如图 5.17 所示 图 5.17 程序运行结果 2. 使用 TrackPopupMenu( ) 函数创建快捷菜单使用菜单资源编辑器和 CMenu::TrackPopupMenu( ) 函数来创建右键快捷菜单 CMenu::TrackPopupMenu 函数的原型为 : 110

16 第 5 章菜单 工具栏和状态栏 111 BOOL TrackPopupMenu(UINT nflags,int x,int y,cwnd* pwnd,lpcrect lprect=null); 该函数的功能是显示一个右键快捷菜单 其中,nflags 表示屏幕位置标志, 它的含义见表 5-5 x y 分别表示菜单的水平坐标和顶端的垂直坐标 ;pwnd 表示弹出菜单的窗口, 包括全部的 WM_COMMAND 消息 ;lprect 表示一个矩形域, 当单击这个矩形域时菜单不消失 表 5-5 参数 nflags 的含义 nflags TPM_ CENTERALIGN TPM_ LEFTALIGN TPM_ RIGHTALIGN TPM_ LEFT'BUTTON TPM_RIGHTBUTTON 含义菜单的水平中心位置由 x 确定菜单的左边位置由 x 确定菜单的右边位置由 x 确定单击鼠标左键时弹出菜单单击鼠标右键时弹出菜单 例 5.6 使用 TrackPopupMenu( ) 函数创建例 5.5 中的快捷菜单 (1) 启动 Visual C++ IDE, 打开例 5.4 中的工程 Li5_2 (2) 选择 Insert Resource 菜单项, 向应用程序中添加一个新的菜单资源, 并将新菜单的 ID 改为 IDR_POPUP 双击 ResourceView 视图中 Menu 文件夹下的 IDR_MAINFRAME, 打开标准菜单编辑器, 单击 绘图 菜单项并复制 双击新菜单资源 IDR_POPUP, 打开快捷菜单编辑器, 单击空白菜单项并粘贴 (3) 用例 5.5 中步骤 (5) 的方法为快捷菜单连接类 CMainFrame (4) 加载并显示快捷菜单 打开 ClassWizard 对话框, 在 Class name 栏和 Object IDs 下拉列表中均选择 CMainFrame, 在 Messages 中选择 WM_CONTEXTMENU, 单击 Add Function 按钮, 再单击 Edit Code, 在打开的 WM_CONTEXTMENU 消息处理函数中添加如下代码 void CMainFrame::OnContextMenu(CWnd* pwnd, CPoint point) // TODO: Add your message handler code here CMenu menu; // 加载快捷菜单 menu.loadmenu(idr_popup); // 显示快捷菜单 menu.getsubmenu(0)->trackpopupmenu(tpm_leftalign TPM_RIGHTBUTTON, point.x,point.y,this); (5) 编译 链接并运行程序, 得到与例 5.5 中相同的效果 创建动态菜单 用户可以动态地创建菜单, 动态创建菜单可以减少内存空间占用, 节省系统资源 动态创建菜单分为以下 3 个步骤 111

17 112 Visual C++ 程序设计教程与上机指导 (1) 利用 CreateMenu( ) 函数创建一个空的弹出式菜单, 该函数的原型为 : HMENU CreateMenu() 该函数没有参数, 它的返回值是一个菜单句柄 (2) 调用 AppendMenu( ) 或 InsertMenu( ) 函数在菜单中加入菜单项 这两个函数的用法较相似, 只是 AppendMenu( ) 函数在菜单的尾部增加菜单项, 而 InsertMenu( ) 函数是将菜单项插入菜单的某一指定位置 AppendMenu( ) 函数的原型为 : AppendMenu( HMENU hmenu, UINT uflags, UINT_PTR uidnewitem, LPCTSTR lpnewitem ); 其中,hMenu 是菜单句柄,uFlags 为新加入菜单项的属性,uIDNewItem 通常情况下是插入项的 ID 值, 如果加入的是一个弹出式菜单, 则该参数为弹出式菜单的句柄 lpnewitem 的值取决于 uflags 参数的取值, 般情况下它是新加入菜单项的名称, 假如 uflags 的值为 MF_BITMAP, 则该参数包含一个位图句柄 InSertMenu( ) 函数的原型为 : BOOL InsertMenu( HMENU hmenu, UINT uposition, UINT uflags, UINT_PTR uidnewitem, LPCTSTR lpnewitem ); 其中参数 uposition 由参数 uflags 的值确定 如果 uflags 为 MF_BYCOMMAND, 则 uposifion 是插入位置的下一个菜单项的 ID 值 ; 如果 uflags 为 MF_BYPOSION, 则 uposition 为插入的位置号, 即以菜单中第一个菜单项位置号为 0 的顺序号 其余参数与 AppendMenu( ) 函数相同 (3) 调用函数 SetMenu( ) 加载动态菜单 菜单必须加载才能被使用 动态菜单的加载是通过调用 SetMenu( ) 函数来实现的 SetMenu( ) 函数的原型为 : BOOL SetMenu( HWND hwnd, HMENU hmenu ); 其中参数 hwnd 和 hmenu 分别表示窗口句柄与菜单句柄 调用函数 DeleteMenu( ) 删除菜单项 应用程序可以调用函数 DeleteMenu( ) 删除菜单项, 该函数的原型为 : BOOL DeleteMenu( HMENU hmenu, 112

18 第 5 章菜单 工具栏和状态栏 113 UINT uposition, UINT uflags, ); 其参数与函数 InsertMenu( ) 的参数含义相同 例 5.7 为例 5.6 中的应用程序 Li5_2 创建 画笔 和 画刷 两个动态菜单 程序运行后, 用户首先单击 绘图 图形类型 菜单项选择图形的类型, 然后选择图形的显示模式 ( 线框图或填充图 ) 当用户单击 线框图 菜单项时, 在主菜单中添加动态菜单 画笔, 则可用不同的线型绘制图形 ; 当用户单击 填充图 菜单项时, 在主菜单中添加动态菜单 画刷, 此时则可用不同的阴影样式绘制图形 (1) 启动 Visual C++ IDE, 打开例 5.6 中的工程 Li5_2 (2) 为 CMainFrame 类添加两个类型为 BOOL 属性为 public 的成员变量 m_rect 和 m_ellip, 用来记录用户所选择图形的类型 在构造函数 CMainFrame( ) 中将它们初始化 m_rect=true; m_ellip=false; 为了简化参数的传递过程, 我们调整一下菜单项 矩形 和 椭圆 消息处理函数的位置 首先删除 CLi5_2View 类中的消息处理函数 打开 ClassWizard 对话框, 单击 Message Maps 标签, 在 Class name 栏中选择 CLi5_2View, 在 Object IDs 下拉列表中分别选择 ID_RECTANGLE 和 ID_ELLIPSE, 在 Messages 栏中选择 COMMAND, 单击 Delete Function 按钮, 关闭 ClassWizard 对话框, 在代码编辑器中手工删除这两个函数的函数体 在 CMainFrame 类中重新建立消息映射 在 ClassWizard 对话框的 Message Maps 选项卡中选择 CMainFrame 类, 添加消息处理函数 在函数中添加如下代码 void CMainFrame::OnRectangle() // TODO: Add your command handler code here m_line=true; m_fill=true; m_trans=true; m_rect=true; m_ellip=false; 在函数 OnEllipse( ) 中先添加与上述相同代码, 然后作如下修改 m_rect=false; m_ellip=true; (3) 打开菜单项 线框图 的消息处理函数 OnLineframe( ), 并添加如下代码, 创建一个带有 实线 和 虚线 两个菜单项的动态菜单 画笔 void CMainFrame::OnLineframe() // TODO: Add your command handler code here m_check1=true; m_check2=false; 113

19 114 Visual C++ 程序设计教程与上机指导 // 定义两个菜单句柄 HMENU hmenu,hpopmenu; // 获取窗口指针 CWnd *pmainframe=afxgetmainwnd(); // 获取主菜单指针 CMenu *ptopmenu=pmainframe->getmenu(); // 删除以前建立的动态菜单 ptopmenu->deletemenu(5,mf_byposition); // 获取主菜单句柄 hmenu=ptopmenu->m_hmenu; // 创建一个动态菜单 hpopmenu=createmenu(); // 动态菜单名称为 画笔 AppendMenu(hmenu,MF_POPUP,UINT(hPopmenu)," 画笔 (&P)"); // 在 画笔 菜单项下添加 实线 和 虚线 两个菜单项 AppendMenu(hPopmenu,MF_STRING,WM_USER+1," 实线 "); AppendMenu(hPopmenu,MF_STRING,WM_USER+2," 虚线 "); // 重新显示菜单 SetMenu(pTopMenu); (4) 同样, 在菜单项 填充图 的消息处理函数 OnFilldrawing( ) 中创建一个带有 水平阴影 和 垂直阴影 两个菜单项的动态菜单 画刷 代码与上一步基本相似, 不同的是 : AppendMenu(hmenu,MF_POPUP,UINT(hPopmenu)," 画刷 (&B)"); AppendMenu(hPopmenu,MF_STRING,WM_USER+3," 水平阴影 "); AppendMenu(hPopmenu,MF_STRING,WM_USER+4," 垂直阴影 "); (5) 为动态菜单项添加消息处理函数 为了响应动态菜单的消息, 需要重载 CMainFrame 类的 OnCmdMsg( ) 函数 打开 ClassWizard 选项卡, 单击 Message Maps 选项卡, 在 Class name 栏和 Object IDs 下拉列表中均选择 CMainFrame, 在 Messages 栏中选择 OnCmdMsg, 单击 Add Function 按钮, 再单击 Edit Code, 在函数中添加如下代码 BOOL CMainFrame::OnCmdMsg(UINT nid, int ncode, void* pextra, AFX_CMDHANDLERINFO* phandlerinfo) // TODO: Add your specialized code here and/or call the base class if(phandlerinfo==null) for(int i=1;i<5;i++) if(nid==(uint)(wm_user+i)) if(ncode==cn_command) DoSelectMenu(i); else if(ncode==cn_update_command_ui) DoUpdateSelectMenu(i,(CCmdUI*)pExtra); return true; 114

20 第 5 章菜单 工具栏和状态栏 115 return CFrameWnd::OnCmdMsg(nID, ncode, pextra, phandlerinfo); 在 CMainFrame 类中增加两个函数 :void DoSelectMenu(int i) 和 void DoUpdateSelect Menu(int i,(ccmdui*)pextra) 前一个函数的功能是选取动态菜单项, 后一个的功能为更新菜单项的状态 在函数中添加如下代码 void CMainFrame::DoSelectMenu(int i) CPen NewPen,*OldPen; CBrush NewBrush,*OldBrush; CClientDC dc(this); switch(i) case 1: NewPen.CreatePen(PS_SOLID,2,RGB(255,0,0)); OldPen=dc.SelectObject(&NewPen); if(m_rect) dc.rectangle(100,100,350,200); else dc.ellipse(100,100,350,200); break; case 2: NewPen.CreatePen(PS_DASH,1,RGB(255,0,0)); OldPen=dc.SelectObject(&NewPen); if(m_rect) dc.rectangle(100,100,350,200); else dc.ellipse(100,100,350,200); break; case 3: NewBrush.CreateHatchBrush(HS_HORIZONTAL,RGB(255,0,0)); OldBrush=dc.SelectObject(&NewBrush); if(m_rect) dc.rectangle(100,100,350,200); else dc.ellipse(100,100,350,200); break; case 4: NewBrush.CreateHatchBrush(HS_VERTICAL,RGB(255,0,0)); OldBrush=dc.SelectObject(&NewBrush); if(m_rect) dc.rectangle(100,100,350,200); else dc.ellipse(100,100,350,200); break; if(i==1 i==2) dc.selectobject(oldpen); else 115

21 116 Visual C++ 程序设计教程与上机指导 dc.selectobject(oldbrush); void CMainFrame::DoUpdateSelectMenu(int i, CCmdUI *pcmdui) pcmdui->enable(true); (6) 编译 链接并运行程序 首先单击 绘图 图形类型 菜单项的 椭圆 子菜单, 选择椭圆图形, 然后单击 填充图 菜单项, 选择填充模式 此时, 主菜单中动态增加 画刷 菜单项, 单击 画刷 水平阴影 菜单项, 绘制椭圆填充图形, 如图 5.18 所示 图 5.18 动态菜单运行实例 创建基于对话框的菜单从第 2 章可知, 利用 MFC AppWizard[exe] 向导工具可以生成基于对话框的应用程序 启动 Visual C++ IDE, 单击 File 菜单下的 New 菜单项, 在弹出的对话框中选择 MFC AppWizard[exe], 输入工程名及存储路径后单击 OK 按钮 在弹出的 MFC AppWizard-step 1 对话框中选择 Dialog based 单选按钮, 其他设置接受系统默认值 单击 Finish 按钮, 生成一个基于对话框的应用程序框架 编译 链接并运行, 结果如图 5.19 所示 从图 5.19 可以看出, 基于对话框的应用程序在运行时并没有菜单栏 下面我们通过实例来讨论如何给它创建一个菜单 例 5.8 编写一个基于对话框的应用程序 Li5_8, 为该应用程序添加一个菜单 菜单包括 文件 编辑 视图 和 帮助 4 个主菜单项 (1) 利用 MFC AppWizard[exe] 向导工具, 生成基于对话框的应用程序 Li5_8 框架 116

22 第 5 章菜单 工具栏和状态栏 117 图 5.19 基于对话框应用程序界面 (2) 展开 ResourceView 视图中的 Dialog 文件夹, 双击 IDD_LI5_8_DIALOG 对话框资源, 打开对话框资源编辑器 分别单击命令按钮 确定 取消 及静态文本 TODO: 在这里设置对话控制, 按 Delete 键将其删除 (3) 单击 Insert Resource 菜单项, 打开 Insert Resource 对话框, 插入一个菜单资源 系统默认新增菜单的默认 ID 为 ID_MENU1 (4) 双击 ResourceView 视图中的 ID_MENU1 菜单资源, 打开菜单编辑器 为该菜单添加 文件 编辑 视图 和 帮助 4 个菜单项 (5) 右击菜单编辑器中的 ID_MENU1 菜单, 在弹出的快捷菜单中单击 ClassWizard, 打开 ClassWizard 对话框, 此时, 弹出一个 Adding a Class 对话框, 选择 Select an existing class, 单击 OK 按钮 在随后弹出的 Select Class 对话框中选择 L5_8Dlg, 单击 Select 按钮关闭对话框 (6) 返回到 ResourceView 视图, 重新打开 Dialog 文件下的 IDD_LI5_8_DIALOG 对话框资源编辑器 在对话框的任何一个空白处右击, 然后在弹出的快捷菜单中单击 Properties 菜单项, 打开属性设置对话框, 如图 5.20 所示 在 Menu 栏的下拉列表中选择 IDR_MENU1, 将菜单和应用程序的主窗口连接起来 图 5.20 对话框属性设置 (7) 编译 链接并运行程序, 结果如图 5.21 所示 117

23 118 Visual C++ 程序设计教程与上机指导 图 5.21 基于对话框的菜单 5.3 工具栏的使用 菜单是用户选择可用命令的一个最常用 也是最重要的手段 然而, 在有些情况下, 使用工具栏可以更快捷 更有效地实现某些操作, 但应尽量使工具栏的命令 ID 与菜单和快捷键的命令 ID 同步 在 MFC 中, 工具栏的功能由类 CToolBar 实现 工具栏资源和工具栏类 CToolBar 是工具栏的两个要素 创建工具栏的基本步骤是 : 创建工具栏资源 ; 构建一个 CToolBar 对象 ; 调用 CToolBar::Create( ) 或 CreateEx( ) 函数创建工具栏窗口 ; 调用 CToolBar::LoadToolBar 载入工具栏资源 使用默认配置时,AppWizard 会自动创建一个工具栏 这个工具栏包含一些常用按钮, 如打开文件 存盘 打印等 用户可以修改这个工具栏, 去掉无用的按钮, 加入自己需要的按钮 如果用户需要创建两个以上的工具栏, 则不能完全依赖 AppWizard, 需要自己手工创建 编辑工具栏使用工具栏编辑器来编辑工具栏资源 双击 ResourceView 视图中的 Toolbar 工具栏资源, 即可打开工具栏编辑器, 如图 5.22 所示 1. 添加按钮双击工具条上的空白按钮或单击空白按钮后, 选择 View Properties 菜单项, 弹出如图 5.23 所示的 Toolbar Button Properties 属性对话框, 在此对话框中编辑按钮的标识符 宽度与高度值 118

24 第 5 章菜单 工具栏和状态栏 119 图 5.22 工具栏编辑器 图 5.23 Toolbar Button Properties 属性对话框 2. 删除按钮将按钮拖出工具栏外, 即可删除该按钮 3. 编辑按钮位图设置按钮位图有以下两种方法 利用绘图工具与调色板直接进行绘制 先利用专用绘图软件制作, 然后粘贴到按钮上 建立消息映射通常, 我们只需让一个按钮的 ID 值与同样功能菜单项的 ID 值相同即可 如果按钮没有对应菜单项, 则必须利用 ClassWizard 类向导添加一个消息处理函数 例 5.9 编写一个单文档应用程序 Li5_9 删除默认工具栏上的 打印设置 按钮, 并在 帮助 按钮前添加 上一页 和 下一页 2 个按钮, 当用户单击这两个按钮后, 视图中分别显示文本 这是 上一页 按钮! 和 这是 下一页 按钮! (1) 启动 Visual C++ IDE, 使用 MFC AppWizard[exe] 向导创建一个单文档应用程序 Li5_9 选择项目工作区中的 ResourceView 视图, 展开 Toolbar 文件夹, 双击 IDR_MAINFRAME 工具栏资源, 打开工具栏资源编辑器 119

25 120 Visual C++ 程序设计教程与上机指导 (2) 单击工具栏上代表 打印设置 的打印机图标按钮, 将其拖出工具栏外, 删除该按钮 (3) 用鼠标将工具栏最后的空白框拖至 帮助 按钮前, 用绘图工具及调色板制作 上一页 按钮 双击工具栏中刚绘制的新按钮, 打开其属性设置对话框, 设置 ID 为 ID_PREV, 高度和宽度均为 20 用同样的方法定义一个 下一页 按钮, 设置其 ID 为 ID_NEXT (4) 为两个新按钮添加消息处理函数 由于新按钮没有与之对应的菜单项, 因此, 需利用 ClassWizard 类向导给它们添加消息处理函数 打开 ClassWizard 对话框, 选择 Message Maps 选项卡, 在 Class name 栏中选择 CLi5_9View, 在 Object IDs 下拉列表中选择 ID_PREV, 在 Messages 栏中选择 COMMAND, 单击 Add Function 按钮, 再单击 Edit Code, 在函数中添加代码 void CLi5_9View::OnPrec() // TODO: Add your command handler code here CClientDC dc(this); dc.textout(50,50," 这是 上一页 按钮!"); 用同样的方法为 下一页 按钮添加消息处理函数 OnNext( ), 将输出的文本改为 这是 下一页 按钮! (5) 编译 链接并运行程序 单击 上一页 按钮, 结果如图 5.24 所示 自定义工具栏的操作 图 5.24 工具栏的编辑 向导生成的标准工具栏的 ID 值为 IDR_MAINFRAME MFC 应用程序框架在类 CMainFrame 中定义了一个工具栏类 CToolBar 的对象 m_wndtoolbar, 通过在 CMainFrame::OnCreate( ) 成员函数中调用 CToolBar::CreateEx( ) 函数以创建工具栏 如果程序员要改变工具栏的默认风格或外观, 可以修改函数 CreateEx( ) 的调用参数 对一些功能 120

26 第 5 章菜单 工具栏和状态栏 121 复杂的应用程序, 需要创建多个不同的工具栏 要生成工具栏, 首先必须添加工具栏资源, 然后参照 MFC 应用程序框架添加工具栏的方法, 构造一个 CToolBar 类的对象, 调用 CToolBar::Create( ) 或 CreateEx( ) 函数创建工具栏窗口, 最后调用 CToolBar::LoadToolBar( ) 函数载入工具栏资源 除这些基本步骤之外, 还可以调用其他相关函数从而进一步改善工具栏 1. 创建工具栏窗口 调用 CToolBar::Create( ) 或 CreateEx( ) 函数创建并初始化工具栏窗口对象 若创建成功, 函数返回 TRUE, 否则返回 FALSE 函数的原型为 : BOOL Create( CWnd* pparentwnd, DWORD dwstyle=ws_child WS_VISIBLE CBRS_TOP, UINT nid=afx_idw_toolbar ); BOOL CreateEx( CWnd* pparentwnd, DWORD dwctrlstyle= TBSTYLE_FLAT, DWORD dwstyle=ws_child WS_VISIBLE CBRS_ALIGN_TOP, CRect rcborders=crect(0,0,0,0), UINT nid=afx_idw_toolbar ); 其中, 参数 pparentwnd 为指向工具栏所在父窗口的指针,dwStyle 为工具栏的风格, 其取值为表 5-6 中参数的组合,nID 表示工具栏窗口的 ID 号 表 5-6 工具栏的风格 风格 WS_VISIBLE CBRS_BOTTOM CBRS_FLYBY CBRS_NOALIGN CBRS_TOOLTIPS CBRS_TOP CBRS_SIZE_DYNAMIC 含义 设置工具栏窗口初始可见窗口初始化时将工具栏放到窗口底部鼠标箭头在按钮上暂停时, 显示工具栏按钮提示防止工具栏在其父窗口大小改变时被复位鼠标光标在按钮上暂停时, 显示工具栏提示窗口初始化时将工具栏放在窗口顶部工具栏的大小可变 2. 装载工具栏资源 调用 LoadToolBar( ) 函数装载工具栏资源 用 Create( ) 或者 CreateEx( ) 函数创建工具栏, 其实只是获得了一个窗口句柄, 工具栏窗口中位图按钮的加载是靠 LoadToolBar( ) 函数来完成的 若加载成功, 将返回 TRUE, 否则返回 FALSE 该函数原型为 : 或 BOOL LoadToolBar(LPCTSTR lpszresourcename); BOOL LoadToolBar(UINT nidresource); 其中, 参数 lpszresourcename 为字符串形式定义的资源,nIDResource 为整型形式定义的资源 121

27 122 Visual C++ 程序设计教程与上机指导 3. 设置工具栏风格如果在调用初始化函数 CToolBar::Create( ) 或者 CreateEx( ) 时设置的工具栏风格不满足需要, 可以再用 SetBarStyle( ) 函数重新进行设置 该函数只带一个参数, 表示工具栏的风格, 其取值为表 5-6 中参数的组合 4. 设置工具栏停靠特性设置工具栏停靠特性, 需要调用 EnableDocking( ) 函数 既要调用 CControlBar:: EnableDocking( ) 函数设置工具栏的停靠特性, 还要调用框架类的成员函数 EnableDocking( ) 函数来设置框架窗口以允许它的子窗口控制栏可以以何种方式停靠 不管一个框架窗口中有多少个子窗口控制栏, 该函数只需调用一次 函数原型如下 : void EnableDocking(DWORD dwstyle); 其中, 参数 dwstyle 为工具栏停靠风格, 其值可以使用表 5-7 所示参数的组合来指定 表 5-7 工具栏停靠风格 风格 CBRS_ALIGN_TOP CBRS_ALIGN_BOTTOM CBRS_ALIGN_LEFT CBRS_ALIGN_RIGHT CBRS_ALIGN_ANY CBRS_FLOAT_ MULTI 含义 工具栏可以停靠在客户区顶端工具栏可以停靠在客户区底端工具栏可以停靠在客户区左端工具栏可以停靠在客户区右端工具栏可以停靠在客户区任意位置允许在一个窗口内存在多个可移动工具栏, 对 CFrame 不可用 5. 设置工具栏的初始停靠位置 通过调用 CFrameWnd::DockControlBar( ) 函数定位一个工具栏的初始停靠位置 函数的原型为 : void DockControlBar ( CControlBar *pbar, UINT ndockbarid=0, LPCRECT lprect=null ); 其中参数 pbar 为需停靠工具栏的指针,nDockBarID 指定工具栏在客户区中的停靠位置, 其值见表 5-8 参数 lprect 指定在无客户区时工具栏的停靠位置 表 5-8 工具栏停靠位置 位置标志 0 AFX_IDW_DOCKBAR_TOP AFX_IDW_DOCKBAR_BOTTOM AFX_IDW_DOCKBAR_LEFT AFX_IDW_DOCKBAR_RIGHT 含义停靠在客户区的任意位置停靠在客户区的顶端停靠在客户区的底端停靠在客户区的左端停靠在客户区的右端 122

28 第 5 章菜单 工具栏和状态栏 移动工具栏 调用 CFrameWnd::FloatControlBar( ) 函数来移动 定位一个工具栏 该函数的原型为 : CFrameWnd* FloatControlBar ( CControlBar *pbar, Cpoint point, DWORD dwstyle=cbrs_align_top ); 其中参数 pbar 为浮动控件的指针,point 为控件左上角的屏幕坐标,dwStyle 表示控件的停靠风格, 见表 工具栏隐显控制 通过对函数 CWnd::SetStyle( ) 的调用可以改变某些工具栏窗口的风格, 但该函数不能改变 WS_VISIBLE, 只能通过父类 CWnd 的 ShowWindow( ) 成员函数来显示或隐藏工具栏 将参数 SW_HIDE 传给该函数以使工具栏不可见或传递 SW_SHOWNORMAL 重新显示工具栏 一旦在程序中改变了工具栏, 就必须将这一改变通知框架窗口, 通过调用函数 CFrameWnd::RecalcLayout( ) 来重新调整主框架窗口的布局 例 5.10 编写一个单文档应用程序 Li5_10 为该应用程序创建一个带有 线 圆 矩形 和 文本 4 个按钮的工具栏, 当用户单击工具栏上的按钮时, 在窗口中显示相应的图形 (1) 启动 Visual C++ IDE, 使用 MFC AppWizard[exe] 向导创建一个单文档应用程序 Li5_10 框架 (2) 单击 Insert Resource 菜单项, 打开 Insert Resource 对话框, 选择 Toolbar 资源, 单击 New 按钮插入一个新的工具栏资源, 其 ID 接受系统默认 IDR_TOOLBAR1 在随后打开的工具栏资源编辑器中创建各个按钮, 并设置属性, 见表 5-9 表 5-9 工具栏按钮属性 按钮图标 ID 提示 ID_LINE ID_CIRCLE ID_RECTANGLE ID_TEXT 绘制线条 \n 线绘制圆 \n 圆绘制矩形 \n 矩形输出文本 \n 文本 (3) 在应用程序中添加代码, 完成工具栏的创建 装载以及风格设置 选择项目工作区的 ClassView 视图, 在 CMainFrame 上右击, 在弹出的快捷菜单中选择 Add Member Variable, 加入工具栏类对象变量 CToolBar m_wndtoolbar1 打开文件 MainFrm.cpp, 在函数 OnCreate( ) 的 return 0 ; 语句前添加如下代码 if (!m_wndtoolbar1.createex(this, TBSTYLE_FLAT, WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPER CBRS_TOOLTIPS CBRS_FLYBY CBRS_SIZE_DYNAMIC) 123

29 124 Visual C++ 程序设计教程与上机指导!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1)) // 创建 装载工具栏, 并设置风格 TRACE0("Failed to create toolbar1\n"); return -1; // 创建失败 // 以上设定的工具栏风格为 : 工具栏初始可见 并放置在窗口顶部, 当鼠标箭头在按钮上暂停时, // 显示工具栏提示及工具栏按钮提示, 工具栏大小可变 m_wndtoolbar1.enabledocking(cbrs_align_any); // 设置停靠特性 EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar1); // 指定停靠位置 (4) 利用 ClassWizard 向导工具为工具栏上各按钮映射消息处理函数, 并在函数中添加相应的绘图代码 (5) 编译 链接并运行程序 单击按钮, 结果如图 5.25 所示 图 5.25 自定义工具栏 5.4 状态栏的使用 状态栏实际上是一个窗口, 一般分为几个窗格, 每个窗格显示不同的信息 使用 AppWizard 创建一个单文档应用程序, 其他接受默认选项时, 生成的应用程序自动创建带有默认窗格的状态栏 状态栏类的继承关系在 MFC 中, 状态栏的功能由 CStatusBar 类实现 状态栏的继承关系如图 5.26 所示 124

30 第 5 章菜单 工具栏和状态栏 125 CObject CCmdTarget CWnd CControlBar CStatusBar 图 5.26 状态栏继承关系 状态栏类的成员函数 对状态栏的控制通过调用其成员函数来完成, 常用成员函数的功能见表 5-10 表 5-10 常用状态栏成员函数 成员函数名 Create CreateEx SetIndicators SetPaneText CommandToIndex GetItemID GetItemRect GetPaneInfo GetPaneStyle GetPaneText 功能创建一个状态栏, 并与状态栏对象相联系, 同时初始化字体及高度创建一个有附加风格的状态栏设置窗格 ID 号设置窗格文本获取给定 ID 号的窗格索引获取与索引对应的窗格 ID 号获取给定索引的显示矩形获取给定索引的窗格 ID 号 风格和宽度获取给定窗格风格获取给定索引的窗格文本 状态栏操作利用 MFC AppWizard 向导创建应用程序时, 首先在 CMainFrame 类中定义一个成员变量 m_wndstatusbar, 它是状态栏类 CStatusBar 的对象 其次在 MFC 应用程序框架的实现文件 MainFrm.cpp 中, 为状态栏定义一个静态数组 indicators, 如下所示 : static UINT indicators[ ]= ID_SEPARATOR, // 显示命令功能提示 ID_INDICATOR_CAPS, // 显示大写锁定键状态 ID_INDICATOR_NUM, // 显示数字锁定键状态 ID_INDICATOR_SCRL, // 显示滚动锁定键状态 ; 这个全局的提示符数组 indicators 中的每个元素代表状态栏上一个窗格的 ID 值, 这些 ID 在应用程序的串表资源 String Table 中进行了说明 通过增加新的 ID 标识来增加用于显示状态信息的窗格 状态栏显示的内容由数组 indicators 决定, 需要在状态栏中显示的各窗格的标识符 位置以及个数也由该数组决定, 状态栏显示的内容是可以修改的 125

31 126 Visual C++ 程序设计教程与上机指导 最后 CWnd::Create( ) 函数以主框架窗口为父窗口创建状态栏, 创建后默认停靠在主框架窗口的底部 CWnd::SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)) 函数将创建后的状态栏分隔为 sizeof(indicators)/sizeof(uint) 个窗格, 窗格的 ID 分别为 indicators 数组中的元素值 一个应用程序只有一个状态栏, 所以对状态栏的操作主要是对状态栏上窗格的操作 为了把一个窗格添加到默认的状态栏中, 一般要完成下列步骤 : 为新建窗格创建一个命令 ID 和默认字符串 ; 将该窗格的命令 ID 添加到状态栏的静态数组 indicators 中 ; 为该窗格创建一个命令更新处理程序 例 5.11 编写一个单文档应用程序 Li5_11 程序运行后, 在视图窗口中显示一条正弦曲线 当鼠标指向该曲线上的点时, 在状态栏中显示点的坐标, 否则显示 非线上点 的文本提示信息 (1) 启动 Visual C++ IDE, 使用 MFC AppWizard[exe] 向导创建一个单文档应用程序 Li5_11 框架 (2) 选择项目工作区的 FileView 视图, 打开 MainFrm.cpp 文件 在状态栏的静态数组 indicators 的第一项后面添加 ID_INDICATOR_COORD, 为状态增加一个窗格, 用来显示点的坐标值 (3) 选择项目工作区的 ResourceView 视图, 打开串表编辑器 双击串表编辑器中的空白框, 在弹出的字符串属性设置对话框的 ID 栏中输入 ID_INDICATOR_COORD, 在 标题 栏中输入 x:xxx,y:xxxx, 定义窗格中数据输出格式及长度 (4) 绘制正弦曲线 在函数 CLi5_11View::OnDraw( ) 中添加如下代码 void CLi5_11View::OnDraw(CDC* pdc) CLi5_11Doc* pdoc = GetDocument(); ASSERT_VALID(pDoc); double y[800]; CPoint point[800]; for(int i=0;i<722;i++) point[i].x=i; y[i]=sin(point[i].x*3.1415/180); point[i].y=150-(int)(y[i]/0.01); for(i=0;i<721;i++) pdc->moveto(point[i]); pdc->lineto(point[i+1]); (5) 添加鼠标移动消息处理函数, 并在函数中编写代码, 以实现点的坐标在状态栏窗格中的显示 打开 ClassWizard 对话框, 在 Class name 栏和 ID Objects 中均选择 CLi5_11View, 在 126

32 第 5 章菜单 工具栏和状态栏 127 Messages 中选择 WM_MOUSEMOVE, 单击 Add Function 按钮, 接受默认函数名, 再单击 Edit Code 按钮, 打开消息处理函数并添加如下代码 void CLi5_11View::OnMouseMove(UINT nflags, CPoint point) CMainFrame *pmainframe=(cmainframe*)afxgetmainwnd(); CStatusBar *pstatusbar=&pmainframe->m_wndstatusbar; double y; CString str; y=sin(point.x*3.1415/180); if(pstatusbar && fabs(point.y-(150-y/0.01))<2.0) str.format("x:%d,y:%.2f",point.x,y); else str=" 非线上点 "; pstatusbar->setpanetext(1,str); CView::OnMouseMove(nFlags, point); (6) 将变量 m_wndstatusbar 的访问类型改为 Public, 在 CLi5_11View 的头文件中添加 #include "MainFrm.h" 和 #include "math.h" (7) 编译 链接并运行程序 当鼠标指向曲线上的点时, 结果如图 5.27 所示 x:356,y:-0.07 图 5.27 程序运行效果 5.5 上机指导 编写一个单文档应用程序 Ex5 在主菜单中增加 曲线 线宽 和 颜色 3 个菜单项, 曲线 菜单中包含 正弦 和 余弦 两个菜单项; 线宽 菜单中包含 线宽 2 和 线宽 3 两个菜单项; 颜色 菜单中包含 红色 和 蓝色 两个菜单项 为该应用程序创建一个新工具栏和一个快捷菜单, 工具栏包含 4 个按钮, 分别与菜单项 线 127

33 128 Visual C++ 程序设计教程与上机指导 宽 2 线宽 3 红色 和 蓝色 相对应, 快捷菜单上有 正弦 余弦 线宽 2 线宽 3 红色 和 蓝色 6 个菜单项 在状态栏中增加一个窗格, 用来显示曲线的类型 线宽以及颜色的提示信息 要求 : 程序运行时, 在视图窗口中显示坐标轴 曲线 曲线的属性 状态栏的提示以及所选菜单项的标记, 并且都能够随着用户的选择而变化 目的 : 练习菜单栏 工具栏及状态栏资源的创建和应用 1. 创建 MFC 应用程序框架启动 Visual C++ IDE, 使用 MFC AppWizard[exe] 向导创建应用程序 Sy5 框架 在 MFC AppWizard-Step 1 对话框中选择 Single Document, 其他都接受系统默认设置 2. 添加菜单项选择项目工作区中的 ResourceView 视图, 展开 Menu 文件夹, 双击菜单资源 IDR_MAINFRAME, 打开菜单编辑器 在主菜单 帮助 的后面添加 3 个菜单项 曲线 线宽 和 颜色, 并分别给它们添加子菜单, 见表 5-11 表 5-11 菜单项属性主菜单菜单项 ID 提示曲线 (&S) 正弦 (&Z) ID_SIN 正弦曲线余弦 (&Y) ID_COS 余弦曲线线宽 (&W) 线宽 2(&B) ID_WIDSP2 曲线宽度为 2\n 线宽 2 线宽 3(&C) ID_WIDSP3 曲线宽度为 3\n 线宽 3 颜色 (&C) 红色 (&R) ID_COLR 曲线颜色为红色 \n 红色蓝色 (&L) ID_COLB 曲线颜色为蓝色 \n 蓝色 3. 创建快捷菜单使用例 5.5 的方法为应用程序添加一个快捷菜单, 并将快捷菜单的菜单项设置为菜单栏中的相应项, 如图 5.28 所示 4. 创建工具栏使用例 5.10 的方法为应用程序创建一个新的工具栏, 并使工具栏上的各按钮与菜单栏中的菜单项相对应, 如图 5.29 所示 线宽 2 线宽 3 红色蓝色 图 5.28 快捷菜单 图 5.29 工具栏 128

34 第 5 章菜单 工具栏和状态栏 添加代码 (1) 添加成员变量及成员函数 选择项目工作区中的 ClassView 视图, 右击 CSy5View, 在弹出的快捷菜单中分别选择 Add Member Variable 和 Add Member Function 添加成员变量及成员函数, 见表 5-12, 表 5-13 表 5-12 成员变量 变量类型 变量名 说明 int int int COLORREF m_able m_typ m_wid m_col 标志菜单项是否有效,1 为有效,0 为无效记录曲线类型,1 为正弦,2 为余弦记录曲线线宽, 可以取 1 2 或 3 记录曲线颜色表 5-13 成员函数 double double void void void 返回值类型 函数名 功能 calsin(int x) 计算正弦值 calcos(int x) 计算余弦值 drawcurve(cdc* pdc) 绘制曲线 drawline(cdc* pdc, int x1,int y1, 绘制直线 int x2,int y2) drawaxis(cdc* pdc) 绘制坐标系 在构造函数中初始化成员变量 : CSy5View::CSy5View () m_typ=0; // 初始时窗口中不显示曲线 m_col=rgb(0,0,0); // 颜色初始为黑色 m_wid=1; // 线宽初始为 1 m_able=0; // 初始时除 正弦 和 余弦 菜单项外, 新增的其他菜单项均为 // 不可用 (2) 添加成员函数代码打开 Sy5View.h 文件, 在类的定义前面添加代码 : const double PI=3.1416; 打开 Sy5View.cpp 文件, 添加如下文件包含代码 : #include "math.h" #include "MainFrm.h" 为表 5-13 中各成员函数添加代码 : double CSy5View::calsin(int x) double y; y=sin(x*pi/180); // 计算正弦 129

35 130 Visual C++ 程序设计教程与上机指导 return y; double CSy5View::calcos(int x) double y; y=cos(x*pi/180); // 计算余弦 return y; void CSy5View::drawline(CDC* pdc,int x1, int y1, int x2, int y2) pdc->moveto(x1,y1); pdc->lineto(x2,y2); void CSy5View::drawaxis(CDC *pdc) CString str; CFont myfont,*oldfont; myfont.createpointfont(80,"arial",pdc); // 定义坐标刻度字体 oldfont=pdc->selectobject(&myfont); drawline(pdc,50,10,50,290); // 绘制 Y 轴 drawline(pdc,45,150,780,150); // 绘制 X 轴 for(int i=50;i<780;i=i+90) drawline(pdc,i,145,i,150); // 绘制 X 轴上刻度线 str.format("%d",i-50); if((i-50)!=0) pdc->textout(i,155,str); // 输出 X 轴上刻度值 for(i=0;i<11;i++) // 绘制 Y 轴上刻度线, 输出刻度值 drawline(pdc,50,50+20*i,55,50+20*i); str.format("%.2f",1-0.2*i); if(i!=5) pdc->textout(15,45+20*i,str); else pdc->textout(15,45+20*i,"0"); pdc->selectobject(oldfont); myfont.deleteobject(); void CSy5View::drawcurve(CDC* pdc) drawaxis(pdc); // 调用成员函数绘制坐标系 CPoint point[750]; CPen mypen,*oldpen; mypen.createpen(ps_solid,m_wid,m_col); // 创建实线画笔 线宽及颜色由参数 //m_wid 和 m_col 确定 oldpen=pdc->selectobject(&mypen); for(int i=0;i<722;i++) point[i].x=i+50; if(m_typ==1) // 根据参数 m_typ 的值确定曲线 // 类型 point[i].y=(int)(150-calsin(i)*100); 130

36 第 5 章菜单 工具栏和状态栏 131 else if(m_typ==2) point[i].y=(int)(150-calcos(i)*100); for(i=0;i<721;i++) drawline(pdc,point[i].x,point[i].y,point[i+1].x,point[i+1].y); // 调用函数绘制曲线 pdc->selectobject(oldpen); mypen.deleteobject(); (3) 建立消息映射打开 ClassWizard 对话框, 分别为菜单项 正弦 余弦 线宽 2 线宽 3 红色 和 蓝色 添加 COMMAND 及 UPDATE_COMMAND_UI 消息处理函数, 见表 5-14 表 5-14 菜单项的消息处理函数 ID_SIN ID_COS ID_WIDSP2 ID_WIDSP3 ID_COLR ID_COLB ID 消息 消息处理函数 COMMAND OnSin COMMAND OnCos COMMAND OnWidsp2 UPDATE_COMMAND_UI OnUpdateWidsp2 COMMAND OnWidsp3 UPDATE_COMMAND_UI OnUpdateWidsp3 COMMAND OnColr UPDATE_COMMAND_UI OnUpdateColr COMMAND OnColb UPDATE_COMMAND_UI OnUpdateColb 在消息处理函数中添加如下代码 void CSy5View::OnSin() m_typ=1; m_able=1; Invalidate(); void CSy5View::OnCos() m_typ=2; m_able=1; Invalidate(); void CSy5View::OnColr() m_col=rgb(255,0,0); Invalidate(); void CSy5View::OnColb() // 选择正弦曲线 // 不可用菜单项变为可用 // 更新视窗 // 选择红色 131

37 132 Visual C++ 程序设计教程与上机指导 132 m_col=rgb(0,0,255); Invalidate(); void CSy5View::OnWidsp2() m_wid=2; // 设置线宽为 2 Invalidate(); void CSy5View::OnWidsp3() m_wid=3; Invalidate(); void CSy5View::OnUpdateColb(CCmdUI* pcmdui) pcmdui->enable(m_able); // 红色 菜单项变为可用 if(m_col==rgb(0,0,255)) pcmdui->setcheck(true); // 红色 菜单项加标记 else pcmdui->setcheck(false); void CSy5View::OnUpdateColr(CCmdUI* pcmdui) pcmdui->enable(m_able); if(m_col==rgb(255,0,0)) pcmdui->setcheck(true); else pcmdui->setcheck(false); void CSy5View::OnUpdateWidsp2(CCmdUI* pcmdui) pcmdui->enable(m_able); if(m_wid==2) pcmdui->setcheck(true); else pcmdui->setcheck(false); void CSy5View::OnUpdateWidsp3(CCmdUI* pcmdui) pcmdui->enable(m_able); if(m_wid==3) pcmdui->setcheck(true); else pcmdui->setcheck(false); (4) 添加状态栏操作代码打开 MainFrm.cpp 文件, 将系统默认的状态栏对象 m_wndstatusbar 的访问类型改为 Public 在状态栏静态数组中添加 ID_INDICATOR_PROMPT, 并在字符串编辑器中设置其属性, 手工建立 ID_INDICATOR_PROMPT 的 UPDATE_COMMAND_UI 消息映射 首先, 选择项目工作区的 ClassView 视图, 双击 CSy5View 类, 打开其头文件 Sy5View.h,

38 在消息处理函数的声明宏中添加代码 第 5 章菜单 工具栏和状态栏 133 afx_msg void OnUpdatePrompt(CCmdUI* pcmdui); 然后, 打开 Sy5View.cpp 文件, 在其消息映射表中添加代码 ON_UPDATE_COMMAND_UI(ID_INDICATOR_PROMPT, OnUpdatePrompt); 最后, 在 Sy5View.cpp 文件中给消息处理函数 OnUpdatePrompt( ) 添加代码 void CSy5View::OnUpdatePrompt(CCmdUI* pcmdui) CMainFrame *pmainframe=(cmainframe*)afxgetmainwnd(); CStatusBar *pstatusbar=&pmainframe->m_wndstatusbar; // 获取状态栏指针 CString str,str1,str2,str3; str2=" 宽 1,"; str3=" 黑色 "; str1=(m_typ==1)?" 正弦,":" 余弦,"; if(m_wid==2) // 以下代码根据用户选择确定提示信息 str2=" 宽 2,"; else if(m_wid==3) str2=" 宽 3,"; if(m_col==rgb(255,0,0)) str3=" 红色 "; else if(m_col==rgb(0,0,255)) str3=" 蓝色 "; str=str1+str2+str3; if(m_able==0) str=" 选择曲线类型 "; // 初始时状态栏中提示信息 pstatusbar->setpanetext(1,str); // 显示提示信息 (5) 编译 链接并运行程序 结果如图 5.30 所示 图 5.30 程序运行效果 133

39 134 Visual C++ 程序设计教程与上机指导 5.6 习题 1. 填空题 (1) 快捷键或菜单及相关资源的资源符号的前缀是 (2) 用户可以通过项目工作区窗口的 视图来查看资源 (3) 常见的菜单类型有 3 种 (4) 基于对话框的应用程序在运行时 菜单栏 (5) 在 MFC 中, 工具栏的功能由类 实现 (6) 调用 CToolBar 类的成员函数 创建并初始化工具栏窗口对象 (7) 设置工具栏停靠特性, 需要调用 函数 (8) 状态栏实际上是一个窗口, 一般分为几个, 用来显示不同的信息 (9) 在 MFC 中, 状态栏的功能由 类实现 (10) 状态栏显示的内容由数组 决定, 需要在状态栏中显示各窗格 的 以及 2. 选择题 (1) Windows 资源提供的资源编辑器不能编辑 ( ) A. 菜单 B. 工具栏 C. 状态栏 D. 位图 (2) 在编辑某菜单项时, 若要指明该菜单项是一个弹出式子菜单, 必须选择属性对话 框中的 ( ) A.Separator B.Pop-up C.Inactive D.Grayed (3) 要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示, 必须设置工具栏的风格为 ( ) A.CBRS_TOOLTIPS B.CBRS_FLYBY C.CBRS_NOALIGN D.WS_VISIBLE (4) MFC 应用程序框架为状态栏定义的静态数组 indicators 放在文件 ( ) 中 A.MainFrm.cpp B.MainFrm.h C.stdAfx.cpp D.stdAfx.h 3. 判断题 (1) 在同一项目中,Visual C++ 在内部用来标识资源的资源符号不能重复 ( ) (2) 用户可以通过项目工作区窗口的 FileView 视图来查看资源 ( ) (3) 给菜单项定义快捷键, 只需在菜单项属性设置对话框的 Caption 文本框中说明 即可 ( ) (4) 弹出快捷菜单一般出现在鼠标箭头的位置 ( ) (5) UPDATE_COMMAND 是更新命令用户接口消息 ( ) (6) 工具栏停靠特性只能设置一次 ( ) 134

40 第 5 章菜单 工具栏和状态栏 135 (7) 状态栏的功能由 CStatusBar 类实现 ( ) (8) CMenu 类 CToolBar 类和 CStatusBar 类的根基类是相同的 ( ) 4. 简答题 (1) 请叙述菜单设计一般需要经过的步骤 (2) 为应用程序创建快捷菜单主要有哪些方法? (3) 如何动态创建菜单? (4) 创建工具栏的基本步骤有哪些? (5) 请叙述 MFC 创建状态栏所做的工作 5. 操作题 (1) 创建一个带有 时间 菜单项的应用程序 时间 菜单项中包含 时 分 和 秒 3 个选项, 选择这些选项, 可以在视图窗口中分别显示当前系统时间的小时 分 钟以及秒 (2) 为上题所创建的应用程序增加一个工具栏, 添加分别与 时 分 和 秒 3 个菜单相对应的按钮 并在状态栏中显示当前系统时间 135

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

ebook50-14

ebook50-14 14 M F C 74 75 76 77 M F C 78 M F C 79 M F C 80 D e l e t e Delete ( ) 81 M F C 14.1 74 14-1 Cut Paste C E d i t 14-1 1. C l a s s Wi z a r d C E d i t C l a s s Wi z a r d W M _ R B U T TO N D O W N 2.

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

VC访问VB的ActiveX.dll.doc

VC访问VB的ActiveX.dll.doc 如何从 VisualC++6.0 可执行文件访问 VisualBasicActiveXDLL 本文介绍三种方法可以从 VisualC++6.0 访 VisualBasicActiveXDLL 执行 1. 创建 VisualBasicActiveXDLL 项目 默认情况下创建 Class 1 2. 以下代码添加到 Class 1: Public Function MyVBFunction(x As Integer)

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

untitled

untitled COM ActiveX Control 年 ACTIVEX CONTROLS 念... 3 ACTIVEX... 3 MFC ACTIVEX CONTROLWIZARD... 3 MFC ACTIVEX CONTROLS WIZARD... 4 MFC... 4... 4 ACTIVEX... 4 ONDRAW 行... 4 ONDRAW() 數... 5 ACTIVEX... 5 (STOCK PROPERTIES)...

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

ebook50-11

ebook50-11 11 Wi n d o w s C A D 53 M F C 54 55 56 57 58 M F C 11.1 53 11-1 11-1 MFC M F C C D C Wi n d o w s Wi n d o w s 4 11 199 1. 1) W M _ PA I N T p W n d C W n d C D C * p D C = p W n d GetDC( ); 2) p W n

More information

ebook50-15

ebook50-15 15 82 C / C + + Developer Studio M F C C C + + 83 C / C + + M F C D L L D L L 84 M F C MFC DLL M F C 85 MFC DLL 15.1 82 C/C++ C C + + D L L M F C M F C 84 Developer Studio S t u d i o 292 C _ c p l u s

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63> 基于 WINCE 平台 C# 编程要点之一 本文主要介绍在基于 Windows CE 平台的英创嵌入式主板下进行 C#(Microsoft Visual Stdio.Net 2005) 应用程序开发时会常常用到的一些功能函数以及开发方法, 这些方法适用于英创采用 WinCE 平台的所有型号嵌入式主板, 包括 EM9000 EM9260 EM9160 等 本文要点包括 : 文件的删除和复制 如何获取存取设备的空间大小

More information

专注于做最好的嵌入式计算机系统供应商

专注于做最好的嵌入式计算机系统供应商 专注于做最好的嵌入式计算机系统供应商 基于 ARMSYS2440/2410 开发应用程序 (EVC&VS2005) Rev 1.0 2008 年 3 月 24 日 杭州立宇泰电子有限公司 HangZhou LiYuTai Elec.Co.,Ltd 开发应用程序的过程一般分两步, 第一步在 PC 机开发环境下设计和编译应用程序, 第二步将它下载到 目标系统, 也就是我们的 ARMSYS2440 平台上运行

More information

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 Eclipse 插件 ( 比如 MyEclipse 插件 ), 其开发方式和步骤可能略有差异和不同 在该例中,

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

12 计算机应用基础实训与习题指导 (Windows 7+Office 2010) 在任务栏对应的 计算机 窗口按钮上右击, 在弹出的快捷菜单中单击 关闭窗口 选项 在窗口标题栏上右击, 在弹出的快捷菜单中单击 关闭 命令 或鼠标双击窗口标题栏最左边的控制图标 在打开的窗口中, 按 Alt+F4 组

12 计算机应用基础实训与习题指导 (Windows 7+Office 2010) 在任务栏对应的 计算机 窗口按钮上右击, 在弹出的快捷菜单中单击 关闭窗口 选项 在窗口标题栏上右击, 在弹出的快捷菜单中单击 关闭 命令 或鼠标双击窗口标题栏最左边的控制图标 在打开的窗口中, 按 Alt+F4 组 第 2 章 Windows 7 操作系统实训 实训二 Windows 7 基本操作 实训目标 (1) 会进行 Windows 7 的窗口操作 (2) 会进行 Windows 7 应用程序的启动和退出 (3) 会进行桌面背景和屏幕保护程序个性化设置 (4) 通过控制面板的使用, 认识其功能和作用 实训内容 1. 窗口操作 (1) 打开和关闭 计算机 窗口 (2) 调整窗口大小和移动窗口 (3) 切换和排列窗口

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1 Chapter 01 Photoshop CS6 的基本操作 本章内容 1.1 Photoshop 的应用领域 1.6 控制面板的显示与隐藏 1.2 位图和矢量图的特性 1.7 新建 打开与保存文件 1.3 像素和分辨率的关系 1.8 图像的缩放 1.4 色彩模式 1.9 屏幕显示模式 1.5 Photoshop CS6 界面 1.10 计算机图形图像常用的色彩模式 Photoshop CS6 艺术设计案例教程

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

Microsoft Word - ch07.doc

Microsoft Word - ch07.doc 第 7 章文档和视图 教学提示 :MFC 应用框架的基础是 Document/View 结构, 文档是应用和用户操作的实体, 视图实现文档的显示 编辑和打印 CDocument 类提供了一个标准文档处理的接口, CView 类提供文档的用户界面 本章将介绍有关文档和视图的基本机制, 并结合实例介绍使用 CArchive 类进行文档的序列化以及切分窗口 多视图的方法和技巧 教学目标 : 了解文档和视图的基本结构,

More information

60 新编计算机应用基础实训指导 (2) 单元格显示格式设置 选中 (A1:I1) 单元格区域, 在 格式 工具栏中选择 加粗 按钮, 将字体设置为 加粗 显示 ; 选择 居中显示 按钮, 将字体设置为居中显示 ; 选择 底纹设置 按钮, 将单元格底纹设置为黄色, 显示结果如图 3 3 所示 图 3

60 新编计算机应用基础实训指导 (2) 单元格显示格式设置 选中 (A1:I1) 单元格区域, 在 格式 工具栏中选择 加粗 按钮, 将字体设置为 加粗 显示 ; 选择 居中显示 按钮, 将字体设置为居中显示 ; 选择 底纹设置 按钮, 将单元格底纹设置为黄色, 显示结果如图 3 3 所示 图 3 模块三电子表格软件 Excel 训练项目 1 教师人事档案管理表的录入与编辑 训练目标 掌握 Excel 2003 工作簿的建立 保存与打开方法 掌握工作表中各种不同类型数据的输入方法 掌握单元格格式的设置方法 掌握表格边框和底纹的设置方法 掌握特殊符号的输入方法 训练内容 制作 教师人事档案管理表, 最终显示效果如图 3 1 所示 图 3 1 教师人事档案管理表 样本 实训步骤 (1) 启动 Excel

More information

实用教程 任务一 : 安装 程序 任务描述小张是某程序公司的员工, 目前需要使用 进行开发工作 所以小张需要安装 程序, 并熟悉其基本操作 任务分析在学习 之前, 首先需要在电脑上安装 软件 下面我们可以跟小张一起学习 程序的安装过程 准备知识 1. 的发展历程 的发展历史可以分为以下几个阶段 1

实用教程 任务一 : 安装 程序 任务描述小张是某程序公司的员工, 目前需要使用 进行开发工作 所以小张需要安装 程序, 并熟悉其基本操作 任务分析在学习 之前, 首先需要在电脑上安装 软件 下面我们可以跟小张一起学习 程序的安装过程 准备知识 1. 的发展历程 的发展历史可以分为以下几个阶段 1 1 项目一 基础知识 项目要点安装 程序定制工具栏利用项目管理器创建及定制新项目开发应用程序 引言 本项目通过安装 程序 定制工具栏 创建及定制新项目 开发应用程序等操作, 介绍了 Visual FoxPro 的安装 启动 退出, 的用户界面 项目管理器 选项对话框 向导 设计器和生成器以及应用开发步骤等主要内容 实用教程 任务一 : 安装 程序 任务描述小张是某程序公司的员工, 目前需要使用 进行开发工作

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法 ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 0 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : 0 /// 测试方法 : 测试将 DataTable 导出到 EXCEL, 无模板 public void TestExportToExcelByDataTable() string excelpath

More information

提问袁小兵:

提问袁小兵: C++ 面 试 试 题 汇 总 柯 贤 富 管 理 软 件 需 求 分 析 篇 1. STL 类 模 板 标 准 库 中 容 器 和 算 法 这 部 分 一 般 称 为 标 准 模 板 库 2. 为 什 么 定 义 虚 的 析 构 函 数? 避 免 内 存 问 题, 当 你 可 能 通 过 基 类 指 针 删 除 派 生 类 对 象 时 必 须 保 证 基 类 析 构 函 数 为 虚 函 数 3.

More information

《Visual C++简明教程》

《Visual  C++简明教程》 Windows Visual C++ Windows Visual C++ 6.0 Microsoft Visaul C++ Visual 6.0 Visual C++ 6.0 MFC Windows Visual C++ 6.0 MFC MFC MFC Windows GDI Windows MFC / ODBC DAO ADO OLE DB Internet WinInet Internet IE5.0

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2 PowerBuilder 9 PowerBuilder Native Interface(PBNI) PowerBuilder 9 PowerBuilder C++ Java PowerBuilder 9 PBNI PowerBuilder Java C++ PowerBuilder NVO / PowerBuilder C/C++ PowerBuilder 9.0 PowerBuilder Native

More information

三维设计软件应用 (3ds Max) 1.1 任务 1: 制作一个简单的三维动画 体验 3ds Max 2012 中文版 预备知识 1: 三维动画制作基本流程 3ds Max 1. 编制脚本 2. 创建模型 3ds Max 3ds Max Maya 3. 使用材质及贴图 3ds Max

三维设计软件应用 (3ds Max) 1.1 任务 1: 制作一个简单的三维动画 体验 3ds Max 2012 中文版 预备知识 1: 三维动画制作基本流程 3ds Max 1. 编制脚本 2. 创建模型 3ds Max 3ds Max Maya 3. 使用材质及贴图 3ds Max 第 1 章 3ds Max 2012 中文版快速入门 内容导读 Autodesk 公司推出的 3ds Max 是一个优秀并享有盛誉的三维设计软件, 也是目前全球用户数量最多的三维设计软件, 其功能集建模 材质和贴图 光效设计 动画制作 渲染与合成于一体 3ds Max 广泛应用于影视广告设计制作 建筑装潢设计制作 工业设计 影视特效 虚拟现实场景设计等领域 3ds Max 2012 与之前的版本相比,

More information

Microsoft Word C语言程序设计实验指导正文.doc

Microsoft Word C语言程序设计实验指导正文.doc 第 1 章 Visual C++ 6.0 集成开发环境 Visual C++ 是微软公司的重要产品 Visual Studio 工具集的重要组成部分, 它提供了一个集源程序编辑 代码编译和调试于一体的可视化开发环境, 即所谓的集成开发环境 (Integrated Development Environment,IDE), 它包含文本编辑器 资源编辑器 工程编译工具 源代码浏览器 集成调试工具, 以及一套联机文档

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

图 1 门电路实现全加器仿真图 (7) 放置输入源 单击工具栏中的按钮, 在图 1 的输入端放置 DCLOCK 型激励源 然后双击打开其编辑框, 如图 2 所示, 对其数值进行修改 本实验中, 输入 A 的周期设置为 4s, 输入 B 的周期设置为 2s, 输入 CI 的周期设置为 1s 图 2 激

图 1 门电路实现全加器仿真图 (7) 放置输入源 单击工具栏中的按钮, 在图 1 的输入端放置 DCLOCK 型激励源 然后双击打开其编辑框, 如图 2 所示, 对其数值进行修改 本实验中, 输入 A 的周期设置为 4s, 输入 B 的周期设置为 2s, 输入 CI 的周期设置为 1s 图 2 激 数字全加器操作说明书 本实验将分别采用 (1) 门电路 (2) 数据选择器 (3) 二进制译码器三种不同逻辑器件实现 1 位全加器的逻辑电路功能 具体的实验步骤及操作方法分述如下 1. 使用小规模集成电路 ( 门电路 ) 实现全加器 (1) 根据 1 位全加器的逻辑功能, 写出 1 位全加器的逻辑真值表, 如表 1 所示 输入 输出 表 1. 1 位全加器的逻辑真值表 A 0 0 0 0 1 1 1

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

C#程序设计实验

C#程序设计实验 程序设计基础 实验指导 / 实验一 : 认识 C# 1 程序设计基础 实验指导 实验一 : 认识 C# 一 实验目的 1 掌握 Visual Studio 的基本操作方法, 学会使用该编译工具 2 掌握编辑 编译 运行控制台应用程序的基本过程 3 掌握建立 Windows 窗体应用程序的基本过程 4 通过运行 C# 程序, 初步了解 C# 程序的特点 二 实验学时 2 学时 三 实验类型 验证性实验

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

图形图像处理 (Photoshop CS6) [ pixel ] % % % % dpi/inch dpi 150dpi 300dpi 002

图形图像处理 (Photoshop CS6) [ pixel ] % % % % dpi/inch dpi 150dpi 300dpi 002 第 1 章 初识 Photoshop CS6 本章学习要点 点阵图像的基本概念 常用图像格式的特性 Photoshop CS6 界面基本操作 图像的分辨率和像素 Photoshop 的应用领域 Photoshop 文件的管理 重点和难点 图像的像素和分辨率 Photoshop CS6 界面的基本操作 达成目标 理解像素和分辨率的关系 了解图像的常用格式及特点 掌握 Photoshop CS6 界面基本操作及对图像进行不同格式的保存管理

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

Microsoft PowerPoint - 第1章 Excel基础知识

Microsoft PowerPoint - 第1章  Excel基础知识 第 1 章 Excel 基础知识 1.1 Excel 基本操作 1.2 工作表的操作 1.3 公式与函数的操作 1.4 分类汇总与数据透视表 1.5 图形与图表的操作 本章学习目标 Excel 的命令和工具栏的应用工作表的相关操作 Excel 常用函数和公式的使用分类汇总与数据透视表的使用图形与图表的绘制 1.1 Excel 基本操作 1.1.1 Excel 操作界面的构成 1.1.2 菜单和命令

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

Microsoft Word - Data IO CS Calculate Method AppNote.doc

Microsoft Word - Data IO CS Calculate Method AppNote.doc Data I/O Checksum Calculation Methods Application Note (Chinese translation follows this English text.) General Description and Scope This document describes common checksum calculation methods for devices

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta 目录 1 IPv6 PIM Snooping 配置命令 1-1 1.1 IPv6 PIM Snooping 配置命令 1-1 1.1.1 display pim-snooping ipv6 neighbor 1-1 1.1.2 display pim-snooping ipv6 routing-table 1-2 1.1.3 display pim-snooping ipv6 statistics

More information

CHAPTER 1

CHAPTER 1 CHAPTER 1 1-1 System Development Life Cycle; SDLC SDLC Waterfall Model Shelly 1995 1. Preliminary Investigation 2. System Analysis 3. System Design 4. System Development 5. System Implementation and Evaluation

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

f2.eps

f2.eps 前 言, 目 录 产 品 概 况 1 SICAM PAS SICAM 电 力 自 动 化 系 统 配 置 和 使 用 说 明 配 置 2 操 作 3 实 时 数 据 4 人 机 界 面 5 SINAUT LSA 转 换 器 6 状 态 与 控 制 信 息 A 版 本 号 : 08.03.05 附 录, 索 引 安 全 标 识 由 于 对 设 备 的 特 殊 操 作 往 往 需 要 一 些 特 殊 的

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

吉林大学学报 工学版 244 第 4 卷 复杂 鉴于本文篇幅所限 具体公式可详见参考文 献 7 每帧的动力学方程建立及其解算方法如图 3 所示 图4 滚转角速度与输入量 η 随时间的变化波形 Fig 4 Waveform of roll rate and input η with time changing 图5 Fig 5 滚转角随时间的变化波形 Waveform of roll angle with

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

Photoshop CS6 Windows 10 Esc Alt F10 3 Photoshop CS 工具箱 选项栏 面板和和面板组 1. 工具箱 Tab 工具组中工具的切换 : 工具箱中一些工具图标的右下角有小黑三角, 表示这是一个按钮组, 存在

Photoshop CS6 Windows 10 Esc Alt F10 3 Photoshop CS 工具箱 选项栏 面板和和面板组 1. 工具箱 Tab 工具组中工具的切换 : 工具箱中一些工具图标的右下角有小黑三角, 表示这是一个按钮组, 存在 第 1 章 第 1 章 CS6 工作区和基本操作中文 Photoshop CS6 工作区和基本操作 本章提要 : 本章介绍中文 Photoshop CS6 工作区的组成, 图像文件的基本知识和基本操作, 图像的 基本操作, 以及图像裁剪方法等内容 1.1 Photoshop CS6 工作区简介 Windows Photoshop CS6 Adobe Photoshop CS6 Photoshop CS6

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y 拼图游戏 任务说明 本实例实现了拼图游戏的开发 运行程序, 单击 开始 按钮将打乱图片的位置, 效果如图 1 所示, 然后通过鼠标单击图片进行移动, 直到将所有图片都移动到正确位置, 游戏过关, 过关后的效果如图 2 所示 图 1 打乱图片位置的效果图 2 图片移动到正确位置的效果 关键技术 本程序主要通过 Swing 与枚举类实现, 程序将一幅完整的图片平均分成 9 部分, 每一部分为一个正方形,

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

劳动保护与医疗保健 第 二 章 止标志共 23 个 劳 动 安 全 技 术 22 2 警告标志 由于三角形引人注目 故用作 警告 标志 警告人们注意可能发生的多种危险 三角的背景使用黄色 三角图形和三角内的图像均用黑色描 绘 黄色是有警告含义的颜色 在对比色黑色的衬托下 绘成的 警告标志 就更引人注目 3 指令标志 在圆形内配上指令含义的颜色 蓝 色 并用白色绘制必须执行的图形符号 构成 指令标志

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

X713_CS_Book.book

X713_CS_Book.book / / /USB ) ; ; C D ; ; B B 1 >> 2 3 B 1 ( > > ) 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 GSM GPS ( ) 手机已连接到 GSM 网络 指示条越多, 接收质量越好 GPS 2 ...........................4.............................. 4 Micro SD (

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Phoptoshop -- 实例教程 第2章 初识 Photoshop 本章简介 本章首先对 Photoshop 进行概述 然后介绍 Photoshop 的功 能特色 通过本章的学习 可以对 Photoshop 的多种功用有一 个大体的 全方位的了解 有助于在制作图像的过程中快速地 定位 应用相应的知识点 完成图像的制作任务 课堂学习目标 工作界面的介绍 文件操作 图像的显示效果 标尺 参考线和网格线的设置

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

ebook111-4

ebook111-4 Flash 4 Flash 4 F l a s h 5 Flash 4 Flash Flash 4 Flash 4 Flash 4 4.1 Flash 4 Flash 4 Flash 4 Flash Flash 4 Flash 4 4.2 Flash 4 Flash 4 A Flash 4 S h i f t F i l e P r e f e r e n c e s > > Flash 4 Flash

More information

摘要:

摘要: ASCII B87901041 B87901062 B87901141 BBS(Bulletin Board System) 行 ANSI BBS BBS Big5 不 來 不 便 BBS 了 行 BBS 更 了 便 來 論 BBS(Bulletin Board System) 了 不良 PTT 了 BBS 行列 BBS 欄 連 BBS 令 便 讀 BBS 了 BBS 讀 流 易 BBS 了 BBS

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 C# 和 ASP.NET 4.5 一 实验目的 (1) 了解 C# 语言规范 (2) 掌握 C# 基础语法 流程控制和异常处理等 (3) 掌握创建 C# 类并应用于 ASP.NET 4.5 页面中的方法 (4) 掌握 ASP.NET 4.5 页面的调试方法 二 实验内容及要求 1. 转换输入的成绩到相应的等级要求如下 : (1) 页面浏览效果如图 3-1 所示 (2) 成绩输入使用 TextBox

More information

RUN_PC連載_12_.doc

RUN_PC連載_12_.doc PowerBuilder 8 (12) PowerBuilder 8.0 PowerBuilder PowerBuilder 8 PowerBuilder 8 / IDE PowerBuilder PowerBuilder 8.0 PowerBuilder PowerBuilder PowerBuilder PowerBuilder 8.0 PowerBuilder 6 PowerBuilder 7

More information

概述

概述 OPC Version 1.8 build 0925 KOCRDK Knight OPC Client Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOC_Init...5 2.2.2 KOC_Uninit...5 2.3...5

More information

一个实例搞定 MATLAB 界面编程 作者 : 彭军 邮件 博客 : 下面请跟我一步一步做一个图像处理的程序, 如果您坚持做完这个实例, 我想 MATLAB 界面编程对您而言, 就没有什么难度了 当然, 我这

一个实例搞定 MATLAB 界面编程 作者 : 彭军 邮件 博客 :  下面请跟我一步一步做一个图像处理的程序, 如果您坚持做完这个实例, 我想 MATLAB 界面编程对您而言, 就没有什么难度了 当然, 我这 一个实例搞定 MATLAB 界面编程 作者 : 彭军 邮件 :pjun9@foxmail.com 博客 :http://hi.baidu.com/pengjun 下面请跟我一步一步做一个图像处理的程序, 如果您坚持做完这个实例, 我想 MATLAB 界面编程对您而言, 就没有什么难度了 当然, 我这里说的是, 您首先要有一定的 MATLAB 编程基础 还有, 我的 MATLAB 版本是 2008a

More information

IBM Rational ClearQuest Client for Eclipse 1/ IBM Rational ClearQuest Client for Ecl

IBM Rational ClearQuest Client for Eclipse   1/ IBM Rational ClearQuest Client for Ecl 1/39 Balaji Krish,, IBM Nam LeIBM 2005 4 15 IBM Rational ClearQuest ClearQuest Eclipse Rational ClearQuest / Eclipse Clien Rational ClearQuest Rational ClearQuest Windows Web Rational ClearQuest Client

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

untitled

untitled 1 .NET 料.NET 料 料來 類.NET Data Provider SQL.NET Data Provider System.Data.SqlClient 料 MS-SQL OLE DB.NET Data Provider System.Data.OleDb 料 Dbase FoxPro Excel Access Oracle Access ODBC.NET Data Provider 料

More information

Microsoft Word - QTP测试Flex.doc

Microsoft Word - QTP测试Flex.doc TIB 自动化测试工作室 http://www.cnblogs.com/testware 使用 QTP 进行 Flex 自动化测试 自动化测试工具与 Flex 应用程序之间是通过代理 (Agent) 来交互的, 如图所示 : 这也就是为什么后面在使用 QTP 进行 Flex 自动化测试之前要先安装 Flex 插件 配置和编译 Flex 程序的原因 前提条件 在使用 QTP 进行 Flex 4 的测试之前,

More information

ChinaBI企业会员服务- BI企业

ChinaBI企业会员服务- BI企业 商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:du.haoquan@bizintelsolutions.com 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户

More information

如何在可支持影拓压感触控笔的 apps 中连接压感触控笔 重要 : 在您开始使用前, 请打开 ipad 上的蓝牙功能 影拓压感触控笔不会出现在您 ipad 上的蓝牙设备列表里 影拓压感触控笔需要在每个单独的 app 里进行连接 找到软件并按照以下步骤来连接您的影拓压感触控笔 同时, 为防止误触控,

如何在可支持影拓压感触控笔的 apps 中连接压感触控笔 重要 : 在您开始使用前, 请打开 ipad 上的蓝牙功能 影拓压感触控笔不会出现在您 ipad 上的蓝牙设备列表里 影拓压感触控笔需要在每个单独的 app 里进行连接 找到软件并按照以下步骤来连接您的影拓压感触控笔 同时, 为防止误触控, 如何在可支持影拓压感触控笔的 apps 中连接压感触控笔 重要 : 在您开始使用前, 请打开 ipad 上的蓝牙功能 影拓压感触控笔不会出现在您 ipad 上的蓝牙设备列表里 影拓压感触控笔需要在每个单独的 app 里进行连接 找到软件并按照以下步骤来连接您的影拓压感触控笔 同时, 为防止误触控, 您也可以关闭多任务手势 设置 > 通用 > 多任务手势 支持影拓压感触控笔的 apps: Adobe

More information

Visual C++ 1 Page no. 1

Visual C++ 1 Page no. 1 Visual C++ 1 Page no. 1 Visual C++ 2 Page no. 2 Visual C++ 3 Page no. 3 Visual C++ 4 Page no. 4 Visual C++ 5 Page no. 5 Visual C++ 6 Page no. 6 Visual C++ 7 Page no. 7 Visual C++ 8 Page no. 8 Visual C++

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 常用控件 控件是在系统内部定义的能够完成特定功能的程序单元 在应用程序中使用控件不仅简化了编程, 还能完成常用的各种功能 在所有的控件中, 根据它的使用以及 Visual C++ 6.0 对其支持情况 ( 包括 Visual C++ 6.0 对其更新和扩展 ), 可以把控件分为基本控件 公共控件和 ActiveX 控件 控件的创建方式有两种 一种是在对话框模板中指定控件 ( 既可使用对话框编辑器进行创建,

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

Microsoft Word Visual_Basic程序设计上机实践教程正文.doc

Microsoft Word Visual_Basic程序设计上机实践教程正文.doc 实验 3 顺序和分支结构程序设计 实验目的 1. 掌握顺序结构的程序设计思想 2. 掌握命令按钮 (CommandButton) 标签 (Label) 文本框 (TextBox) 编辑框 (EditBox) 等常用控件的使用方法 3. 了解并掌握对话框函数 MessageBox() 的含义与用法 4. 了解和熟悉线条控件 形状控件的画法以及主要属性的用法 实验内容 1. 顺序结构 实训 3-1 编写一应用程序,

More information

技 术 文 件

技  术  文  件 技术文件 技术文件名称 :IAlert 接口使用说明 技术文件编号 : 版 本 :V1.0 共页 ( 包括封面 ) 拟制 审核 会签 标准化 批准 中兴通讯股份有限公司 XX 软件模块详细设计说明 版本号 修改记录 文件编号 版本号 拟制人 / 修改人 拟制 / 修改日期 1 V1.0 胡曦 2005-08-12 新建 更改理由 主要更改内容 ( 写要点即可 ) 注 1: 每次更改归档文件 ( 指归档到事业部或公司档案室的文件

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information