实验四 Microwindows窗口实验

一、 实验目的

   1.了解Microwindows 基本结构。

2.了解Microwindows 的两套API 调用及绘图原理。

3.写一个基于Microwindows API的窗口应用程序。

4.练习使用NanoX API 进行基本图形绘制。(参考函数手册)

二、实验内容

启动NanoX 服务器,在屏幕上绘制一个主窗口,在主窗口上绘制直线,矩形,圆,椭圆以及填充上颜色的矩形,圆和椭圆。

三、预备知识

1.掌握在linux 开发环境中编写和调试程序的基本过程。

2.了解ARM 应用程序的框架结构。

3.了解microwindows 运行环境的编译,安装和配置。

四、实验设备及工具(包括软件调试工具)

硬件:SZ7207G ARM 嵌入式开发板、PC Pentumn500 以上, 硬盘10G 以上。

软件:PC 机操作系统redhat linux 9.0minicomlinux 开发环境

五、实验步骤

1.进入ARM开发环境,或者进入模拟环境。

2.打开一个文件编辑器,键入以下代码,“//”及其后的内容为人为加入的注释内容:

#include <windows.h>   //MicrowindowsAPI声明

LRESULT CALLBACK wproc(HWND,UINT,WPARAM,LPARAM);  //声明过程函数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

                   PSTR szCmdLine, int iCmdShow) //32位程序进入点

{

        static char szAppName[]="Microwindows Application!";

        HWND hwnd;

        MSG msg;

        WNDCLASS wndclass;

 

        wndclass.style          = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

        wndclass.lpfnWndProc    = (WNDPROC)wproc;

        wndclass.cbClsExtra     =0;

        wndclass.cbWndExtra     =0;

        wndclass.hInstance      =0;

        wndclass.hIcon          =0;

        wndclass.hCursor        =0;

        wndclass.hbrBackground  =(HBRUSH)GetStockObject(LTGRAY_BRUSH);

        wndclass.lpszMenuName   =NULL;

        wndclass.lpszClassName  = szAppName;  

 

        RegisterClass(&wndclass);   //以上是设定一个窗口类,设定窗口属性,并注册

        hwnd=CreateWindowEx(0L,

                          szAppName,

                          "China",

                          WS_OVERLAPPEDWINDOW | WS_VISIBLE,

                          CW_USEDEFAULT,

                          CW_USEDEFAULT,

                          200, 200, NULL, NULL, NULL, NULL);

//创建一个窗口

              

              

        ShowWindow(hwnd,iCmdShow);

        UpdateWindow(hwnd); //显示、更新窗口。

       

        while (GetMessage(&msg,NULL,0,0)) {   //进入消息循环

                TranslateMessage(&msg);

                DispatchMessage(&msg);

        }     

        return msg.wParam;

}      

LRESULT CALLBACK wproc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{       //窗口过程处理函数,当有消息发产生,则该函数被自动调用。并对相就消息//进行处理。

        HDC hdc;

        PAINTSTRUCT ps;

        RECT rect;

       

        switch (iMsg) {

        case WM_CREATE:

                break;

        case WM_PAINT:    //不同重类的消息。

                hdc=BeginPaint(hwnd,&ps);

                GetClientRect(hwnd,&rect);

                DrawText(hdc, "The People's Republic of China!", -1, &rect,

                         DT_SINGLELINE|DT_CENTER|DT_VCENTER);

                EndPaint(hwnd,&ps);

                break;

        case WM_DESTROY:

                PostQuitMessage(0);

                break;

        default:

                return DefWindowProc(hwnd,iMsg,wParam,lParam);

        }     

        return (0);

}

3.编译,在开发环境下的终端里键入下面的命令:

arm-linux-gcc -o mircowindows1 mircowindows1.c  -I. -I/home/Micro/microwindows/src/include -I/usr/local/arm/2.95.3/arm-linux/include -I/usr/include -Wall -Wpointer-arith -O3 -ggdb -L/usr/X11R6/lib -lX11 -L/home/Micro/microwindows/src/lib -lmwin -lmwinlib -lmwengine -lmwdrivers -lmwfonts -lmwin -lmwimages -lm /usr/lib/libjpeg.a

由于Microwindows使用到许多的库过程,因此其命令行很长,gcc的参数意义也在前面的实验当中陈述过,你查看相应实验文档。

4microwindows1 文件加入到根系统文件(rootfs.img

将实验二中的rootfs.img复制到/home/Macro/armfile文件夹中,新建basicfs文件夹,在终端中进入/home/Macro/armfile,运行如下命令:

mount –o  loop rootfs.img basicfs

microwindows1 文件放入/home/Macro/armfile/ basicfs/usr/microwin/ref/bin。先进入/home/Macro/armfile/ basicfs/usr/microwin/ref/bin目录下执行如下命令。

cp /home/Micro/armfile/microwindows1 ./

umount basicfs

gzip rootfs.img

5.产生rootfs.img.gz文件,下载到开发板上,看是否能正确执行,也可以在模拟环境中检验。(提示:在开发板中有一个终端,进入到相应的目录,执行刚才下载的文件。

#cd /usr/microwin/bin

#./microwindows1

六、实验结果


 

七、实验思考

1.对比Microwindows APINano-X API的不同,及其开发模式之间的区别。你比较倾向于哪种模式的开发方式。

2.了解Microwindows的层次结构,及Nano-X的动行方式,有助于我们写出更好的程序,如果你有兴趣,你可以研究两者的源代码。

3.对于每一个程序,你可以写一个对应的Makefile文件来管理你的工程文件。熟悉Makefile的写作,有助于你减少枯燥的重复性工作,使你代码书写的工作,变得轻松而有趣。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值