云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > os实验指导书

os实验指导书

  • 62 次阅读
  • 3 次下载
  • 2025/6/16 5:15:44

实验五 操作系统接口

1.目的和要求

MS-DOS和Windows是市场上普及率很高的操作系统,本实验的目的是让读者从操作系统理论的观点加深对现代操作操作系统的接口设计的理解。

1. 实验内容

①熟悉DOS的基本命令,包括md,cd,copy,move,del,deltree,type等的使用

a、 当前目录下建立子目录MYTEMP和MYTEMP2,将当前目录设定为MYTEMP;

b、在当前目录下创建新文件B.BAT,其内容为:清除屏幕内容,显示当前DOS版本; c、 使用type命令显示B.BAT的内容,检查正确后,执行它; d、拷贝B.BAT到路径MYTEMP中; e、 删除MYTEMP2中的文件B.BAT,删除目录MYTEMP2; f、 使用deltree命令删除MYTEMP ② 理解WINDOWS下的编程接口原理,了解WINAPI,利用WINAPI实现WINDOWS下的打印。

a、 登录进入Windows b、在“开始”菜单中单击“程序”“-Microsoft Visual Studio 6.0”“-Microsoft

Visual C++ 6.0”命令,进入Visual C++ 窗口。 c、 在File菜单单击New Workspace...命令,创建PrintApp.dsw项目文件。 d、在File菜单单击New C++ Soure file命令,创建新的原文件。 e、 输入如实验运行结果中所示的源代码,调试、编译并运行。 f、 观察执行结果,理解各个函数的功能。

3.实验环境

Windows操作系统和Visual C++6.0专业版或企业版

4. 实验提示

传统的Windows打印程序设计

在本实验中,我们通过研究示例程序来了解传统Windows的打印过程。 在Windows下,基本的打印过程有如下六步:

1) 调用CreateDC() 函数获得打印机DC (设备描述环境) 。 2) 调用StartDoc() 函数启动文档。 3) 调用StartPage() 函数打印一页。 4) 把文档提交给打印机DC。

5) 调用EndPage() 函数结束一页。

对文档中要打印的每一页都重复步骤 3) 至 5) 。 6) 调用EndDoc() 函数结束打印任务。

为了确定与系统相连接的打印机的型号,应用程序必须搜索用户的WIN.INI

文件或调用Windows的EnumPrinters() API函数。而调用EnumPrinters() 函数是最容易的方法。

EnumPrinters() 函数的定义如下所示: BOOL EnumPrinters( DWORD Flags, LPTSTR Name, DWORD Level,

LPBYTE pPrinterEnum, DWORD cbBuf,

LPDWORD pcbNeeded, LPDWORD pcReturned, ) ;

函数各参数按顺序描述如下: Flags 表明所需打印机类型的标志 Name 打印机对象的名称 Level 打印机信息结构的类型 pPrintereEum 指向打印机信息结构的指针 cbBuf 打印机信息数组的大小 pcbNeeded 指向保存复制到打印机信息数组中的字节数变量

的指针

pcReturned 指向保存复制到数组中的打印机信息结构的变量

的指针

其中某些参数根据打印机的不同描述而具有许多不同的值。但是,大部分情况下,关心的只是获得缺省的打印机。为了对应用程序进行编程,以便要求Windows提供缺省的打印机,可使用如下代码: PRINTER_INFO_5 printerInfo5[3] ; DWORD needed, returned;

EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, (LPBYTE) printerInfo5,

sizeof(printerInfo5) , &needed, &returned) ;

如果上述代码段执行成功,那么在第一个打印机信息结构的pPrinteName成员中就有了缺省打印机的名称。可以按以下方式来访问该成员: printerInfo5[0].pPrinterName

为了给打印机创建DC,需要准确地知道打印机名称。为了获得该DC,可调用CreateDC() : HDC printDC;

printDC = CreateDC(NULL, printerInfo5[0].pPrinterName, NULL, NULL) ; 这里,把打印机的系统名称作为第二个参数,其余参数都应该为NULL。

一旦有了用户打印机的DC,就可以开始打印文档。首先,调用Windows API函数StartDoc() ,开始把文档发送到系统的后台打印程序中。函数调用成功则返回打印机任务的标识符;否则返回小于或等于零的值。

StartDoc() 的一个参数是指向DOCINFO结构的指针。必须初始化此结构的成员才能调用StartDoc() 。在大多数情况下,只需将此结构的大小放在cbSize成员中,把指向文档名称的指针放在lpszDocName成员中,其余成员可以是NULL或零。整个过程类似于如下形式: char docName[] = “RectangleDoc” ;

