📄 9第九章:窗口机制(all about window functions).htm
字号:
style='mso-spacerun:yes'> </span>* 6. tl:</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><span style='mso-tab-count:1'> </span><spanstyle='mso-spacerun:yes'> </span>* 7. tr:</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><span style='mso-tab-count:1'> </span><spanstyle='mso-spacerun:yes'> </span>* 8. bl:</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><span style='mso-tab-count:1'> </span><spanstyle='mso-spacerun:yes'> </span>* 9. br:</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><span style='mso-tab-count:1'> </span><spanstyle='mso-spacerun:yes'> </span>*/</span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'><span style='mso-tab-count:1'> </span>wrefresh(local_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'> </span>delwin(local_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'>}<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-size:14.0pt'>9.3</span></b><b style='mso-bidi-font-weight:normal'><spanstyle='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>程序说明(</span></b><b><span lang=EN-USstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt'>Explanation</span></b><bstyle='mso-bidi-font-weight:normal'><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)</span></b><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'><o:p></o:p></span></b></p><p class=MsoNormal style='text-indent:21.0pt'><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> </o:p></span></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'> </span>creat_newwin()</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数使用</span><span lang=EN-US>newwin()</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数建立一个窗口,并且使用</span><span lang=EN-US>box()</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数的窗口添加边</span><span style='font-family:宋体'>框。<spanlang=EN-US>destory_win()</span>函数首先它使用空白字符填充窗口,起到清除屏幕的作用。之后调用<span lang=EN-US>delwin()</span>函数回收分配给窗口的内存。随着用户按下方向键<spanlang=EN-US>,startx</span>和<span lang=EN-US>starty</span>的值不断改变并且建立一个新的窗口。<spanlang=EN-US><o:p></o:p></span></span></p><p class=MsoNormal><span lang=EN-US style='font-family:宋体'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:宋体'><spanstyle='mso-tab-count:1'> </span></span><spanstyle='font-family:宋体'>在<span lang=EN-US>destory_win()</span>中,你可以看到我使用<spanlang=EN-US>wborder</span>替代<span lang=EN-US>box</span>。这样做的原因我已经写到程序注释里面去了(我知道你<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:46">刚才</ins></span>忽略了,现在赶紧去看看!)。<spanlang=EN-US>wborder()</span>函数可以用字符来绘制窗口的边框。这些边框是由四条线和四个角组成的。为了解释得更清楚一些,如果你已经按照如下的方向调用<spanlang=EN-US>wborader()<o:p></o:p></span></span></p><p class=MsoNormal style='text-indent:21.0pt'><b style='mso-bidi-font-weight:normal'><span lang=EN-US>wborder(win, '|', '|', '-', '-', '+', '+', '+', '+');<o:p></o:p></span></b></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><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><a name=BORDEREXEXPL>+-----------------------+</a></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><p class=MsoNormal><span style='mso-bookmark:BORDEREXEXPL'><span lang=EN-US><spanstyle='mso-spacerun:yes'> </span><spanstyle='mso-spacerun:yes'> </span>|<spanstyle='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>|</span></span></p><span style='mso-bookmark:BORDEREXEXPL'></span><p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>+-----------------------+</span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-size:14.0pt'>9.4</span></b><b style='mso-bidi-font-weight:normal'><spanstyle='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>更多一点(</span></b><a name=OTHERSTUFF><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'>Theother stuff in the example</span></b></a><span style='mso-bookmark:OTHERSTUFF'></span><bstyle='mso-bidi-font-weight:normal'><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)</span></b><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'><o:p></o:p></span></b></p><p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>你也可以在上面的的的例子中看到,我使用了</span><spanlang=EN-US>COLS </span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>和</span><span lang=EN-US>LINES</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>作为变量名。在</span><span lang=EN-US>initscr()</span><spanstyle='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></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-size:14.0pt'>9.5 </span></b><b style='mso-bidi-font-weight:normal'><spanstyle='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>其他的边框函数(</span></b><aname=OTHERBORDERFUNCS><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-size:14.0pt'>Other Border functions</span></b></a><spanstyle='mso-bookmark:OTHERBORDERFUNCS'></span><b style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)</span></b><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'><o:p></o:p></span></b></p><p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>上面这个例子所使用的方式:通过按下键盘上相应的按钮<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:49">销毁</ins></span>一个窗口并建立一个新的窗口。这样的工作方式效率太低。下面让我们来写一些可以使窗口边框的使用更加有效率的程序。</span></p><p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>下面这个程序使用</span><spanlang=EN-US>mvhline()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>和</span><spanlang=EN-US>mvvline()</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> </o:p></span></p><p class=MsoNormal><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>8</span></b><b style='mso-bidi-font-weight:normal'><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:绘制边框的函数</span><span lang=EN-US><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 <ncurses.h><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> </o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>typedef struct _win_border_struct {<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'> </span>chtype<span style='mso-tab-count:1'> </span>ls, rs, ts, bs, <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'> </span><spanstyle='mso-spacerun:yes'> </span><span style='mso-tab-count:1'> </span>tl,tr, bl, br;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>}WIN_BORDER;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-family:Tahoma'>typedef struct _WIN_struct {<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> </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'> </span>intstartx, starty;<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'> </span>intheight, width;<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'> </span>WIN_BORDERborder;<o:p></o:p></span></b></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -