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

📄 9第九章:窗口机制(all about window functions).htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
--></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'><h3><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>第九章:窗口机制(</span><span lang=EN-US>Allabout window functions</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)</span></h3><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>Window</span><span style='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 class=msoIns><inscite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">所有的</ins></span>函数<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">都</ins></span>是隐式<spanclass=msoIns><ins cite="mailto:顾宇" datetime="2004-05-22T22:06">的</ins></span><spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38"><spanclass=msoDel><del cite="mailto:顾宇" datetime="2004-05-22T22:06">默认</del></span>在</ins></span>输出<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">“</ins></span>窗口<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">”</ins></span>(</span><spanlang=EN-US>stdscr</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>)<span class=msoIns><inscite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">操作</ins></span>。<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">即使</ins></span>如果你现在设计一个<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:38">最简单</ins></span>的图形用户界面(</span><spanlang=EN-US>GUI</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>),你<span class=msoIns><inscite="mailto:Simon%20Zhan" datetime="2004-02-10T22:39">都</ins></span>需要用到窗口。使用窗口的一个很必要的原因是:通过窗口机制,你可以将屏幕分割为不同的部分,并且同时在不同的区域内分别操作。这样做的可以提高工作效率。另外一个原因是:你应当始终在你的程序中追求一种更好的、更易于管理的设计方式。如果你要设计一个大型的、复杂的用户界面,事先设计好这些部分将会提高你的办事效率。</span></p><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-size:14.0pt'>9.1 </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 style='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'>The Basics</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><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></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><spanlang=EN-US>CURSES</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>里,窗口是一个假想的抽象<span class=msoIns><inscite="mailto:Simon%20Zhan" datetime="2004-02-10T22:39">概念</ins></span>。可以在屏幕中<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:41">对</ins></span><spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:40">这个假想中的窗口</ins></span>各个部分<spanclass=msoIns><ins cite="mailto:Simon%20Zhan" datetime="2004-02-10T22:41">进行</ins></span>独立的控制。</span><spanlang=EN-US>newwin()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函数返回一个指向窗口结构的指针。这个指针可以被传送至一些类似于</span><spanlang=EN-US>wprintw()</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>这样需要窗口参数的函数中。使用</span><spanlang=EN-US>delwin()</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><b style='mso-bidi-font-weight:normal'><span lang=EN-USstyle='font-size:14.0pt'>9.2 </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=LETBEWINDOW><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:14.0pt'>Letthere be a Window !!!</span></b></a><span style='mso-bookmark:LETBEWINDOW'></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><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'><span class=msoIns><ins cite="mailto:Simon%20Zhan"datetime="2004-02-10T22:42">有意思的</ins></span>是,我们创建了一个窗口却无法看见它。所以我们要做的是如何将窗口显示出来。</span><spanlang=EN-US>box()</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><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>7</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></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><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;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'><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'>WINDOW *create_newwin(int height, int width, intstarty, int startx);<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 destroy_win(WINDOW *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>&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(int argc, char *argv[])<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*my_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>intstartx, starty, width, height;<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>intch;<o:p></o:p></span></b></p><p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>initscr();<spanstyle='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><spanlang=EN-US style='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><spanlang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/*</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><span lang=EN-US><span style='mso-tab-count:2'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>*/</span></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>cbreak();</span></b><spanlang=EN-US style='font-family:Tahoma'><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><spanlang=EN-US><span style='mso-tab-count:2'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/*</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>行缓冲禁止,传递所有控制信息</span><span lang=EN-US><spanstyle='mso-tab-count:1'>&nbsp;&nbsp;&nbsp; </span>*/</span></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>keypad(stdscr,TRUE);<span style='mso-tab-count:1'>&nbsp;&nbsp; </span></span></b><spanlang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/*</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>程序需要使用</span><span lang=EN-US>F1</span><spanstyle='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'><span class=msoIns><ins cite="mailto:Simon%20Zhan"datetime="2004-02-10T22:43">功能键</ins></span></span><span lang=EN-US> <spanstyle='mso-tab-count:1'> </span>*/</span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>height= 3;<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>width= 10;<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>starty= (LINES - height) / 2;</span></b><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp; </span>/*</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>计算窗口中心位置的行数</span><span lang=EN-US>*/</span></p><p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><bstyle='mso-bidi-font-weight:normal'><span lang=EN-US style='font-family:Tahoma'>startx= (COLS - width) / 2;</span></b><span lang=EN-US><span style='mso-tab-count:

⌨️ 快捷键说明

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