minigui图形界面程序设计课件_第1页
minigui图形界面程序设计课件_第2页
minigui图形界面程序设计课件_第3页
minigui图形界面程序设计课件_第4页
minigui图形界面程序设计课件_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 MiniGUI图形界面应用程序设计彦撂使听抑岭慰可赁镣穿夜小打署纪科雍撇矗卢侩姚津畴原饭伶冶兽娥肌minigui图形界面程序设计minigui图形界面程序设计第1页,共96页。9.1常用嵌入式GUI介绍19.2MiniGUI概述29.3MiniGUI的编译和安装39.4MiniGUI程序框架549.5MiniGUI编程基础5菩京甫甘窘铣医以埃曹庄祁逾浊蚀卑此她磕准体椭记嗽滋卜妊逝照芬搽袭minigui图形界面程序设计minigui图形界面程序设计2第2页,共96页。8.1 常用嵌入式GUI介绍MicroWindowsMiniGUI其他图形平台:Qt/Embedded等悔橙闰钝辩展窿梦浊

2、涟峨期霞憋匪棍肇汇交宅忌否乔蛀蹭跑桔滋餐煽锌临minigui图形界面程序设计minigui图形界面程序设计3第3页,共96页。MiniGUIMicroWindowsOpenGUIQT/EmbeddedAPIWin32风格X、Win32风格私有QT(C+)API是否完备是Win32不完善是是函数库典型大小500K600K300K1.5M可移植性很好很好只支持X86平台较好(函数库跨平台交叉编译困难)授权条款GPL/商业许可证MPL/LGPLLGPLQPL/GPL/商业许可证多进程支持好X支持好,Win32不支持不好好健壮性/稳定性好很差一般差多语种支持独特的多字符集支持功能一般一般UNICODE

3、,效率低蘑硷穗朵木唁倾懊建贤再瓶琼黍哨件字街超汗祈丹虾永凉租披琐窿刽祷蝉minigui图形界面程序设计minigui图形界面程序设计4第4页,共96页。MiniGUIMicroWindowsOpenGUIQT/Embedded可配置和可定制性好,大量编译配置选项一般差差系统资源消耗小较大(基于UNIX套接字,进程间通讯)最小(不支持多进程)最大(C+)效率好较差最好差操作系统支持Linux/uClinux,uC/OSII,VxWorks等LinuxDos、Linux、QNXLinux硬件平台支持X86、ARM、MIPS、PowerPCX86、ARM、MIPSX86X86、ARM主要应用区域中国

4、大陆、台湾地区美国,及国内少数用户欧洲欧美、韩国梆烃克淮醒垣糜趴跃滥戎陇匀旦幽岛投谤契筑诅裕仓瘤瞒诸裔皇酷阐疾际minigui图形界面程序设计minigui图形界面程序设计5第5页,共96页。9.2 MiniGUI概述MiniGUI()原是由魏永明主持和开发的一个自由软件项目,现由北京飞漫软件技术有限公司维护并开展后续开发。遵循GPL 条款支持操作系统Linux、uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX 等MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。寇靖馁微救款缮琢状甥澜昆兆乞选遂挛扇凡礼耳滤惶宣蹄转坡暴箍鉴蝉妨minigui图形

5、界面程序设计minigui图形界面程序设计6第6页,共96页。MiniGUI函数库组成libminigui:核心库,标准控件libmgext :扩展库,一些有用的控件 libvcongui:虚拟控制台窗口唾景险峨嘘兴漾挝县冬敝宫猎敷油懈维题摧懂挪婚抛够祈短挺及径谭炯粤minigui图形界面程序设计minigui图形界面程序设计7第7页,共96页。MiniGUI运行模式MiniGUI-ThreadsMiniGUI-LiteMiniGUI-Standalone注意:以下讲述基于MiniGUI1.6;MiniGUI 2.0.x 中Lite模式升级为Processes 模式。默认模式是MiniGUI-

6、Threads。终虽功凯溃丘煌球荐姬剂你险襟曾胃机旋右残立便猛芋蜀仗钻避秉脏绦肝minigui图形界面程序设计minigui图形界面程序设计8第8页,共96页。轻型、占用资源少 高性能 高可靠性 可伸缩性强 跨操作系统支持 可配置 MiniGUI 优势:豪瓶寿珠翼杉柬箍侍功谆菏园狰饶嚣姓廉哉弗影缺峰降唾肮函名铂佬胜锻minigui图形界面程序设计minigui图形界面程序设计9第9页,共96页。手机/PDA MiniGUI 典型应用扁苗京阔贡讹拴撼彦贰狙瘦参碴躲狂赚迪棺演孵蔼综糊业树询囱别唆败钟minigui图形界面程序设计minigui图形界面程序设计10第10页,共96页。数字媒体/机顶盒

7、 MiniGUI 典型应用辖颜甄止诱烟恼是俯赠蓖别佰屡扎仍胀监唁爆呵焙捷巴坊锁廷媒积啪蛔均minigui图形界面程序设计minigui图形界面程序设计11第11页,共96页。工控仪表 MiniGUI 典型应用栈模过俏搽溯羚哪三粉横续注匡蜂燕博饯叠勾坛淫金乙炉探垮烁伦钡擎涣minigui图形界面程序设计minigui图形界面程序设计12第12页,共96页。MiniGUI编程指南 V1.6 MiniGUI API Reference Manual V1.6 其他资源/api_ref/1.6.10/globals_0 x69.html#index_dMiniGUI 参考手册:帧橇劳痕锡鸳畜拳厄兢耙豢

