一、 实验目的
1.了解Microwindows 基本结构。
2.了解Microwindows 的两套API 调用及绘图原理。
3.写一个基于Microwindows API的窗口应用程序并创建窗口控件。
二、实验内容
1.掌握使用 Microwindows API应用程序开发的过程。
2.了解Microwindows的消息处理机制。
3.掌握Microwindows API与Nano-X API的区别。
4.掌握Microwindows API应用程序的开发模式。
三、预备知识
1.掌握在linux 开发环境中编写和调试程序的基本过程。
2.了解ARM 应用程序的框架结构。
3.了解microwindows 运行环境的编译,安装和配置。
四、实验设备及工具(包括软件调试工具)
硬件:SZ7207G ARM 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。
软件:PC 机操作系统redhat linux 9.0+ minicom+ linux 开发环境
五、实验步骤
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-X及FLNX的方式,哪一种更为方便。
2.在这几个程序中,并没有使用很多的Microwindows API,查看其API文档,并在不同的程序加入这些API的应用,看会产生什么效果,当然要包含相应用头文件。具体资料查看其资料文档。