`
chinamming
  • 浏览: 140149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

FLTK学习-6-使用FLUID编程(4)

 
阅读更多

图11.9 FLUID 构件样式属性

11.7.1 Style Attributes

Label Font (pulldown menu)

标签字体,忽略各种符号、位图以及象图。你的程序可以通过这些槽改变实际使用的字体,假如你想使用提供的16种默认字体以外的字体的话。

Label Size (pulldown menu)

标签字体像素高度,忽略各种符号、位图以及象图。要想不关闭面板查看效果,输入新的值然后按Tab。

Label Color (button)

标签字体,忽略象图(位图,不过可以使用该颜色作为前景色)。

Box (pulldown menu)

构件背景的区域类型。许多构件使用”frame”比使用box”运行和绘出的更快。Frame边框不画内部的颜色,保留它们原先的样子。小心!FLUID可能能够正常工作,但是实际的程序中可能会在构件中遗留下不需要的废物。

如果窗口中充满子构件,你可以通过将窗口的box区域类型改为”NO_BOX”来提高重绘速度,FLUID将在没有box区域颜色的地方显示挡板,【??】注意,该挡板不会被最终程序绘出,相反的会显示一些随机的垃圾。

Down Box (pulldown menu)

当按钮按下或者其他一些像滚动条以及设值器等的边框风格。

Color (button)

box区域颜色。

Select Color (button)

一些构件使用这个来设置特定部分的颜色,FLUID不总是显示结果,这是按钮按下时的颜色以及输入框获得了焦点时的颜色。

Text Font, Size, and Color

一些构件显示文本,如输入框、下拉菜单,浏览器。

图11.10 FLUID构件的C++属性

11.7.2 C++ Attributes

Class

这个是你自己的继承自Fl_Widget的子类,无论你在此输入什么都将作为实例化的对象的类名。而且不会在.h文件中加入#include头文件,你必须在”Extra Code”(额外代码)的第一行提供一个声明了你的子类的#include行。

该类必须与你正在欺骗的类相似【什么东西??】。它不用必须是一个子类,有时候对另一个FLUID类而言这是很有用的,现在唯一获得一个带双缓冲的窗口的方法是改变该窗口的该属性为”Fl_Double_Window”,并且加入下面一句到额外代码中:

#include <FL/Fl_Double_Window.h>

Type (upper-right pulldown menu)

一些类有自类型来改变它们的外表或者行为,你从该菜单中选出子类型【??】。

Name (text field)

要声明的变量名,要将该构件保存为的指针。该变量的类型是<class> *,如果名字为空,则不会创建变量。你可以给多个构件命名为”name[0]”, ”name[1]”, ”name[2]”等,这将使的FLUID声明一个指针数组,数组足够大到能够存放最大的数字,数组中的所有构件的类型必须是一样的。

Public (button)

控制构件的公共访问属性,当构件在一个C++类中时,这控制构件在类中是公共还是私有的,不在类中时控制构件是静态的还是全局的。

Extra Code (text fields)

这四个域让你可以在.h和.cxx文件中逐行输入代码。如果文本以一个#或者extern开头,则FLUID就认为这是一个include行,就将其写入.h文件,如果相同的include行出现了多行则只写入一行。其余所有的都是代码行,局部变量指针o指向当前的构件,构造的窗口由本地变量w指向,你还可以获取传递给函数的任何参数以及在这之间的所有命名构件。FLUID将检查配对的括弧,大括号和引用,但是不做其他的错误检查。此处小心,因为可能非常难以指出编译器中构件生成的一个错误。如果你的需要多于4行你应该在cxx文件中调用一个函数。

Callback (text field)

可以是一个函数名或者一小段代码,如果你输入除字母、数字、下划线以外的其他任何东西,FLUID都将它们作为代码。你自己的代码中的指向函数的名字,必须声明为如下形式:void name(<class>*, void *)。一小段代码将插入到cxx文件中的静态函数中,函数原型为void name(class *o, void *v),所以你可以用o引用构件,用v引用user_data()。FLUID将检查配对的括弧,大括号和引用,但是不做其他的错误检查。此处小心,因为可能非常难以指出编译器中构件生成的一个错误。如果回调时空的则将不设置回调。

User Data (text field)

这是构件的user_data()的值,如果为空,则使用0.它可以是任何可以转换为void的C代码。

Type (text field)

回调函数原型中的void*将被替换为该对象,你可能想在老的XForms代码中使用long。警告!任何除void*类型之外的都不保证能够工作,但是所有的其他指针结构都是可以的,long也是可以的。

When (pulldown menu)

什么时候执行回调,可以是从不、改变时、释放时、输入键时,输入的键值只在文本输入框中有用。还有一些很少用到但是有用的when()值没有包含在菜单中,你应该在额外代码域中放入这些值。

No Change (button)

No Change按钮意味着如果数据没有改变回调就在匹配事件发生时执行。

11.8 Selecting and Moving Widgets

如果窗口没有显示,则在浏览器中双击窗口名将显示窗口。从显示的窗口中你可以选择构件,构件组,移动或者调整大小。要关闭窗口可以双击它或者按ESC键。点击构件可以选中它,要选择多个构件,可以拖拽一个覆盖它们的矩形,按着shift键将切换选中的构件【???】。你无法选中隐藏的构件。如果构件完全被其他构件覆盖你也无法选中它。(此时应该)使用浏览器选中构件。

选中的构件显示时有一个红色的边框线,你可以通过这个边框来移动构件,你也可以通过外边沿或者角来拖动调整大小。拖动鼠标时按下Alt键可以在精确定位时避免捕捉到的网格副作用【??】。

如果有tab控件显示,你可以通过选择文件tab来改变可见的子窗口。你拾取的子窗口将被选中。

通过箭头方向键、tab键和shift+tab键可以导航选择,左、右、tab或者shift+tab可以在层中在前一个后一个构件之间移动。点击向右箭头足够次数的话可以遍历选中窗口中的所有构件。上下键可以在水平覆盖的构件之间移动。如果导航无效的话你可能需要排序构件,如果你的窗口中有输入域的话这是很重要的,因为FLTK在输入框之间移动时使用相同的方式。

要打开一个构件,双击打开。要打开多个构件选中它们然后按F1或者点击弹出菜单的”Edit/Open”。按下Ctrl+o可以在不改变选择的情况下暂时取消边框,以便看清构件的边界。

你可以通过窗口管理边界控件调整窗口大小。FLTK将试图将窗口的大小向最近的网格圆整并且使得它足够大能够包含所有的构件(它使用合法的X方法,所以对一些窗口管理器而言它可能会barf【??】)【??】。注意在你的程序中窗口可能是不能改变大小的,如果可以的话,对于子构件的作用可能是不同的。

窗口的面板(双击时打开的)对所有其他的Fl_Widget几乎是相同的。还有其他三项:【??】

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics