《linux应用程序开发手册之21-13.pdf》由会员分享linux应用程序开发指南 pdflinux应用程序开发指南 pdflinux操作系统介绍,可在线阅读linux查看硬件信息,更多相关《linux应用程序开发手册之21-13.pdf(6页典藏版)》请在人人文库网上搜索。
下载第13章GnomeApp预制构件和GnomeUIInfo131主窗口GnomeApp所有的Gnome应用程序除极少数有特殊须要的以外都可以用GnomeApp作为其主窗口GnomeApp预制构件是GtkWindow的泛型它在基本的顶尖窗口上降低了很便捷的菜单和工具条处理能力如图131所示用户可以配置GnomeApp预制构件的下述特点菜单和工具条可以与窗口分离开或则在窗口上重新安排位置用户可以选择严禁菜单和工具条与Gnome应用程序的窗口分离用户可以选择是否在应用程序的菜单上显示小图标今后GnomeApp预制构件都会添加更多的特点图131Gnumeric电子表格软件用GnomeApp预制构件创建界面GnomeApp有一个与其他预制构件类似的创建函数见下边的函数列表第一个参数appid是一个Gnome与应用程序打交道的内部名称它应当与传递到gnomeinit函数中的appid完全一样通常来说可以使用应用程序可执行文件的名称第二个参数是应用程序窗口的标题假如设为NULL则不为窗口设置标题includeGtkWidgetgnomeappnewgcharappidgchartitleGnomeApp预制构件有一个惟一的内容区你可以将应用程序的主要功能放到该区域在中心区域的四边可以放置工具条菜单条状态条等函数列表列举了相关的函数这种函数很容易理解通常从字面上就可以晓得其作用它们的主要作用是在GnomeApp预制构件的合适位置放置所须要的预制构件为GnomeApp创建菜单条工具条状态条也有很简单的方式添加预制构件到GnomeApp上可输入以下句子include将预制构件contents添加到GnomeApp预制构件app的窗口上voidgnomeappsetcontentsGnomeAppappGtkWidgetcontents将菜单条menubar添加到GnomeApp预制构件app的窗口上voidgnomeappsetmenusGnomeAppappGtkMenuBarmenubar将工具条toolbar添加到GnomeApp预制构件app上voidgnomeappsettoolbarGnomeAppappGtkToolbartoolbar将状态条statusbar添加到GnomeApp预制构件上voidgnomeappsetstatusbarGnomeAppappGtkWidgetstatusbar132GnomeUIInfo1321创建GnomeUIInfoGtk提供了两种方式来为应用程序创建菜单并且用这两种方式创建一个很大的菜单是很繁琐平庸的非常是假如菜单还带有图标和快捷键时更是这么Gnome提供了一个简单的解决方案为每一个菜单项创建一个GnomeUIInfo模板并列举它的一些特点名称图标快捷键等Gnome库函数会手动地用GnomeUIInfo字段模板创建菜单你也可以用同样的方法创建工具条下边是GnomeUIInfo结构的申明typedefstructGnomeUIInfoTypetypegcharlabelgcharhintgpointermoreinfogpointeruserdatagpointerunuseddataGnomeUIPixmapTypepixmaptypegpointerpixmapinfoguintacceleratorkeyGdkModifierTypeacmodsGtkWidgetwidgetGnomeUIInfo216使第二部份Linux编程常用C语言函数库及预制构件库下载填充里面的结构最便捷的方式就是用一段静态的初始化程序其实假如乐意也可以动态地创建Gnome函数可以接受一个GnomeUIInfo链表同时还有一些宏可以简化标准化最常用的静态初始化程序下边是一个典型的事例一个文件菜单staticGnomeUIInfofilemenuGNOMEUIINFOMENUNEWITEMNNewWindowNCreateanewtextviewerwindownewappcbNULL打开Open菜单项GNOMEUIINFOMENUOPENITEMopencbNULL另存为SaveAs菜单项GNOMEUIINFOMENUSAVEASITEMsaveascbNULL分隔线GNOMEUIINFOSEPARATOR关掉Close菜单项GNOMEUIINFOMENUCLOSEITEMclosecbNULL退出Exit菜单项GNOMEUIINFOMENUEXITITEMexitcbNULL菜单结束GNOMEUIINFOEND但是大多数情况下是不能用前面的宏来创建菜单的所以有时侯还得自己动手指定结构的每一个成员GNOMEAPPUIITEMNSelectAllNSelectallcellsinthespreadsheetselectallcbNULLNULL00aGDKCONTROLMASK下边我们简略介绍GnomeUIInfo结构中各个成员的含意type是一个GnomeUIInfoType枚举类型的值也是类型标记参看表131label是菜单或工具条按键上的文本通常情况下它应当用N宏作国际化标明hint是菜单项或按键功能的描述对工具条来说它以工具提示文本的方式显示对菜单条来说它可以显示在状态条上moreinfo依赖于数据项的类型参见表131userdata假如这个菜单项有反弹函数userdata会被传递到反弹函数unuseddata应当设置为NULL现今还没有用到Gnome的后续版本似乎会用到它pixmaptype是一个GnomeUIPixmapType枚举类型的值它的作用是指定它的下一个成员pixmapinfo的类型pixmapinfo可以是原始的pixmap数据一个文件名或则是一个Gnome外置pixmap图第13章GnomeApp预制构件和GnomeUIInfo使217下载片acceleratorkey是这个菜单项的快捷键可以用一个字符例如a或则是gdkgdkkeysymsh中定义的一个值来表示acmods是一个用于快捷键的组合键屏蔽值widget应当设置为NULL当Gnome创建菜单项或工具条按键时会将预制构件填充在其中假如想要用某种方法操纵该预制构件可以检索到它菜单项的名子的顿号用于标志菜单项的快捷键翻译程序会依照须要将顿号移开让菜单文本在其他国家的语言中是可读的Gnome会剖析菜单项名称并取得加速键之后将顿号删掉表中概括了GnomeUIInfo结构中type域的可能取值其中有几个最可能的取值并且其他几个值由Gnome内部使用下表对应用程序来说应当足够了表131GnomeUIInfoType值GnomeUIInfoType描述moreinfo域GNOMEAPPUIENDOFINFO中止一个GnomeUIInfo表NoneGNOMEAPPUIITEM普通菜单或工具条项或在反弹函数无线按键组中的单选项GNOMEAPPUITOGGLEITEM切换检测项反弹函数GNOMEAPPUIRADIOITEMS无线按键项组组中的无线按键项链表GNOMEAPPUISUBTREE子菜单菜单子树中的GnomeUIInfo链表GNOMEAPPUISEPARATOR分隔线NoneGNOMEAPPUIHELP帮助项要加载的帮助节点要创建一个完整的菜单树可以用GNOMEUIINFOSUBTREE宏生成一个指向上级菜单表的表针注意这儿的filemenu就是上面创建初始化的GnomeUIInfo结构staticGnomeUIInfomainmenuGNOMEUIINFOSUBTREENFilefilemenuGNOMEUIINFOEND不过在这个特殊情况中还有一个更好的宏staticGnomeUIInfomainmenuGNOMEUIINFOMENUFILETREEfilemenuGNOMEUIINFOEND这个宏的主要优点是标准化它保证所有的Gnome应用程序的文件菜单有同样的名称和快捷键还有一些类似的宏请参见libgnomeuignomeapphelperh头文件1322将GnomeUIInfo转换为预制构件一旦有了菜单表Gnome都会对它进行处理并将它转换成预制构件可以使用下表中的函数来完成转换函数列表由GnomeUIInfo创建预制构件include将uuiinfo转换为菜单并联接到GnomeApp窗口app上218使第二部份Linux编程常用C语言函数库及预制构件库下载voidgnomeappcreatemenusGnomeAppappGnomeUIInfouiinfo与上一个函数差不多而且userdata会覆盖uiinfo中的userdatavoidgnomeappcreatemenuswithdataGnomeAppappGnomeUIInfouiinfogpointeruserdata将uiinfo转换为工具条之后添加到GnomeApp窗口app上voidgnomeappcreatetoolbarGnomeAppappGnomeUIInfouiinfo与上一个函数差不多而且userdata会覆盖uiinfo中的userdatavoidgnomeappcreatetoolbarwithdataGnomeAppappGnomeUIInfouiinfogpointeruserdata将uiinfo转换为工具条预制构件可以将这生成的工具条添加到普通的GtkWindow上voidgnomeappfilltoolbarGtkToolbartoolbarGnomeUIInfouiinfoGtkAccelGroupaccelgroup与上一个函数类似而且data会覆盖uiinfo中的userdatavoidgnomeappfilltoolbarwithdataGtkToolbartoolbarGnomeUIInfouiinfoGtkAccelGroupaccelgroupgpointerdata用uuinfo创建一个GtkMenu可以将这个菜单项添加到GtkMenu上voidgnomeappfillmenuGtkMenuShellmenushellGnomeUIInfouiinfoGtkAccelGroupaccelgroupgbooleanulineaccelsgintpos与上一个函数类似而且userdata会覆盖uiinfo中的userdatavoidgnomeappfillmenuwithdataGtkMenuShellmenushellGnomeUIInfouiinfoGtkAccelGroupaccelgroupgbooleanulineaccelsgintposgpointeruserdata假如用GnomaApp作为主窗口gnomeappcreatemenus和gnomeappcreatetoolbar函数用所提供的GnomeUIInfo表创建菜单条和工具条之后将它们联接到GnomeApp窗口上多数情况下用这种函数就可以了所有工作如设置菜单和工具条等都是由Gnome手动完成的前面的每位函数都有一个以withdata结尾的变体变体函数中的userdata参数都会覆盖GnomeUIInfo结构中的userdata参数假如有更特殊的须要可以手工填充一个菜单条或则工具条之后把它添加到容器中第13章GnomeApp预制构件和GnomeUIInfo使219下载里面最后四个函数就是用于完成这个工作的填充函数须要指定一个快捷键组对GnomeApp来说在预制构件结构中早已有了一个快捷键组accelgroup成员菜单的填充函数带两个参数accelgroup和ulineaccels可以切换是否剖析GnomeUIInfo结构标签中的顿号以提取快捷键ulineaccels为TRUE时提取快捷键放在accelgroup中否则不提取快捷键对填充菜单pos参数指定应当在GtkMenuShell中的哪些位置开始插入菜单项当用GnomeUIInfo表创建菜单条和工具条时指向单个菜单项或工具条按键预制构件的表针储存在每位GnomeUIInfo结构的widget成员中可以用这种表针访问单个预制构件诸如假如创建了一个检测菜单项其实想设置检测项的状态假如想手工创建部份菜单这个表针也是很有用的诸如可以创建一个空的菜单子树项之后手工创建子树的内容220使第二部份Linux编程常用C语言函数库及预制构件库下载
本文原创地址://gulass.cn/srjxggjygzck.html编辑:刘遄,审核员:暂无