




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 Windows编程基础 2.1.1 简单的Windows应用程序 简单的Windows应用程序。 例Ex_HelloMsg 一个最简单的Windows应用程序 (1) 运行Microsoft Visual C+ 6.0后,选择“文件”“新 建”菜 单命令,打开应用程序向导,显示出“新建”对话框。 2.1.1 简单的Windows应用程序 (2)在工程名称框中键入Win32应用程序项目名称 elloMsg。 (3)单击确定按钮继续。 (4)再次选择“文件”“新建”菜单命令,显示出“新 建”对话框。 “新建”对话框文件页面 2.1.1 简单的Windows应用程序 (6)在文档窗口中输入下面的代码: #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance ,LPSTR lpCmdLine, int nCmdShow) MessageBox (NULL, “你好,我的Visual C+世界!“, “问候“, 0) ; return 0 ; 2.1.1 简单的Windows应用程序 编译并运行程序从上面的程序可以看出: WinMain函数的原型如下: int WINAPI WinMain ( HINSTANCE hInstance, / 当前实例句柄 HINSTANCE hPrevInstance, / 以前的实例句柄 LPSTR lpCmdLine, / 指向命令行参数的指针 int nCmdS / 窗口的显示状态 每一个Win32应用程序都需要Windows.h头文件,包含 了一些Windows头文件。 程序中,MessageBox是一个Win32 PI(ApplicationProgramming Interface, 应用程序接口)函数 ,用来弹出一个对话框窗口,显示短信息。 2.1.1 简单的Windows应用程序 例Ex_HelloWin 一个较完成的Windows应用程序 (1) 按照Ex_HelloMsg示例方法,创建一个An empty project 类型的Win32 Application(Win32 应用程序)项目Ex_HelloWin。 (2)选择“文件”“新建”菜单命令,显示出“新建”对话框。单 击“文件”标签,在左边的列表框中选择C+ Source File项,在右 边的“文件”框中键入Ex_HelloWin.cpp,单击确定按钮。 (3)在文档窗口中输入代码: Ex_HelloMsg示例相比,Ex_HelloWin要复杂的多,可以将 其分是两个基本函数的程序结构。 函数WndProc用来接收和处理各种不同的消息,而WinMain 函数通常要完成以下几步工作: 定义并调用API函数RegisterClass注册应用程序的窗口类。 2.1.1 简单的Windows应用程序 函数CreateWindow用来创建已注册窗口类的窗口。 CreateWindow函数具有下列原型: HWND CreateWindow( LPCTSTR lpClassName, / 已注册的窗口类名 LPCTSTR lpWindowName, / 窗口标题 DWORD dwStyle, / 窗口风格 int x, / 窗口的水平位置 int y, / 窗口的垂直位置 int nWidth, / 窗口宽度 int nHeight, / 窗口高度 HWND hWndParent, / 父窗口句柄 HMENU hMenu, / 菜单句柄或控件标识 HINSTANCE hInstance, / 应用程序实例句柄 LPVOID lpParam / 其他窗口创建时的参数数据 2.1.1 简单的Windows应用程序 API函数GetMessage 和DispatchMessage就是起到这 样的作用。 如果接收到WM_QUIT消息,则退出应用程序。 (4) 编译运行程序,窗口中单击鼠标左键,会弹出对话框。 2.1.1 简单的Windows应用程序 Windows应用程序的基本流程: 2.1.2 Windows编程特点 完整的Windows应用程序除了WinMain函数外,包含用于 处理用户动作和窗口消息的窗口函数。 还会发现一个Windows应用程序还常常具有一些特性: l 消息驱动机制 l 图形设备接口(GDI) l 基于资源的程序设计 l 动态链接库 1. 消息驱动机制 Windows程序和控制台应用程序之间一个最根本区别,在于控制 台应用程序是通过调用系统函数来获得用户输入,而Windows程 序则是通过系统发送的消息来处理用户输入。 Windows操作环境中,无论是系统产生的动作或用户运行应用程 序产生的动作,称为事件(Events)产生的消息(Message)。 2.1.2 Windows编程特点 4. 动态链接库 在Windows操作系统中,最主要的DLL有KERNEL32.DLL、 GDI32.DLL和USER32.DLL。 KERNEL32.DLL用来处理存储器低层功能、任务和资源管理等 Windows核心服务; GDI32.DLL提供图形设备接口,管理用户界面和图形绘制,包括 Windows元文件、位图、设备描述表和字体等; USER32.DLL负责窗口的管理,包括消息、菜单、光标、计时器及 其它与控制窗口显示相关的一些功能。 2. 图形设备接口(GDI) 而Windows则提供了一个抽象的接口,称为图形设备接口,使得用 户直接利用系统的GDI函数就能方便实现图形和文本的输出。 3. 基于资源的程序设计 4. Windows应用程序包含众多图形元素,如光标、菜单、工具 栏、位图、对话框等。 2.1.3 Windows基本数据类型 Windows常用的基本数据类型 : Windows所 数据类型 对应的基本数据类 型 说明 BOOLbool布尔值 BSTRunsigned short *32位字符指针 BYTEunsigned char8位无符号整数 COLORREFunsigned long用作颜色值的32位值 DWORDunsigned long32位无符号整数,段地址和相关的偏移地址 LONGlong32位带符号整数 LPARAMlong作为参数传递给 窗口过程或回调函数的32位值 LPCSTRconst char *指向字符串常量的32位指针 LPSTRchar *指向字符串的32位指针 LPVOIDvoid *指向未定义类型的32位指针 LRESULTlong来自窗口过程或回调函数的32位返回值 UINTunsigned int32位无符号整数 WORDunsigned short16位无符号整数 WPARAMunsigned int当作参数传递给 窗口过程或回调函数的32位值 2.1.3 Windows基本数据类型 HINSTANCE和LPSTR等,这样的数据类型只是一些 基本数据类型的别名,在Windows编程中常用的基本数据 类型。 需要说明的是: 这些基本数据类型都是用大写字符来表示,以与一般C+基 本数据类型相区别。 凡是数据类型的前缀是P或LP,则表示该类型是一个指针或 长指针数据类型。若前缀是U,则表示无符号数据类型,等等。 Windows还提供一些宏来处理上述基本数据类型。例如, LOBYTE和HIBYTE分别用来获取16位数值中的低位和高位字节 ;LOWORD和HIWORD分别用来获取32位数值中的低位字和 高位字;MAKEWORD是将两个16位无符号值结合成一个32位 无符号值,等等。 2.2.1 绘制文本 Windows窗口通常有标题栏和边框,其中默认背景色为 白色区域称为窗口的客户区。 例Ex_WinText 文本绘制 (1)新建一个“An empty project”类型的Win32 pplication(Win32 应用程序)项目Ex_WinText。 (2)新建一个C+源文件(Source File)Ex_WinText.cpp。 (3)编译并运行程序, Ex_WinText运行结果: 2.2.1 绘制文本 TextOut函数是用来显示文本的最常用的GDI函数,有下列 原型: BOOL TextOut( HDC hdc, / 设备描述表句柄 int nXStart, / 文本显示的水平起始位置 int nYStart, / 文本显示的垂直起始位置 LPCTSTR lpString, / 要显示的文本 int cbString / 要显示的文本长度 hdc定义的是句柄HDC变量,TextOut等GDI函数都要通过这 样的HDC句柄来绘制图形和文本。 EndPaint用来释放设备描述表句柄,并使先前无效区域变为 有效,使Windows不再发送M_PAINT消息。 PAINTSTRUCT是“绘图信息结构”,BeginPaint和EndPaint 函数都需要PAINTSTRUCT结构变量作为自己的参数。 2.2.2 使用控件 在Win32应用程序中,可在窗口基础上通过CreateWindow函 数来创建一个控件窗口。 例Ex_WinControl 控件的使用 (1) 新建一个“An empty project”类型的Win32 ApplicationWin32 应用程序)项目Ex_WinControl。 (2) 新建一个C+源文件(Source File) _WinControl.cpp,并输入代码 (3) 编译并运行程序,填入一元二次方程的系数后 ,单击计算按钮,求解的结果就会显示出来, 2.3.1 MFC概述 微软公司为应用程序设计者提供了Win16 API,在此基础 上推出了Windows GUIMFC类的基本层次结构如图 : CCmdTarget CWnd CDocument CFrameWnd CObject CWinTread CWinApp CViewCDialog及控件 CMDIChildWndCMDIFrameWndCMiniFrameWnd 2.2.3 设计一个MFC程序 例Ex_HelloMFC 一个MFC应用程序。 (1) 创建一个“An empty project”类型的Win32 Application(Win32 应用程序)项目Ex_HelloMFC。 (2) 选择“文件”“新建”菜单命令,显示出“新建”对话框。单 击“文件”标签,在左边的文件类型列。 (3) 表框中选择C+ Source File项,在右边的“文件”下的编辑 框中键入Ex_HelloMFC.cpp,单击确定按钮。在文档窗口中输 入代码 。 (4) 选择“工程”“设置”菜单命令,在出现的对话框中选择 “General”标签。然后在“Microsoft Foundation Classes”组合 框中,选择“Use MFC in a Shared DLL”。单击OK按钮。 (5) 程序运行后,单击鼠标左键,就会弹出一个对话框, 结果同Ex_HelloWin。 2.3.3 理解程序代码 1. 程序运行机制 MFC是使用afxwin.h来代替头文件windows.h,在Ex_HelloMFC 程序中却看不到Windows应用程序所必须的程序入口函数 inMain。 自动查找该应用程序类CHelloApp的全局变量eApp,然后自动 调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应 的函数来完成主窗口的构造和显示工作。 首先执行的是: m_pMainWnd = new CMainFrame(); 然后执行后面两 句,用 作窗口的显示和更新。 m_pMainWnd-ShowWindow(m_nCmdShow); m_pMainWnd-UpdateWindow(); 最后返回TRUE,表示窗口创建成功。 2.3.3 理解程序代码 映射一个消息的过程是由三个部分组成的: (1) 在处理消息的类中,使用消息宏LARE_MESSAGE_MAP() 声 明对消息映射的支持,并在该宏之前声明消息处理函数。 (2) 使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 宏在类声明之后的地方定义该类支持的消息映射入口点,所 有消息映射宏都添加在这里,当然不同的消息MFC都会有不 同的消息映射宏。 (3) 定义消息处理函数。例如: void CMainFrame:OnLButtonDown(UINT nFlags, CPoint point) MessageBox (“你好,我的Visual C+世界!“, “问候“, 0) ; CFrameWnd:OnLButtonDown(nFlags, point); 2.3.4 使用MFC AppWizard 表2.2 MFC AppWizard创建的应用程序类型 名 称项 目 ATL COM MFC AppWizard创建ATL(Active Template Library)应用模块工程 Cluster Resource Type Wizard创建Cluster Resource(用于Windows NT服务器) Custom MFC AppWizard创建自己的应用程序向导 Database Project创建数据库应用程序 DevStudio Add-in Wizard创建ActiveX组件或VBScript宏 Extended Stored Proc Wizard创建基于SQL服务器下的外部存储过程 ISAPI Extension Wizard创建Internet Server程序 MakeFile创建独立于Visual C+开发环境的应用程序 MFC ActiveX ControlWizard创建ActiveX Control应用程序 MFC AppWizard(dll)MFC的动态链 接库 MFC AppWizard(exe)一般MFC的Windows应用程序 Utility Project创建简单实 用的应用程序 Win32 Application其他Win32的Windows应用程序 Win32 Console ApplicationWin32的控制台应用程序 Win32 Dynamic-Link LibraryWin32的动态链 接库 Win32 Static LibraryWin32的静态链接库 2.3.4 使用MFC AppWizard 例Ex_SDIDemo 创建一个默认的单文档应用程序 1.开始 选择“文件”“新建”菜单,在弹出的“新建”对话框中选择“工 程”标签,这时显示出一系列的应用程序项目类型; 2 .选择程序类型 (1) 从应用程序类型单个文档(Single Document,简称 SDI)、 多重文档(Multiple Document ,简称MDI)和基本对话 框(Dia log Based,基于对话框的应用程序)中选择“单个文档” 。 (2) 决定应用程序中是否需要MFC的文档视图(“文档/查看 体 系结构支持”)结构的支持。 2.3.4 使用MFC AppWizard (3) 选择资源所使用的语言 3. 简单创建 保留其他的默认选项,单击完成按钮出现一个对话框,显示 出用户在步骤中作出的选择,单击确定按钮系统开始创建。 4. 编译并运行 到这里为止,用户虽然没有编写任何程序代码,但MFC AppW izard已经根据用户的选择内容自动生成基本的应用程序框架。 单击编译工具条 上的运行工具按钮 ”或按快捷键Ctrl+F5,系统开始编连并运行生成的单文档 应用程序可执行文件Ex_SDIDemo.exe 习 题 (1) 分别编写一个Win32 API应用程序和一个Win32 MFC应用程序,给定一元二次方程的系数,然后将求 解的结果用消息对话框显示出来。 (2) 编写一个Win32 API应用程序,在主窗口中创建 一个编辑框和一个按钮,单击按钮后,将编辑框的内 容用消息对话框显示出来。 (3) 用MFC AppWizard创建一个单文档应用程序,看 看该文档应用程序组成的类,并说明各类的基类,然 后简要说明各类的作用。 (4) 上机练习本章的示例。 mUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A- x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A- x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A- x*u$qZnWkShPdMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMbJ7G4C1z- w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ80z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z- w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWlThQeMbJ8G4D1A- w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A- x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZngOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A- x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A- x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒钢厂安全培训课件
- 房颤合并冠心病的抗栓治疗策略 3
- 正在协议书离婚
- 2025二手车买卖合同模板样式
- 《2025员工拒绝接受的劳动合同》
- 2025标准合同范本:知识产权许可使用合同
- 2025食品采购合同书范本
- 2025年借款合同范本
- 鹿泉国泰安全培训课件
- 高三毕业自我鉴定表
- 骨科疾病的深度学习研究
- 杭州师范大学2013年841无机化学考研真题
- 绿植租摆服务投标方案(完整技术标)
- 矿山安全培训课件-地下矿山开采安全技术
- 汪小兰版有机化学答案全
- DB32∕T 3751-2020 公共建筑能源审计标准
- DB51T 2975-2022气凝胶复合保温隔热材料及系统通用技术条件
- 高中音乐《学会聆听音乐》第三课时《联想与想象》 课件
- 实验,双子叶植物根类药材的鉴定课件
- 高中音乐鉴赏 第一单元 学会聆听 第一节《音乐要素及音乐语言》
- GB/T 40302-2021塑料立式软薄试样与小火焰源接触的燃烧性能测定
评论
0/150
提交评论