DOCINFO docInfo;

docInfo.cbSize = sizeof(docInfo) ; docInfo.lpszDocName = docName; docInfo.lpszOutput = NULL; docInfo.lpszDatatype = NULL; docInfo.fwType = 0;

result = StartDoc(printDC, &docInfo) ; if (result <=0 ) {

MessageBox(0, “StartDoc() failed” ,

“Basic Print App”, MB_OK | MB_ICONERROR) ; return; }

如果调用StartDoc() 成功,则可以通过调用StartPage() 来打印第一页。StartPage() 函数只有单一参数,即打印机的DC。函数调用成功则返回大于零的值,否则返回小于或等于零的值。打印第一页的代码类似如下程序片断: result = StartPage(printDC) ; if (result <= 0 ) {

MessageBox(0, “StartPage() failed”,

“Basic Print App” , MB_OK | MB_ICONERROR return; }

一旦开始打印第一页,那么只需要把输出导向打印机DC。由于屏幕上的点的大小与大多数打印机上的点的大小不同,所以通常还需要缩放发往打印机的数据。

打印一页之后,可调用EndPage() 函数以结束当前页。与StartPage() 一样,EndPage() 需要打印机DC作为其惟一的参数。并且,EndPage() 调用成功,则返回大于零的值;如果不成功,返回零或小于零的值。结束一页的代码类似于如下片断:

result = EndPage(printDC) ; if (result <= 0 ) {

MessageBox(0, “EndPage() = failed” ,

“Basic Print App” , MB_OK | MB_ICONERROR return; }

至此,应用程序可再一次调用StartPage() 以打印另一页,也可调用EndDoc() 以结束打印任务:

EndDoc(printDC) ;

5. 实验运行结果

PrintApp示例应用程序

清单PrintApp.c显示的一段Windows程序能够在缺省的打印机上打印矩形和一行文本。

清单BasicPrintApp.c 标准Windows打印程序 # include

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) ; void PrintRectangle() ;

int WINAPI WinMain(HINSTANCE hCurrentInst,

HINSTANCE hPrevInstance, PSTR lpszCmdLine, int nCmdShow) {

WNDCLASS wndClass; HWND hWnd; MSG msg; UINT width; UINT height;

wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0 ; wndClass.cbWndExtra = 0 ;

wndClass.hInstance = hCurrentInst;

wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION) ; wndClass.hCursor = LoadCursor(NULL, IDC_ARROW) ;

wndClass.hbrBackground = GetStockObject(WHITE_BRUSH) ; wndClass.lpszMenuName = NULL;

wndClass.lpszClassName = “BasicPrintApp” ;

RegisterClass(&wndClass) ;

width = GetSystemMetrics(SM_CXSCREEN) / 2; height = GetSystemMetrics(SM_CYSCREEN) / 2;

hWnd = CreateWindow( “BasicPrintApp” , /* 窗口类的名称 */ “Basic Print App” , /* 标题栏的文本 */ WS_OVERLAPPEDWINDOW, /* 窗口的样式 */ 10, /* X位置 */ 10, /* Y位置 */ width, /* 宽度 */ height, /* 高度 */ NULL, /* 父窗口的句柄 */ NULL, /* 菜单句柄 */ hCurrentInst, /* 示例句柄 */ NULL) ; /* 无其他数据 */

ShowWindow(hWnd, nCmdShow) ;

UpdateWindow(hWnd) ;

while (GetMessage(&msg, NULL, 0, 0) ) {

TranslateMessage(&msg) ; DispatchMessage(&msg) ;

搜索更多关于: os实验指导书 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

实验五 操作系统接口 1.目的和要求 MS-DOS和Windows是市场上普及率很高的操作系统,本实验的目的是让读者从操作系统理论的观点加深对现代操作操作系统的接口设计的理解。 1. 实验内容 ①熟悉DOS的基本命令,包括md,cd,copy,move,del,deltree,type等的使用 a、 当前目录下建立子目录MYTEMP和MYTEMP2,将当前目录设定为MYTEMP; b、在当前目录下创建新文件B.BAT,其内容为:清除屏幕内容,显示当前DOS版本; c、 使用type命令显示B.BAT的内容,检查正确后,执行它; d、拷贝B.BAT到路径MYTEMP中; e、 删除MYTEMP2中的文件B.BAT,删除目录MYTEMP2; f、 使用deltree命令删除MYTEMP ② 理解WIND

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com