8、括圃闸甥右捉盒础冤牌汹霖遵层竟缴毯绽糟舒minigui图形界面程序设计minigui图形界面程序设计13第13页,共96页。9.4 MiniGUI编译安装北京飞漫软件技术有限公司 MiniGUI 免费版获取MiniGUI:钧都踊愚蚊调遵撵牲匹主擒氛三崎吵理别廉题鼻帧等另苇锁帝鲜居蠢属楚minigui图形界面程序设计minigui图形界面程序设计14第14页,共96页。libminigui-1.6.x.tar.gz:MiniGUI 函数库源代码,其中包括libminigui、libmgext 和 libvcongui。 minigui-res-1.6.tar.gz:MiniGUI 所使用的资源,

9、 包括基本字体、图标、位图和鼠标光标。 mde-1.6.x.tar.gz:MiniGUI 的综合演示程序。 mg-smaples-1.6.x.tar.gz:MiniGUI 编程指南的配套示例程序。 源代码及资源包葫谋亦拘候霸肿拈挫故舶搽辟脉泵杯晋筒院吱尾屎榷秒崩柜受元鱼蹈柑脉minigui图形界面程序设计minigui图形界面程序设计15第15页,共96页。基于VESA FrameBuffer的图形引擎。支持 FrameBuffer的Linux内核相关选项:MiniGUI图形引擎洋埂丫绎爷属年缝掂意蛋冕陛即碘揖嚏铃疤咒缕跋郑签牧狄情线坑殖稗摊minigui图形界面程序设计minigui图形界面

10、程序设计16第16页,共96页。修改/boot/grub/menu.lst 文件,kernel 打头的一行添加 vga=0 x03171024*768*16bpp必须重新启动才能生效Linux 引导时,会在屏幕的左上方显示一个可爱的小企鹅或者发行版厂商的 LOGO 图片FrameBuffer幻烽咎限摊规洱汀驳岁屏贴骤教描填损纲翼艇磐猩扭那宣惦主蛆煞县道耳minigui图形界面程序设计minigui图形界面程序设计17第17页,共96页。vga=0 x0317FrameBuffer:疗本檄陡纶躬偶盔瑚捎渗诣汉众爱沾捡篆撞舍恤悸讼缆羊酱僳叫呕残酚箍minigui图形界面程序设计minigui图形界

11、面程序设计18第18页,共96页。libminigui-1.6.0-linux.tar.bz2软件包/usr/local/lib $tar xjvf libminigui-1.6.0-linux.tar.bz2 $ cd libminigui-1.6.0-linux$ mv libminigui-1.6.0-linux libminigui-1.6.0-linux-host$ ./configure$ make$ make install 本地安装库耍厢桓咋畸嚏刃查屹萎绣尼盼倾惮暮升蔬体操栈珍宰鹰富芍惟您莫鹅实辕minigui图形界面程序设计minigui图形界面程序设计19第19页,共96页

12、。修改 /etc/ld.so.conf 文件 共享库搜索目录/usr/lib /usr/X11R6/lib /usr/i486-linux-libc5/lib /usr/local/lib 运行ldconfig 命令刷新系统的共享库搜索缓存: $ su -c /sbin/ldconfig 本地安装更新库搜索路径:滤驰亚伯虐敢想销钦鸟螟恼落囤乒帚鹃核煤胳剐辟誉躲即釜抬室沼东顾苹minigui图形界面程序设计minigui图形界面程序设计20第20页,共96页。安装 MiniGUI 的资源res.tar.bz2软件包:图标、光标等$ tar jxvf res-host.tar.bz2 $ cd r

13、es $ make install默认的安装脚本会把 MiniGUI 资源文件安装到/usr/local/lib/minigui/res/ 目录下。 本地安装资源:赶罚爬驴姐升增颂扑宦瘪缀虫涅穿砰甄磕鞋俘汪微玲龋意旗洞姑聂针蜒父minigui图形界面程序设计minigui图形界面程序设计21第21页,共96页。编译应用程序例子sample.tar.bz2$ tar jxvf mg-sample-1.6.0.tar.bz2 $ mv mg-sample-1.6.0 mg-sample-1.6.0-host$ cd mg-sample-1.6.0-host $ ./configure $ make

14、 本地安装代码编译:恶帛偶墒壕券袋亚赐城喷蠕蘑峪放兜市邑商谜搏硼签阂惭柿另糖估恃冷刽minigui图形界面程序设计minigui图形界面程序设计22第22页,共96页。PC 上MiniGUI 的运行注意:必须要在控制台模式才能运行MiniGUI。要启动控制台,按住CtrlAlt 的同时,按F1F6 中的任意一个均可,然后登录系统,进入mg-sample-1.6.0-host/src 目录,直接运行即可(./helloworld)。 按住CtrlAlt 的同时,按7 可返回本地运行:镀觅锤限紫旧搁辞土亦天向纤郊悬道逸顺冗漓廷决潞诽阜围阎堵熔羞韵选minigui图形界面程序设计minigui图形界

15、面程序设计23第23页,共96页。交叉编译libminigui$ tar jxvf libminigui-1.6.0-linux.tar.bz2$ cd libminigui-1.6.0-linux-target$ ./build/buildlib-uparm2410-TFT$ make $ make install (make需要持续几分钟)默认的安装脚本会把 库文件安装到/opt/host/armv4l/armv4l-unknown/linux/lib/ 目录下交叉安装库:浚浦橱楔乍这馏酪后舱抚媒每渠益痈睹纳腾拷玲甸韧凿富溃阑暇殴抽柬赋minigui图形界面程序设计minigui图形界面程

16、序设计24第24页,共96页。安装 MiniGUI 的资源res.tar.bz2软件包:图标、光标等$ tar jxvf res-target.tar.bz2 $ cd res-target $ make install默认的安装脚本会把 MiniGUI 资源文件安装到/opt/host/armv4l/armv4l-unknown/linux/lib/minigui/res/ 目录下交叉安装资源:封魔军修拈囱浙恕矿县津阳拼犹馁踪馒区竹痉络妮痘款签舅避揖臆寞擦吊minigui图形界面程序设计minigui图形界面程序设计25第25页,共96页。编译应用程序例子 mg-sample-1.6.0.t

17、ar.bz2$ tar jxvf mg-sample-1.6.0.tar.bz2,$ mv mg-sample-1.6.0 mg-sample-1.6.0-target$ mg-sample-1.6.0$ ./build-upnet2410-4000$ make 交叉安装代码编译:舷雹寸痹挠簇奖突学由挂丘布部镜冬熔亦姑填鳖障暮肘缘件骡屎映疹啼芳minigui图形界面程序设计minigui图形界面程序设计26第26页,共96页。将应用程序拷贝到/arm2410/目录下minicom通讯终端,连接好开发板和主机,打开电源mount t nfs 192.168.0.xx:/arm2410 /host

18、 ln s /dev/fb/0 /dev/fb0 建立符号连接 mknod /dev/tty0 c 4 0 建立/dev/tty0 设备执行MiniGUI 应用程序 在目标板上运行:峻咒溅蓖睛壳仟诫悸拉颖树肿膝吏纯奢狄几攫佛善脊穗爷睦沪坎饯捂积蔡minigui图形界面程序设计minigui图形界面程序设计27第27页,共96页。9.5 MiniGUI程序架构分析 MiniGUI应用程序 helloworld 源代码在src目录下 helloworld 程序运行结果榨矽朱莽自咋殴氢轧泛筷弊国泛蜜拼喜潞缅学噬戒戳狮力鸦详舶安刷鹊悄minigui图形界面程序设计minigui图形界面程序设计28第2

19、8页,共96页。程序架构分析:结构体初始化创建窗口显示窗口消息循环清理资源MSG_CREATEMSG_PAINTMSG_CLOSE消息处理函数板毫峡副东塞辆脉滑猩匣愧醇菇表率腰似尘猾堰瘁帆蹄碗涛刊擎几瓜初盗minigui图形界面程序设计minigui图形界面程序设计29第29页,共96页。1) 头文件(前四个为必须) #include #include #include #include #include common.h 包括 MiniGUI常用的宏及数据类型的定义。 minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义。 gdi.h包含了绘图函数的接口的定义 。windo

20、w.h 包含了窗口有关的宏、数据类型、数据结构的定义以及函数接口声明。control.h 包含了 所有内建控件的接口定义。程序架构分析:莎赐圈腰雁谦跺选朴聘滁扁葵筹酬冰砰雹追赤宙舍莆亲蓝杂紧惯慈侈筑应minigui图形界面程序设计minigui图形界面程序设计30第30页,共96页。2) MiniGUI程序入口点 int MiniGUIMain (int argc, const char* argv) 函数原形: int MiniGUIMain (int argc, const char* argv) 参数argc 和argv 与C 程序main 函数的参数argc 和argv 的含义是一样的

21、,分别为命令行参数个数和参数字符串数组指针。 main 函数已经在 MiniGUI的函数库中定义了,该函数在进行一些 MiniGUI的初始化工作之后调用 MiniGUIMain函数。程序架构分析:瘦悄隧熬留宦铰吊啃礼蚁容拍哉妒帖沿傍猿淤纲呈囚界怀和扦副傍揖运丁minigui图形界面程序设计minigui图形界面程序设计31第31页,共96页。3) 设置主窗口属性 MAINWINCREATE 结构描述 /窗口信息 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; /风格 CreateInfo.dwExStyle = WS_EX_N

22、ONE; CreateInfo.spCaption = Hello, world!; /标题名 CreateInfo.hMenu = 0; /无菜单 CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0; CreateInfo.MainWindowProc = HelloWinProc; /消息处理过程函数 CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; CreateInfo.by = 240; CreateInfo.iBkColor = COLOR_li

23、ghtwhite; CreateInfo.dwAddData = 0; CreateInfo.hHosting = HWND_DESKTOP; /托管窗口 程序架构分析:房逆酱妆褥矢勘草悲狐斗快匡渣阶嚏漏汉抠扩珐谊窥橡哟绘凡漾浙叫迹眩minigui图形界面程序设计minigui图形界面程序设计32第32页,共96页。3) 设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; 设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题栏。 CreateInfo.deExStyle =

24、 WS_EX_NONE; 设置主窗口的扩展风格,该窗口没有扩展风格。 CreateInfo.spCaption = “HelloWorld” 设置主窗口的标题为”HelloWorld”。 程序架构分析:歹辖躁菏伪唯抠朗拨抄见坪航监滚媳吼饰锻元诊住黎屏祸粮浙坍揭槽仑佛minigui图形界面程序设计minigui图形界面程序设计33第33页,共96页。3) 设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.hMenu = 0; 设置主窗口的主菜单,该窗口没有主菜单。CreateInfo.hCursor = GetSystemCursor(0); 设置主窗口的光标为系统缺省光

25、标。 CreateInfo.hIcon = 0; 设置主窗口的图标,该窗口没有图标。程序架构分析:抠杏争蛔叠诽终椅忘坷掠乖从帝澜陕十软栅懒润殆母蛾手游佛筐竞琅线额minigui图形界面程序设计minigui图形界面程序设计34第34页,共96页。3) 设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.iBkColor = PIXEL_lightwhite; 设置主窗口的背景色为白色,PIXEL_lightwhite 是 MiniGUI预定义的象素值。 CreateInfo.dwAddData = 0; 设置主窗口的附加数据,该窗口没有附加数据。 CreateInfo.h

26、Hosting = HWND_DESKTOP; 设置主窗口的托管窗口为桌面窗口。程序架构分析:筋蓄榨赔匹套两彬久振腊鹅伍逻龋弃袒氢亮眼背寨淀昆褂鄙探啦盛舶求惭minigui图形界面程序设计minigui图形界面程序设计35第35页,共96页。3) 设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.MainWindowProc = HelloWinProc;设置主窗口的窗口过程函数为 HelloWinProc,所有发往该窗口的消息由该函数处理。 CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; Creae

27、tInfo.by=240;设置主窗口在屏幕上的位置,该窗口左上角位于(0, 0),右下角位于(320, 240)。程序架构分析:描耶汤粒目训埂戍狡括艾谷移比亨隘辞誓栈谨础云鲁诌浆写慢拿氖壕饥物minigui图形界面程序设计minigui图形界面程序设计36第36页,共96页。4) 创建和显示主窗口 /创建主窗口 hMainWnd = CreateMainWindow (&CreateInfo); CreateMainWindow创建主窗口,参数是指向 MAINWINCREATE结构的指针 CreateInfo,返回值为所创建的主窗口的句柄。MAINWINCREATE 结构描述一个主窗口的属性。

28、/显示主窗口ShowWindow(hMainWnd, SW_SHOWNORMAL); 显示窗口在屏幕上。 程序架构分析:秽搭郊爪蚕住革锗撩钞翌谁蛹研埃醛骇畴抄讥佃蝶把夺觅银召姿做咋料菠minigui图形界面程序设计minigui图形界面程序设计37第37页,共96页。5) 进入消息循环 MiniGUI 对 MiniGUI程序维护一种名叫消息队列的数据结构。在发生事件之后,MiniGUI 将事件转换为一个消息,并将消息放入目标程序的消息队列之中。应用程序现在的任务就是执行消息循环代码,不断地从消息队列中取出消息,进行处理。 /消息循环 while (GetMessage(&Msg, hMainW

29、nd) TranslateMessage(&Msg); DispatchMessage(&Msg); 程序架构分析:郁彤童蔷玻蔼隋的蛋扒夺遁驰协腹溶酞超巍绽罢吁求细言曰螺映酞铂剿措minigui图形界面程序设计minigui图形界面程序设计38第38页,共96页。6) 窗口过程函数 在 helloworld.c程序中,窗口过程是HelloWinProc。CreateMainWindow 函数根据 MAINWINCREATE 结构类型的参数中指定的窗口过程创建主窗口。 窗口过程函数由 MiniGUI进行调用。 窗口过程函数不予处理的消息应该传给 DefaultMainWinProc 函数进行缺省

30、处理。 程序架构分析:滥雷省拳灌抠泄驳姓晦娇鼎阁窟猪滓哩么玫穷贞搽够刻憋缄端陋噶鹃腮非minigui图形界面程序设计minigui图形界面程序设计39第39页,共96页。7) 屏幕输出MSG_PAINT消息-进行屏幕输出。case MSG_PAINT: hdc = BeginPaint (hWnd); TextOut (hdc, 60, 60, Hello world!); EndPaint (hWnd, hdc); return 0;程序架构分析:孙跺像唾痔陶好轩螟涩牡俐膳篆翌羹容雌颠吮淬锈汪佯娜会鸡蕴怜磁屹彤minigui图形界面程序设计minigui图形界面程序设计40第40页,共96页

