实验六 Microwindows创建窗口控件

一、 实验目的

   1.了解Microwindows 基本结构。

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

3.写一个基于Microwindows API的窗口应用程序并创建窗口控件。

二、实验内容

1.掌握使用 Microwindows API应用程序开发的过程。

2.了解Microwindows的消息处理机制。

3.掌握Microwindows APINano-X API的区别。

4.掌握Microwindows API应用程序的开发模式。

三、预备知识

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

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

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

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

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

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

五、实验步骤

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

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

#define MWINCLUDECOLORS

#include <windows.h>

 

LRESULT CALLBACK wproc(HWND,UINT,WPARAM,LPARAM);

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

                   PSTR szCmdLine, int iCmdShow)

{

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

        HWND hwnd;

        MSG msg;

        WNDCLASS wndclass;

       int width, height;

       RECT r;

        HWND hlist,hedit;

       GetWindowRect(GetDesktopWindow(), &r);

       width = height = r.right / 2;

       MwRegisterButtonControl(NULL);

       MwRegisterEditControl(NULL);

       MwRegisterListboxControl(NULL);

       MwRegisterProgressBarControl(NULL);

       MwRegisterStaticControl(NULL);

       MwRegisterComboboxControl(NULL);

       MwRegisterScrollbarControl(NULL);   //注册不同的窗口控件

        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,

                          "Microwindows Application Demo",

                          WS_OVERLAPPEDWINDOW | WS_VISIBLE,

                          CW_USEDEFAULT,

                          CW_USEDEFAULT,

                          width,  /* 80, */

                          height, /* 80, */

                          NULL, NULL, NULL, NULL);

       hedit=CreateWindowEx(0L, "EDIT","OK",WS_BORDER|WS_CHILD | WS_VISIBLE,

              width * 5 / 8, 10, 100, 18,

              hwnd, (HMENU)5, NULL, NULL);

       CreateWindowEx(0L, "PROGBAR",

              "OK",WS_BORDER|WS_CHILD | WS_VISIBLE,

              width * 5 / 8, 32, 100, 18,hwnd, (HMENU)6, NULL, NULL);

 

       hlist = CreateWindowEx(0L, "LISTBOX",

              "OK",WS_VSCROLL|WS_BORDER|WS_CHILD | WS_VISIBLE,

  width * 5 / 8, 54, 100, 54,hwnd, (HMENU)7, NULL, NULL); //创建不同的控件窗口

 

       SendMessage(hlist, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Cherry");

       SendMessage(hlist, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Apple");

       SendMessage(hlist, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Orange");

       SendMessage(hlist, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Banana");

       SendMessage(hlist, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Smooth");

 

       CreateWindowEx(0L, "BUTTON",

              "Cancel", WS_CHILD | WS_VISIBLE,       width * 5 / 8 + 50, 106+16+6, 50, 14,

              hwnd, (HMENU)8, NULL, NULL); //创建不同的控件窗口

 

       CreateWindowEx(0L, "STATIC",  "Static",  WS_CHILD | WS_VISIBLE,

              width * 5 / 8, 106+34+6, 100, 18, hwnd, (HMENU)9, NULL, NULL);

//创建不同的控件窗口

       CreateWindowEx(0L, "SCROLLBAR","OK",SBS_VERT |

       WS_CHILD | WS_VISIBLE ,width * 5 / 8 -(18*2), 106+68, 18, 128,

              hwnd, (HMENU)11, NULL, NULL);  //创建不同的控件窗口

 

       CreateWindowEx(0L, "SCROLLBAR","OK",SBS_HORZ |

              WS_CHILD | WS_VISIBLE ,width * 5 / 8 -18 , 106+68, 128, 18,

              hwnd, (HMENU)12, 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;

       HGDIOBJ oldfont;

       

        switch (iMsg) {

        case WM_CREATE:

                break;

        case WM_PAINT:

                hdc=BeginPaint(hwnd,&ps);

                GetClientRect(hwnd,&rect);

               oldfont=SelectObject(hdc,CreateFont(12,

                     0,0,0,0,0,0,0,0,0,0,0,

                     FF_DONTCARE|DEFAULT_PITCH,

                     "HZXFONT"));

                DrawText(hdc, "Microwindows Control", -1, &rect,

                         DT_SINGLELINE|DT_CENTER|DT_VCENTER);

              DeleteObject(SelectObject(hdc,oldfont));

                EndPaint(hwnd,&ps);

                break;

        case WM_DESTROY:

                PostQuitMessage(0);

                break;

        default:

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

        }     

        return 0;

}

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

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

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

4.同实验四、三、4

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

六、实验结果

 

七、实验思考

1.在Microwindows可能创建不同的窗口控件,查看相关的文档,比较Nano-XFLNX的方式,哪一种更为方便。

2.在这几个程序中,并没有使用很多的Microwindows API,查看其API文档,并在不同的程序加入这些API的应用,看会产生什么效果,当然要包含相应用头文件。具体资料查看其资料文档。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值