6.LinuxGUI编程-NCurses(二).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.LinuxGUI编程-NCurses(二)

第七章 Linux GUI-NCurses(二) 本章目标 掌握NCurses颜色库的使用 掌握自定义菜单的实现以及原理 了解NCurses封装的面板、菜单、表单域的原理 完成项目的主界面设计 移动窗口 创建子窗口 彩色显示功能 ncurse和大多数近期的curses实现都开始支持彩色显示功能 屏幕的每一个字符位置都可以从多种颜色里挑一种写上去,它的背景也可以从多种颜色里挑选 通过has_colors()函数来判断终端是否支持彩色显示功能,如果可以返回true,否则返回false 启动彩色机制 初始化颜色组合 curses定义的基本颜色 使用颜色对 改变颜色定义 颜色使用示例 #include ncurses.h /* ncurses.h 已经包含了stdio.h */ #include string.h int main() { initscr(); /*启动curses 模式*/ if(has_colors() == FALSE) { endwin(); exit(1); } start_color(); /*启动color 机制*/ init_pair(1, COLOR_RED, COLOR_BLACK); attron(COLOR_PAIR(1)); mvprintw(LINES / 2, 2, Viola !!! In color ...); attroff(COLOR_PAIR(1)); getch(); endwin(); } 改变窗口前后背景色wbkgd 功能说明:用来改变窗口前后背景色 原型: 键盘的工作方式 raw()和cbreak()的区别 通常情况下,终端驱动程序会缓冲用户输入的字符,直到遇到换行符或回车符后,这些字符才可以被使用。 raw()和cbreak()两个函数都可以禁止行缓冲(line buffering)。 在raw()函数模式下,处理挂起(CTRL+Z)、中断或退出(CTRL+C)等控制字符时,将直接传送给程序去处理而不产生终端信号; cbreak()模式下,控制字符将被终端驱动程序解释成其它字符。 获取键盘按键 keypad函数 keypad示例2-1 keypad示例2-2 屏幕操作 curses提供了直接对屏幕进行操作的若干函数: getyx()系列函数 屏幕转储 窗口转储 getyx() 其他getyx()系列函数 屏幕转储 窗口转储 窗口拷贝 1、函数原型:int overlay(WINDOW *srcwin,WINDOW *dstwin) 2、函数原型:int overwrite(WINDOW *srcwin,WINDOW *dstwin) 函数:copywin 扩展库 curses函数除了主函数库外,还有一些具有很多新功能和特性的字符文本模式的扩展库。以下章节将分别介绍与curses一起发布的三个扩展库(panel(面板扩展库)、menu(菜单扩展库)、form(表单扩展库))。 面板库 面板库(Panel Library)提供了一个很好的解决方案。用ncureses 的开发者的话来说就是: 如果你的界面设计需要使窗口在运行时置底或者置顶,虽然会为此付出很大代价,但是想要显示正确的结果仍然很困难。这时候Panels库就可以派上用场了。 如果你要处理重叠的窗口,panels库就派上用场了。 基础知识 面板对象实际上是一个窗口,和其它窗口一样被隐含地处理为容器的一部分。这个容器实际上是一个栈,栈顶的面板是完全可见的。而其它面板在栈中所处的位置,决定了它们是否可见。其基本思想是:创建一个栈来保存那些重叠的面板,然后使用面板库来正确的显示它们。例如调用一个类似于 refresh()函数就按正确的顺序来显示这些面板。面板库提供了一系列隐藏、显示、移动、改变大小等面板操作的函数,使操作重叠的窗口变得更加简单。 使用面板库 通常,一个面板程序的设计流程如下: 1.??使用newwin()函数创建一个窗口,它将添加到面板里。 2.??创建面板(利用所创建的窗口)并将面板依据用户指定的可见顺序压进栈。调用new_panel()函数即可创建该面板。 3.??调用update_panels()函数就可将面板按正确的顺序写入虚拟屏幕,调用doupdate()函数就能让面板显示出来。 4.??show_panel(), hide_panel(), move_panel()等函数分别用来对面板进行显示、隐藏、移动等操作时,可以使用panel_hidden()和panel_window()这两个辅助函数。你也可以使用用户指针来存储面板的数据, set_panel_userptr() 和 panel_userptr()函数分别用来设置和取得一个

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档