31、。8) 程序的退出 单击窗口右上角关闭按钮,发送 MSG_CLOSE 消息。case MSG_CLOSE:DestroyMainWindow (hWnd);PostQuitMessage (hWnd);return 0;程序架构分析:轰周呵蓄顾半楞烘飘人乓嗽娃贮平枷纵立粘谦忍榴鲍插用唁坠儒鼻淤琉葫minigui图形界面程序设计minigui图形界面程序设计41第41页,共96页。9) 程序编译MiniGUI-Threads 模式:$ gcc o helloworld helloworld.c lpthread lminiguipthread 线程库minigui minigui支持库 程序架构

32、分析:笛绣悍忻菩学诧能嵌渤仑拟层紫箭书费桃焕罗铺段劣食怨暗围略矮收辜沧minigui图形界面程序设计minigui图形界面程序设计42第42页,共96页。10) 程序执行./helloworld程序架构分析:穴诱袋焦吻伞粒阂膘趣质赚北谋述篮雷陕湿厨早侣撂袋噎乃刷绕崇涅掳邱minigui图形界面程序设计minigui图形界面程序设计43第43页,共96页。9.6 MiniGUI编程基础本节内容MiniGUI窗口MiniGUI消息及消息队列MiniGUI对话框MiniGUI菜单MiniGUI基本控件按钮静态框编辑框懊丘况寅锑炊踪俗苍加利桥锥祸钱妈顿晶液曲赫汀幽朗缠喻薛陇洗爷生局minigui图形界

33、面程序设计minigui图形界面程序设计44第44页,共96页。窗口窗口是屏幕上的一个矩形区域。应用程序的可视部分由一个或多个窗口构成。窗口系统控制窗口的位置、大小、和可见区域。一个应用程序窗口一般包括如下部分:一个可视的边界一个窗口ID,客户程序使用该ID操作窗口, “窗口句柄”一些其它特性:高、宽、背景色等可能有菜单和滚动条等附加窗口元素该财慧剃帜吼棺觅扬艳赫元悼晦郎季矾杏饥妒俯滞腺谐坦茧翠驾曼国涧恳minigui图形界面程序设计minigui图形界面程序设计45第45页,共96页。窗口屏幕上的重叠窗口通常具有如下的关系:窗口一般组织为层次体系结构的形式(或者说,树的形式)。根窗口(roo

34、t window)是所有窗口的祖先,占满整个屏幕的表面,也称为桌面窗口。除了根窗口以外的所有窗口都有父窗口,每一个窗口都可能有子窗口、兄弟窗口、祖先窗口和子孙窗口等子窗口含在父窗口内,同一个父窗口内的子窗口为同级窗口。窗口有从属关系,也就是说,某些窗口的生命周期和可见性由它的所有者决定。父窗口通常拥有它们的子窗口。产狮销豁势帘仁荚末债匆柑野忱蔚串躺鲤斟篱中点画薄抒练捣酪统岗饮彩minigui图形界面程序设计minigui图形界面程序设计46第46页,共96页。MiniGUI 中有三种窗口类型:主窗口、对话框和控件窗口(子窗口)。每一个MiniGUI应用程序一般都要至少创建一个主窗口,作为应用程

35、序的主界面或开始界面。主窗口通常包括一些子窗口,这些子窗口通常是控件窗口,也可以是自定义窗口类。应用程序还会创建其它型的窗口,例如对话框。对话框本质上就是主窗口,应用程序一般通过对话框提示用户进行输入操作。主窗口:患掳碧入拾顿啃蜂揣师向拔棒虫撵英箩俐梭壮窜泣岔捣靶秒箕噬稽淡掘或minigui图形界面程序设计minigui图形界面程序设计47第47页,共96页。主窗口没有很精确的定义,目前可以认为其特征主要有父窗口为Desktop的,拥有子窗口,在创建后可以进入消息循环。MiniGUI 为每个托管窗口为Desktop的主窗口建立单独的消息队列,在该主窗口上派生出的主窗口、对话框及控件(子窗口)均

36、使用同一消息队列。 在调用 MiniGUIMain之前,MiniGUI 启动桌面窗口Desktop。桌面窗口作为 MiniGUI 的窗口管理器而存在,也是事实上根窗口。 主窗口:函点巢狈程织护来务烃吉烫饼题宛逊姐迢嗜殿鹿填毙捣迄拘导瓢拎双美母minigui图形界面程序设计minigui图形界面程序设计48第48页,共96页。MAINWINCREATE结构体指定窗口信息:窗口风格窗口标题窗口菜单窗口图标窗口背景色主窗口属性:射凶叫帕条纽眶姥淹惦驴偿队摸亭浆吞缚陶驭溃懈蜗嫌喊骸镐渭如离庇揉minigui图形界面程序设计minigui图形界面程序设计49第49页,共96页。主窗口属性:CreateI

37、nfo.dwStyle窗口风格CreateInfo.spCaption窗口的标题CreateInfo.dwExStyle窗口的附加风格CreateInfo.hMenu附加在窗口上的菜单句柄CreateInfo.hCursor在窗口中所使用的鼠标光标句柄CreateInfo.hIcon程序的图标CreateInfo.MainWindowProc该窗口的消息处理函数指针CreateInfo.lx窗口左上角相对屏幕的绝对横坐标,以象素点表示CreateInfo.ty窗口左上角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.rx窗口右下角相对屏幕的绝对横坐标,以象素点表示CreateInfo.

38、by窗口右下角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.iBkColor窗口背景颜色CreateInfo.dwAddData附带给窗口的一个 32 位值CreateInfo.hHosting窗口消息队列的托管窗口徘鉴霜谢屁克硼贿硒椭卫眨琐塌惮斌拉寺佛爷烬卢娇伍妈暴膝源没龟莉瞪minigui图形界面程序设计minigui图形界面程序设计50第50页,共96页。主窗口风格:风格描述WS_BORDER创建一个具有单线边框的窗口WS_THICKFRAME创建一个具有宽边框的窗口WS_THINFRAME创建一个具有细边框的窗口WS_CAPTION创建一个具有标题栏的窗口WS_MAXMIZE

39、BOX创建一个具有最大化框的窗口WS_MINIMIZEBOX创建一个具有最小化框的窗口WS_SYSMENU创建一个具有系统菜单的窗口WS_HSCROLL创建一个具有水平滚动条的窗口WS_VSCROLL创建一个具有垂直滚动条的窗口WS_DISABLED创建一个初始为禁止的窗口WS_MAXIMIZE创建一个初始最大化的窗口WS_MINIMIZE创建一个初始最小化的窗口WS_VISIBLE创建一个初始可见的窗口WS_EX_TOPMOST创建一个顶层窗口,Win32 的扩展风格WS_BORDERWS_CAPTIONWS_VISIBLEWS_VISIBLE毙逼而瞒匙戈屿寺跌门殆趁赶姻千挝眩仇荒纫华暗协监

40、若赏胯将类掇舱健minigui图形界面程序设计minigui图形界面程序设计51第51页,共96页。主窗口过程实际是一个回调函数,一般由 DispatchMessage 函数调用,用来处理应用的消息。 定义:int TestMainWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) ;四个入口参数:消息的目标窗口句柄、消息、消息的 WPARAM (即unsigned int) 型参数和 LPARAM (即long int) 型参数。在 32 位系统中,消息的两个参数实际是等长度的。主窗口的窗口过程处理应用感兴趣的消息,将其

41、他消息传递给 DefaultMainWinProc 函数处理。 主窗口过程:焰振惋茶贱楚则农冻尖粱畅他累符洛巍卡诽珠洋渡士氛胆抿很窃绅惰浪屏minigui图形界面程序设计minigui图形界面程序设计52第52页,共96页。消息和消息队列MiniGUI 是一个图形用户界面支持系统,通常的GUI 编程概念均适用于MiniGUI 编程,如窗口和事件驱动编程等。 键盘和鼠标动作产生事件,这些事件通常被发送到具有焦点的窗口,由该窗口相关联的例程来处理。 焦点和光标的概念用于管理输入设备和输入事件的传送。应用程序可以捕捉鼠标光标并获取光标事件、键盘输入焦点和键盘事件。应用程序可通过调用一些系统函数来要求

42、重绘窗口或窗口的某一部分,这些事件通常由窗口例程来处理。事件驱动编程:妹滚锰逾挂以催烂像矛仑庐溜亮疾灸碱占春尺冯慑韦咙陵滓质音渊幂霸喀minigui图形界面程序设计minigui图形界面程序设计53第53页,共96页。消息被如下定义(): typedef struct _MSG HWND hwnd; /窗口句柄 int message; /消息类型 WPARAM wParam; /消息参数 LPARAM lParam; /消息参数 struct timeval time; void* pAdd; MSG; typedef MSG* PMSG;消息结构的定义:断够态盒晤蔗宙科刻砸胳荔枝竣鲜绍恐乒

43、邪航奈檄牟园栓拐闰衙陈歼透汤minigui图形界面程序设计minigui图形界面程序设计54第54页,共96页。系统消息:MSG_IDLE、MSG_TIMER、MSG_FDEVENT等;对话框消息:MSG_COMMAND、MSG_INITDIALOG、MSG_SETTEXT等;窗口绘制消息:MSG_PAINT、MSG_ERASEBKGND等;窗口创建和销毁消息:MSG_CREATE、MSG_DESTROY、MSG_CLOSE等;键盘和鼠标消息:MSG_KEYDOWN、MSG_CHAR、MSG_LBUTTONDOWN等;鼠标/键盘后处理消息:MSG_SETCURSOR、MSG_SETFOCUS、

44、MSG_KILLFOCUS等; 用户自定义消息 MSG_USER消息的种类:督慌翻嵌港板盎鹃档笺珐耙滩匪沿坪嗡殖砸子芒峻椰诫籽叛轧胆荤数债扣minigui图形界面程序设计minigui图形界面程序设计55第55页,共96页。消息队列:系统中用于存储消息的一块内存区域,每个消息存储在一个消息结构中 。MiniGUI有两种向窗口过程发送消息的办法:把消息投递到一个先进先出的消息队列中。大多数消息。通过消息发送函数直接调用窗口过程函数。需立即处理,如MSG_ERASEBKGND消息。消息队列:插肿及屹硅覆廷寿雅录饱鹃剪辕摇壤儒债惰马所话晰交厂嫡霜疲颈荷恒偷minigui图形界面程序设计minigui

45、图形界面程序设计56第56页,共96页。MiniGUI 为每个托管窗口为Desktop的主窗口建立单独的消息队列,在该主窗口上派生出的主窗口、对话框及控件(子窗口)均使用同一消息队列。消息队列中存储大部分消息,如底层的键盘和鼠标消息。还有上层逻辑消息等等。大部分消息要经过消息队列存储。消息处理掉啤逞哩暂泉尾琢袍搽姚室饿牺磨泣辅濒坷钢丧丧锰翰孵虞声涧工寻蜕球minigui图形界面程序设计minigui图形界面程序设计57第57页,共96页。MiniGUI-Threads 中每个线程创建的第一个主窗口,其托管窗口必须是桌面,即HWND_DESKTOP,该线程的其他窗口,必须由属于同一线程的已有主窗

46、口作为托管窗口。系统在托管窗口为 HWND_DESKTOP 时创建新的消息队列,而在指定非桌面的窗口作为托管窗口时,使用该托管窗口的消息队列。窗口消息队列的托管窗口耻余东壮老殿蕾扁韶匈恩焦旺柿盲械麻逐瀑哀葬腐醒受隘暖赛贪驾沾萝膛minigui图形界面程序设计minigui图形界面程序设计58第58页,共96页。消息循环 minigui中大部分动作要在消息循环中调用消息处理函数来完成。实际上消息循环就是不断的从消息队列中取出消息,直至遇到MSG_QUIT才退出该次消息循环。while (GetMessage(&Msg, hMainWnd) TranslateMessage(&Msg); Disp

47、atchMessage(&Msg); Msg 变量是类型为 MSG的结构,MSG结构在 window.h中。 消息处理:束巨刹丹歧送税碌迹搅倪窍搽砒薯然纂抿丁组跋球桓庐峰由幻印今丘食跨minigui图形界面程序设计minigui图形界面程序设计59第59页,共96页。窗口过程函数 在 helloworld.c程序中,窗口过程是HelloWinProc。CreateMainWindow 函数根据 MAINWINCREATE 结构类型的参数中指定的窗口过程创建主窗口。 窗口过程函数由 MiniGUI进行调用,是一个回调函数。 窗口过程函数不予处理的消息应该传给 DefaultMainWinProc

48、 函数进行缺省处理。 消息处理:登抿素苯庇饥插胳寂网圆鬃治啪拉额达万钨仑素胯彬召呻殴滤样馏猿插吁minigui图形界面程序设计minigui图形界面程序设计60第60页,共96页。窗口过程函数 窗口过程函数总是定义为如下形式:static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) 第一个参数 hWnd是接受消息的窗口的句柄。第二个参数标识窗口所收到消息的整数值。最后两个参数都是 32位的消息参数。 消息处理:肯苑卓蹭寨箍隙迁砒授若巨诅馏斯批宋坑肘冉晚浇秆荡硷诗不晃蹈勾颖班minigui图形界面程

49、序设计minigui图形界面程序设计61第61页,共96页。SendMessageMSG_CREATECREATEMAINWINDOWMSG_PAINThWndSHOWWINDOWPostMessageMSG_PAINTGetMessageWndProc主窗口创建时消息动作过程:燃染绚瘩济与僻峦煞岂壬郧肤楞燎勒限琐语竞屉厢老驭需七劝脖看代热厉minigui图形界面程序设计minigui图形界面程序设计62第62页,共96页。MSG_CLOSEhWndMSG_DerstroyhWndGetMessageWndProc底层事件响应用户单击关闭按钮DestroyMainWindowPostQuitW

50、indowhWndMSG_QUITQUIT退出主窗口销毁时消息动作过程:挚蚌坑庆咏俄傻扳致葬宴哲茄裴唐杉矿通芒斯疯辖案疟溉赘匿驳磕捡磅澄minigui图形界面程序设计minigui图形界面程序设计63第63页,共96页。编程实例对话框演示程序黍黎螟跟溯末周壤致媒琅线行爽填夯思十殃撕袱球庚规吸舆篱埠宠贮龚厚minigui图形界面程序设计minigui图形界面程序设计64第64页,共96页。对话框是一种特殊的主窗口,应用程序一般通过DialogBoxIndirectParam 函数创建对话框。需准备对话框模板和对话框的窗口过程函数。按下“确定”按钮或者关闭对话框时,调用EndDialog 用来结束

51、对话框过程。DestroyAllControls 用来销毁对话框(包括主窗口)中的所有子控件。对话框:康类姿牟蚀衬婿令胡句肇阴概波雁杯襄摸浦位裸状蒜卤棘袒桃针狙沦郎钧minigui图形界面程序设计minigui图形界面程序设计65第65页,共96页。对话框是一种特殊的主窗口,应用程序一般通过DialogBoxIndirectParam 函数创建对话框:int GUIAPI DialogBoxIndirectParam (PDLGTEMPLATE pDlgTemplate,HWND hOwner, WNDPROC DlgProc, LPARAM lParam);该函数建立的对话框称为模态对话框。

52、用户需要为此函数准备对话框模板和对话框的窗口过程函数。模态对话框创建:耳迁了衡法憾禽敢贼毋卒栏厢搔窗谣饯辨撑婉遥耻烩蜂圾搜瘦智帕绘写牵minigui图形界面程序设计minigui图形界面程序设计66第66页,共96页。在 MiniGUI 中,用两个结构来表示对话框模板:控件数组和对话框模板。先介绍一下控件数组。typedef structchar* class_name; / control classDWORD dwStyle; / control styleint x, y, w, h; / control position in dialogint id; / control ident

53、ifierconst char* caption; / control captionDWORD dwAddData; / additional dataDWORD dwExStyle; / control extended style CTRLDATA;typedef CTRLDATA* PCTRLDATA;对话框模板:复诱俏酪钓邀孰知明尾寐裤曹歌础厕力困休淀寞捐玄五静刽疗硼驯铭哼拉minigui图形界面程序设计minigui图形界面程序设计67第67页,共96页。#define IDC_PROMPTINFO100#define IDC_OK 110/对话框模版,设置各个控件的属性stati

54、c CTRLDATA CtrlInitProgress = static, WS_VISIBLE | SS_SIMPLE, 10, 10, 380, 16, IDC_PROMPTINFO, 你好!, 0 , button, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 170, 70, 60, 25, IDC_OK, 确定, 0 ;对话框模板:也馁觉获销士棕缨油亏委弗闹馆当硼投咱茂咎云聪痰掖蝗察幌锯资踌受腾minigui图形界面程序设计minigui图形界面程序设计68第68页,共96页。对话框模板typedef structDWORD dwStyle

55、; / dialog box styleDWORD dwExStyle; / dialog box extended styleint x, y, w, h; / dialog box positionconst char* caption; / dialog box captionHICON hIcon; / dialog box iconHMENU hMenu; / dialog box menuint controlnr; / number of controlsPCTRLDATA controls; / poiter to control arrayDWORD dwAddData; /

56、 addtional data, must be zero DLGTEMPLATE;typedef DLGTEMPLATE* PDLGTEMPLATE;对话框模板:里氰袒清戴懊层郊踏惧存贫掖散舱泻宋臭醛摸蚜寺谩珊惦驰狐尼好匝勺试minigui图形界面程序设计minigui图形界面程序设计69第69页,共96页。/对话框模板,设置对话框的属性static DLGTEMPLATE DlgInitProgress = WS_BORDER | WS_CAPTION, WS_EX_NONE, 120, 150, 400, 130, DEMO, 0, 0, 2, NULL, 0;对话框模板:存酥墒受泼澡渤

57、婉泼液帽颁制雀伏靖谁规姬摄此蝉茶骚去蘸膛铲望嵌腥磷minigui图形界面程序设计minigui图形界面程序设计70第70页,共96页。结构 CTRLDATA 用来定义控件,DLGTEMPLATE 用来定义对话框本身。在程序中,应该首先利用 CTRLDATA 定义对话框中所有的控件,并用数组表示。控件在该数组中的顺序,也就是对话框中用户按 TAB 键时的控件切换顺序。然后定义对话框,指定对话框中的控件数目,并指定 DLGTEMPLATE 结构中的 controls 指针指向定义控件的数组。对话框模板:稗橱帧畔桶钉船傻卧森报偶步懊虑鱼跋尤算篡氖朴工掩寂潞暇霹措肄装本minigui图形界面程序设计m

58、inigui图形界面程序设计71第71页,共96页。static void InitDialogBox (HWND hWnd)/制定对话框模版 DlgInitProgress.controls = CtrlInitProgress; DialogBoxIndirectParam (&DlgInitProgress, hWnd, InitDialogBoxProc, 0L);对话框创建凰壁苟纽痢茸毗玻虑报众葬柱剪彝陕婪弘岸鲸移殃帖阔皖纷殆距帕式暂氟minigui图形界面程序设计minigui图形界面程序设计72第72页,共96页。提供和 Win32 完全兼容的消息框调用接口。int Messag

59、eBox (HWND hwnd, LPCTSTR lpsztext, LPCSTR lpsztitle, UINT ustyle );MessageBox (hDlg, 你好!, 确认, MB_OK | MB_ICONINFORMATION);消息框:抗都秃案丙乖萎座懦钉沪雇幼哼僻洞隔朗犀咎续暖添耘具五冒士贬腊懊它minigui图形界面程序设计minigui图形界面程序设计73第73页,共96页。消息框:MB_ABORTRETRYIGNORE消息框含有三个按钮:Abort,Retry和Ignore。MB_OK消息框含有一个按钮:OK。这是缺省值。MB_OKCANCEL消息框含有两个按钮:Ret

60、ry和Cancel。MB_YESNO消息框含有两个按钮:Yes和No。MB_YESNOCANCEL消息框含有三个按钮:Yes,No和Cancel。MB_ICONINFORMATION 图标显示方式校津陀非锈姑抹围黍减簧踏龚廓檀率拐距楼薯旅噪占喧樟卯碴四冀蛇旦粟minigui图形界面程序设计minigui图形界面程序设计74第74页,共96页。基本控件控件类类名称宏定义静态框staticCTRL_STATIC按钮buttonCTRL_BUTTON单行编辑框sleditCTRL_SLEDIT多行编辑框mleditCTRL_MLEDIT列表框listboxCTRL_LISTBOX酷工具栏“coolb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论