⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第十一章:键盘管理——如何读取功能键和方向键等等.htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
	mso-header:url("section11.files/header.htm") h1;	mso-paper-source:0;	layout-grid:15.6pt;}div.Section1	{page:Section1;}--></style><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable	{mso-style-name:普通表格;	mso-tstyle-rowband-size:0;	mso-tstyle-colband-size:0;	mso-style-noshow:yes;	mso-style-parent:"";	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;	mso-para-margin:0cm;	mso-para-margin-bottom:.0001pt;	mso-pagination:widow-orphan;	font-size:10.0pt;	font-family:"Times New Roman";	mso-ansi-language:#0400;	mso-fareast-language:#0400;	mso-bidi-language:#0400;}</style><![endif]--></head><body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'><div class=Section1 style='layout-grid:15.6pt'><h1><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>第十一章:键盘管理</span></h1><p class=MsoNormal><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:"Times New Roman";mso-bidi-font-family:Tahoma'>(</span><aname=KEYS><span lang=EN-US style='font-size:14.0pt;font-family:Tahoma'>Keymanagement. How to read function keys, arrow keys etc..</span></a><spanstyle='mso-bookmark:KEYS'></span><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:"Times New Roman";mso-bidi-font-family:Tahoma'>)</span><span lang=EN-US style='font-size:14.0pt;font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><h2><span lang=EN-US>11.1 </span><span style='font-family:黑体;mso-ascii-font-family:Arial'>一些基础知识(</span><a name=KEYSBASICS><span lang=EN-US style='font-family:Tahoma'>The Basics</span></a><span style='mso-bookmark:KEYSBASICS'></span><spanstyle='font-family:黑体;mso-ascii-font-family:Arial'>)</span></h2><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>没有任何一个图形用户界面(</span><span lang=EN-US>GUI</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)可以离开一个功能强大的用户界面而用户交流。一个</span><span lang=EN-US>CURSES</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>程序应该对用户的按键和鼠标操作很敏感。让我们先来处理你手下的键盘。</span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>像你在以上例子中看到的几乎所有的例子那样,得到用户的输入操作非常简单。一个简单的取得用户按键信息的方法是使用</span><spanlang=EN-US>getch()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数。当你读取某些特殊的按键,例如换行键时,你应该激活</span><spanlang=EN-US>cbreak</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>模式。键盘按键区应该被激活,以便于读取功能键、方向键等等。</span><spanlang=EN-US><br style='mso-special-character:line-break'><![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'><![endif]></span></p><p class=MsoNormal><span lang=EN-US>getch()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>返回一个整数对应键盘上相应的按键。如果你输入的是一个一般的字符。这个整数就等价于这个字符。否则这个整数将和</span><spanlang=EN-US>curses.h</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>中定义的字符相匹配。例如如果用户按下了</span><spanlang=EN-US>F1</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>,这个数字的返回值将是</span><span lang=EN-US>265</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>。这个值可以通过</span><span lang=EN-US>curses.h</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>中内定义的宏</span><span lang=EN-US>KEY_F()</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>检测。这样可以更方便的管理键盘的输入。</span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>例如,如果你这样调用</span><span lang=EN-US>getch()</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数:</span></p><p class=MsoNormal style='margin-left:10.5pt;mso-para-margin-left:1.0gd'><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>intch;<o:p></o:p></span></b></p><p class=MsoNormal style='margin-left:10.5pt;mso-para-margin-left:1.0gd'><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>ch= getch();<o:p></o:p></span></b></p><p class=MsoNormal style='margin-left:10.5pt;mso-para-margin-left:1.0gd'><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal><span lang=EN-US>getch()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数将等待用户输入。(除非你指定响应时间)当你按下一个键,相应的整数将被返回。然后你可以检测这个值是否是你想要的。当然,这些相对应的值可以在</span><spanlang=EN-US>curses.h</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>中找到。</span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>以下这段代码就可以用来监测键盘左方向键:</span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;</span>if(ch == KEY_LEFT)<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><spanstyle='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>printw(&quot;Left arrow is pressed\n&quot;);<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>让我们写一个可以通过上下键操纵的窗口菜单。</span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><h2><a name=SIMPLEKEYEX><span lang=EN-US>11.2.</span></a><spanstyle='mso-bookmark:SIMPLEKEYEX'><span style='font-family:黑体;mso-ascii-font-family:Arial'>一个简单的使用键盘的例子</span><span lang=EN-US> <br></span></span><span style='mso-bookmark:SIMPLEKEYEX'><span class=3Char><spanstyle='mso-ascii-font-family:Arial;mso-hansi-font-family:Arial'>(</span></span></span><spanstyle='mso-bookmark:SIMPLEKEYEX'><span class=3Char><span lang=EN-USstyle='font-family:Arial;mso-bidi-font-family:"Times New Roman"'>A Simple KeyUsage example</span></span></span><span style='mso-bookmark:SIMPLEKEYEX'><spanclass=3Char><span style='mso-ascii-font-family:Arial;mso-hansi-font-family:Arial'>)</span></span></span></h2><span style='mso-bookmark:SIMPLEKEYEX'></span><p class=MsoNormal><a name=BSIKE><b style='mso-bidi-font-weight:normal'><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>例</span><span lang=EN-US> 10</span></b></a><spanstyle='mso-bookmark:BSIKE'><b style='mso-bidi-font-weight:normal'><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:</span> </b></span><span style='mso-bookmark:BSIKE'><bstyle='mso-bidi-font-weight:normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>一个简单的使用键盘的例子</span><spanlang=EN-US><o:p></o:p></span></b></span></p><span style='mso-bookmark:BSIKE'></span><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>#include &lt;stdio.h&gt;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>#include &lt;ncurses.h&gt;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>#define WIDTH 30<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>#define HEIGHT 10 <o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>int startx = 0;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>int starty = 0;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>char *choices[] = { <o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&quot;Choice1&quot;,<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&quot;Choice2&quot;,<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&quot;Choice3&quot;,<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&quot;Choice4&quot;,<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&quot;Exit&quot;,<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:2'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><spanstyle='mso-spacerun:yes'>&nbsp; </span>};<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>int n_choices = sizeof(choices) / sizeof(char *);<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>void print_menu(WINDOW *menu_win, int highlight);<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>int main()<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>{<span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp; </span>WINDOW*menu_win;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>inthighlight = 1;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>intchoice = 0;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>intc;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>initscr();<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>clear();<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -