📄 minigui 体系结构之四 图形抽象层和输入抽象层及 native engine 的实现(一).htm
字号:
310 }
311 caps_off = 1 - make;
312 break;
313
314 case SCANCODE_NUMLOCK:
315 if (make && num_off) {
316 numlock = 1 - numlock;
317 leds = slock | (numlock << 1) | (capslock << 2);
318 IAL_SetLeds (leds);
319 status = (DWORD)leds << 16;
320 }
321 num_off = 1 - make;
322 break;
323
324 case SCANCODE_SCROLLLOCK:
325 if (make & slock_off) {
326 slock = 1 - slock;
327 leds = slock | (numlock << 1) | (capslock << 2);
328 IAL_SetLeds (leds);
329 status = (DWORD)leds << 16;
330 }
331 slock_off = 1 - make;
332 break;
333
334 case SCANCODE_LEFTCONTROL:
335 control1 = make;
336 break;
337
338 case SCANCODE_RIGHTCONTROL:
339 control2 = make;
340 break;
341
342 case SCANCODE_LEFTSHIFT:
343 shift1 = make;
344 break;
345
346 case SCANCODE_RIGHTSHIFT:
347 shift2 = make;
348 break;
349
350 case SCANCODE_LEFTALT:
351 alt1 = make;
352 break;
353
354 case SCANCODE_RIGHTALT:
355 alt2 = make;
356 break;
357
358 }
359
360 status &= 0xFFFFF0C0;
361
362 status |= (DWORD)((capslock << 8) |
363 (numlock << 7) |
364 (slock << 6) |
365 (control1 << 5) |
366 (control2 << 4) |
367 (alt1 << 3) |
368 (alt2 << 2) |
369 (shift1 << 1) |
370 (shift2));
371
372 // Mouse button status
373 if (oldbutton & IAL_MOUSE_LEFTBUTTON)
374 status |= 0x00000100;
375 else if (oldbutton & IAL_MOUSE_RIGHTBUTTON)
376 status |= 0x00000200;
377 }
378 ke->status = status;
379 SHAREDRES_SHIFTSTATUS = status;
380 memcpy (oldkeystate, keystate, NR_KEYS);
381 memcpy (&old_lwe, lwe, sizeof (LWEVENT));
382 return 1;
383 }
384
385 old_lwe.type = 0;
386 return 0;
387
388 mouseret:
389 status &= 0xFFFFF0FF;
390 oldbutton = button;
391 if (oldbutton & IAL_MOUSE_LEFTBUTTON)
392 status |= 0x00000100;
393 if (oldbutton & IAL_MOUSE_RIGHTBUTTON)
394 status |= 0x00000200;
395 me->status = status;
396 SHAREDRES_SHIFTSTATUS = status;
397 memcpy (&old_lwe, lwe, sizeof (LWEVENT));
398 return 1;
399 }
#endif
</PRE></TD></TR></TBODY></TABLE>
<P>从这段代码中可以看出,对定点设备来讲,比如鼠标或者触摸屏,MiniGUI
能够自动识别移动信息,也能够自动识别用户的单击和双击事件。这样,底层引擎只需提供位置信息和当前的按键状态信息就可以了。对类似键盘的东西,MiniGUI
也能够自动进行重复处理。当一个按键按下一段时间之后,MiniGUI 将连续发送该按键的消息给上层处理。对特定的嵌入式系统来讲,可以将某些按键映射为
PC 的某些键盘键,上层只需处理这些键盘键消息的按下和释放即可。这样,嵌入式系统上的某些键的功能就可以在 PC 上进行模拟了。</P>
<P align=right><I><B>(待续)</B></I></P><A id=resources name=resources></A>
<P><STRONG class=subhead>资源</STRONG></P>
<UL>
<LI><B>Linux 图形相关资源</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI><A href="http://www.ggi-project.org/">GGI</A> - The GGI Project
<LI><A href="http://www.svgalib.org/">svgalib</A> - The Old Linux
Console Graphics Library
<LI><A href="http://www.devolution.com/~slouken/SDL/">SDL</A> - Simple
DirectMedia Layer - linux, BeOS, DirectX ... <FONT color=#ff0000>very
COOL</FONT>
<LI><A href="http://www.hut.fi/~hmallat/xfb/">xfb</A> - Linux
Framebuffer Accelerator
<LI><A href="http://www.tutok.sk/fastgl/">OpenGUI</A> - OpenGUI is a
high-Level C/C++ graphics & windowing library built upon a fast,
low-level x86 asm graphics kernel. </LI></UL>
<LI><B>MiniGUI 资源</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI><A href="http://www.minigui.org/">MiniGUI 主页</A>
<LI><A href="ftp://ftp.minigui.org/pub/minigui">MiniGUI FTP 站点</A>
</LI></UL>
<LI><B>MiniGUI 邮件列表</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI>发信:<A
href="mailto:minigui-devel@egroups.com">minigui-devel@egroups.com</A>
<LI>订阅:<A
href="mailto:minigui-devel-subscribe@egroups.com">minigui-devel-subscribe@egroups.com</A>
<LI>解除订阅:<A
href="mailto:minigui-devel-unsubscribe@egroups.com">minigui-devel-unsubscribe@egroups.com</A>
</LI></UL></LI></UL><A id=author name=author></A>
<P><STRONG class=subhead>关于作者</STRONG><BR>魏永明(ymwei@minigui.org),男,27
岁,工学硕士,现任蓝点软件(深圳)有限公司北京研发中心技术主管。国内最有影响的自由软件项目之一-- MiniGUI
的创始人以及主要开发人员。著有《Linux 实用教程》与《学用 Linux 与 Windows NT》,并主持翻译了《Red Hat Linux
奥秘》、《Linux 编程宝典》 等大量优秀的 Linux 技术著作。是清华大学 AKA Linux 编程技术系列讲座的主讲人。</P><BR><!--end of paper--></TD>
<TD vAlign=top width=5><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=5></TD></TR>
<TR vAlign=top height=5>
<TD vAlign=top width=5></TD>
<TD vAlign=top width=5><!-- rate article form -->
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD width="100%" height=1><SPACER height="1" type="block" /></TD></TR>
<TR>
<TD width="100%" bgColor=#cc6633 height=3><IMG height=3 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#333333 height=1><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#000000 height=1><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#ffffff height=5><IMG height=5 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR>
<TR vAlign=top>
<TD>
<FORM
action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden
value="MiniGUI 体系结构之四图形抽象层和输入抽象层及 Native Engine 的实现(一)"
name=ArticleTitle> <INPUT type=hidden value=Linux name=Zone> <INPUT
type=hidden value=/developerWorks/cn/thankyou/feedback-linux.html
name=RedirectURL> <FONT face="HELVETICA, HELV, ARIAL" size=-1><B><A
id=rating name=rating>您对这篇文章的看法如何?</A></B></FONT>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width=570 border=0>
<TBODY>
<TR vAlign=top>
<TD><INPUT type=radio value=5 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>真棒!</FONT></TD>
<TD><INPUT type=radio value=4 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>好文章</FONT></TD>
<TD><INPUT type=radio value=3 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>一般,尚可</FONT></TD>
<TD><INPUT type=radio value=2 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>需提高</FONT></TD>
<TD><INPUT type=radio value=1 name=Rating><FONT
face="HELVETICA, HELV, ARIAL"
size=-1>太差!</FONT></TD></TR></TBODY></TABLE><BR><FONT
face="HELVETICA, HELV, ARIAL" size=-1><B>意见?</B></FONT><BR><TEXTAREA name=Comments rows=3 wrap=virtual cols=52></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR></TBODY></TABLE><!-- end rate article form --></TD>
<TD vAlign=top width=5></TD></TR>
<TR vAlign=top height=5>
<TD></TD>
<TD></TD>
<TD></TD></TR></TBODY></TABLE><!-- end content --></TD></TR></TABLE><!-- ---------------footer------------------- -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD align=right width="100%" colSpan=2 height=30>(c) Copyright IBM Corp.
2001, (c) Copyright IBM China 2001, All Right Reserved</TD></TR>
<TR>
<TD width=150>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR bgColor=#000000>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.ibm.com/privacy/"><FONT face="Arial, sans-serif"
color=#ffffff size=-1>隐私</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=20 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1 border=0></TD>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.ibm.com/legal/"><FONT face="Arial, sans-serif"
color=#ffffff size=-1>法律</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=20 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1 border=0></TD>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.cn.ibm.com/Main.nsf/HTMLS/aboutibm&contactus"><FONT
face="Arial, sans-serif" color=#ffffff size=-1>联系</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=21 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1 border=0></TD></TR></TBODY></TABLE></TD>
<TD width="100%" bgColor=#000000><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="D:\新建文件夹\MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files\c(2).gif"
width=1 border=0></NOSCRIPT> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -