» «

C/C++隐藏摘要

  • 用 cairo 实现跨平台图形(2) (发布于 2008-12-02)

    3.为什么要学习一种新的绘图模型? 坦率地说,我认为目前的开放源码解决方案在几个方面存在欠缺。xprint 的优点是提供了统一的显示和打印 API,但是它通常作为单独的服务器进程运行,而且它的 API 很糟糕。libgnomeprint 提供单独的打印和显示模型,但是打印和绘图 API 的分离使屏幕和打印机的呈现效果产生差异。 cairo 从以前的绘图库借鉴了许多经验,而且从一开始就以实现统一 API 为设计目标。 4.cai. ...查看

  • 用 cairo 实现跨平台图形(3) (发布于 2008-12-02)

    7.正确的 cairo 术语 在讨论任何技术时,都要使用正确的术语。cairo API 的术语分为三类:核心绘图术语、外表术语和与字体相关的术语(更多细节见 参考资料)。 首先,cairo 有一个绘图上下文(drawing context),这相当于画家的画布。上下文是 cairo_t 类型的,要呈现图形,就必须有一个上下文。在绘图上下文上的常见操作是绘制 Bezier 图形、直线和曲线。表示一系列曲线和相关数据的 cairo 术语是路径(path)。. ...查看

  • 使用GTK+进行国际化(3) (发布于 2008-12-02)

    8.代码 既然您已经了解了国际化的基本思想,那么接下来看看如何在 GTK+ 代码中处理它们。 首先,您必须声明一些允许 gettext 库为您的应用程序找到正确消息的名称。请注意,在现实的场景中,构建系统将为您处理这些名称,但是出于我们的需要,可以使用下面的名称: #define GETTEXT_PACKAGE "foo-app" #define LOCALEDIR "mo" 在此之后,您必须正确地包含 gettext Header。完成该任务的最简单的方法是使用 . ...查看

  • 制作GTK+控件(2) (发布于 2008-12-02)

    (3)信号的定义、发射与连接 这里自定义的信号是当按下回车键后,自动输出一行信息,说明输入已经结束。需要说明的是信号的定义不是在实例结构和类结构的定义(ouritem.h)中定义,而是在实例结构和类结构的实现(ouritem.c)中定义和实现的。 首先为信号定义标记,它是以枚举类型来实现的(见代码),为我们定义的信号命名为OURITEM_OK_SIGNAL,也是第一个信号名;最后一个信号名为LAST_SIGNAL,这样按照C语言中枚举类型. ...查看

  • 制作GTK+控件(1) (发布于 2008-12-02)

    在做GTK 自定义控件之前,应先了解两个问题,其一是GTK 中的GDK库完成了对X Window的核心Xlib库的封装,使之简化易用;其二是GTK 本身完成了绝大部分常用控件的封装,使之可在编程中灵活运用。所以读懂GTK 控件的源代码就应会写简单的自定义控件,透彻掌握GDK则会做出复杂的GTK 控件来。 1.GTK 控件简介 与大多数图形界面开发工具一样,GTK 的控件也是以对象的形式出现的。GTK 控件的基础对象GtkObject继. ...查看

  • 使用GTK+进行国际化(2) (发布于 2008-12-02)

    5.了解语言之间的差异 显现出这些差异的一种情况是在自动生成的消息中,特别是那些涉及到复数的消息。请考虑下面的两种方法: printf ("Retrieved %d file%s\n", n_files, n_files != 1 ? "s" : ""); 和 printf ("Retrieved %d file(s)\n", n_files); 这两种方法都是错误的,而且在英语(即使在英语中也是有问题的,比如您需要处理 fish 或 stories,而不是 files)以外的语言中没有任何价值,它们不适合于. ...查看

  • 制作GTK+控件(3) (发布于 2008-12-02)

    以下为ouritem.c的完整代码: #include #include #include "ouritem.h" //定义枚举类型,说明信号的名称和次序 enum { OURITEM_OK_SIGNAL, LAST_SIGNAL }; static gint ouritem_signals[LAST_SIGNAL] = { 0 }; static void our_item_init(OurItem *ouritem); static void our_item_class_init(OurItemClass *ouritemclass); static void enter_ok(void); void on_key_release(GtkWidget *en. ...查看

  • GTK+和MFC不完全对比 (发布于 2008-12-02)

    (1) 两者都是基于面向对象设计的。尽管MFC是用C++写的,而GTK+是用C写的,但思想都是面向对象的。GTK+使用glib的对象机制,由于用C写的,其实现相对有点繁琐。 (2) 两者都是基于消息驱动的。这是GUI系统的共性,消息可以是硬件上报的,如鼠标事件、键盘事件和触摸屏等等,也可以是程序产生,如一个窗口给另外一个窗口发送了一个消息。但两者并不完全相同,GTK+通过select挂在多个文件描述符上,可以同. ...查看

  • 制作GTK+控件(4) (发布于 2008-12-02)

    (5)编译与测试 可以编写一个小程序来测试一下这个自定义控件,测试的前提是先将实例结构和类结构的定义头文件ouritem.h包含到测试文件中来,先用 our_item_new_with_label来创建一个我们自定义的控件,然后为控件的ouritem_ok信号加一个回调函数 on_item_ok,函数的功能是向另一个单行录入控件中加入文本,最后将我们自定义的控件加入到窗口的纵向盒状容器中来。测试代码如下: //main.c #include #inc. ...查看

  • 使用GTK+进行国际化(1) (发布于 2008-12-02)

    世界正在不断地发展。如今,您不能够忽视全球市场的存在,并且计算机也不是那些花费大量时间和精力去研究其中复杂情况的少数人的昂贵的玩具。因此,创建适合于国际用户的即时可用的应用程序的需求也在日益地增长。 通常,图形用户界面 (GUI),特别是GTK+应用程序也不例外。实际上,经过巨大改进的国际化(以下称为 i18n,表示单词 internationalization i 和 n 之间的 18 个字母)支持是从 GTK+ V1.x 到 V2.. ...查看

  • QT的信号与槽机制介绍(2) (发布于 2008-12-02)

    四、信号与槽的关联 通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下: bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static] 这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的memb. ...查看

  • QT的信号与槽机制介绍(1) (发布于 2008-12-02)

    QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的 KDE桌面环境就是建立在QT库的基础之上。QT支持下列平台:MS/WINDOWS-95、98、NT和2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMBEDDED-支持framebuffer的Linux平台。伴随着KDE的快速发展和普及,QT很可能成为Linu. ...查看

  • QT的信号与槽机制介绍(3) (发布于 2008-12-02)

    六、程序样例 这里给出了一个简单的样例程序,程序中定义了三个信号、三个槽函数,然后将信号与槽进行了关联,每个槽函数只是简单的弹出一个对话框窗口。读者可以用kdevelop生成一个简单的QT应用程序,然后将下面的代码添加到相应的程序中去。 信号和槽函数的声明一般位于头文件中,同时在类声明的开始位置必须加上Q_OBJECT语句,这条语句是不可缺少的,它将告诉编译器在编译之前必须先应用moc工具进行. ...查看

  • QT的信号与槽机制介绍(4) (发布于 2008-12-02)

    七、应注意的问题 信号与槽机制是比较灵活的,但有些局限性我们必须了解,这样在实际的使用过程中做到有的放矢,避免产生一些错误。下面就介绍一下这方面的情况。 1.信号与槽的效率是非常高的,但是同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失,当然这种损失相对来说是比较小的,通过在一台i586-133的机器上测试是10微秒(运行Linux),可见这种机制所提供的简洁性、灵活性还是值得的. ...查看

  • 如何在GTK+中实现拖放(1) (发布于 2008-12-02)

    1.概述 一个支持GTK+拖放的应用程序先要定义和设置能拖放的构件。每个构件都可以是拖放的来源端和/或目标端。注意这些构件必须有一个关联的 X 窗口,用GTK_WIDGET_NO_WINDOW(widget) 检测。 源构件可以发送拖动数据,因此允许用户把东西从它们上面拖出去,同时目标构件能接收拖动数据。拖放的目标端能限制它们接受谁的拖动数据,比如,同一应用程序或任意应用程序(包括它自己)。 发送和接收拖动数据. ...查看

  • 如何在GTK+中实现拖放(2) (发布于 2008-12-02)

    3.函数 (1)设置源构件 gtk_drag_source_set()函数指定一套在构件上拖动操作时的目标类型。 void gtk_drag_source_set( GtkWidget *widget, GdkModifierType start_button_mask, const GtkTargetEntry *targets, gint n_targets, GdkDragAction actions ); 这些参数的作用如下: widget:指定拖动源构件 start_button_mask:指定能引发拖动操作的鼠标按. ...查看

  • Glib使用说明(1) (发布于 2008-12-02)

    Glib是一种底层库,创建 GDK 和 GTK 应用程序时该库可提供许多有用的定义和函数。它们包括基本类型及限制的定义、标准宏、类型转换、字节序、存储分配、警告和断言、消息记录、计时器、字符串工具 (string utilities)、挂钩 (hook) 函数、一个句法扫描器、动态加载模块和自动字符串补全,它也定义了许多数据结构(及其相应的操作),包括存储块、双向链表、单向链表、哈希表、串(动态增长)、串块(. ...查看

  • Glib使用说明(3) (发布于 2008-12-02)

    7.实用程序和错误处理函数 gchar *g_strdup( const gchar *str ); 替代strdup函数。把原字符串内容复制到新分配的存储块中,返回指向它的指针。 gchar *g_strerror( gint errnum ); 我推荐使用此函数处理所有错误信息,它比 perror() 和其它类似函数更好,更具 可移植性。此函数的输出通常为如下格式: program name:function that failed:file or further description:strerror 这里有一个在我们. ...查看

  • Glib使用说明(2) (发布于 2008-12-02)

    4.存储管理 gpointer g_malloc( gulong size ); 这是 malloc() 函数的替代函数,不需要检查返回值,因为此函数已替你做这件事了。如果存储分配因任何原因失败,应用程序将被终止。 gpointer g_malloc0( gulong size ); 和上一函数相同,但在返回指向所分配存储块的指针之前,将该存储块清 0。 gpointer g_realloc( gpointer mem, gulong size ); 重新分配由mem开始,大小为 size 字节的存储块。明显. ...查看

  • GTK+中普通按钮使用说明 (发布于 2008-12-02)

    GTK+中一般按钮的使用十分简单,创建按钮有好几种方法。你可以用函数 gtk_button_new_with_label() 和 gtk_button_new_with_mnemonic() 去创建一个带标签的按钮,用函数 gtk_button_new_from_stock() 去创建一个包含图像和标准文本的按钮,或者用函数 gtk_button_new() 去创建一个空白按钮。你也可以把标签或图像放入按钮里。要这样做,你需创建一个新的盒子,用函数gtk_box_pack_start() 把你的对. ...查看

  • GTK+中开关按钮使用说明 (发布于 2008-12-02)

    开关按钮源自一般按钮,并且非常相似,只是开关按钮有两个状态,通过点击可以切换。它们可以是按下的,再按一下,它们可以弹起。 开关按钮是复选按钮和单选按钮的基础,所以复选按钮和单选按钮继承了许多开关按钮的函数调用。 创建一个新的开关按钮 GtkWidget *gtk_toggle_button_new( void ); GtkWidget *gtk_toggle_button_new_with_label( const gchar *label ); GtkWidget *gtk_toggle_button_new. ...查看

  • GTK+中单选按钮使用说明 (发布于 2008-12-02)

    单选按钮与复选按钮相似,只是单选按钮是分组的,在一组中只有一个处于选中/按下状态。这在你的应用程序中要从几个选项中选一个的地方可以用到。 用这些调用之一来创建一个新的单选按钮: GtkWidget *gtk_radio_button_new( GSList *group ); GtkWidget *gtk_radio_button_new_from_widget( GtkRadioButton *group ); GtkWidget *gtk_radio_button_new_with_label( GSList *group, const gchar . ...查看

  • GTK+中复选按钮使用说明 (发布于 2008-12-02)

    复选按钮继承了开关按钮的许多属性和功能,但看起来有一点点不同。不像开关按钮那样文字在按钮内部,复合按钮左边是一个小的方框,而文字在其右边。这些常用在应用程序中以切换各选项的开和关。 创建函数和普通按钮的类似。 GtkWidget *gtk_check_button_new( void ); GtkWidget *gtk_check_button_new_with_label ( const gchar *label ); GtkWidget *gtk_check_button_new_with_mnemonic ( . ...查看

  • GTK+中调整对象(Adjustment)使用说明(1) (发布于 2008-12-02)

    GTK 有多种构件能够由用户通过鼠标或键盘进行调整,比如范围构件。还有一些构件,比如说 GtkText 和 GtkViewport,内部都有一些可调整的属性。 很明显,当用户调整范围构件的值时,应用程序需要对值的变化进行响应。一种办法就是当构件的调整值发生变化时,让每个构件引发自己的信号,将新值传递到信号处理函数中,或者让它在构件的内部数据结构中查找构件的值。但是,也许需要将这个调整值同时连接到几个. ...查看

  • GTK+中调整对象(Adjustment)使用说明(2) (发布于 2008-12-02)

    你可能要问,如果我想创建一个信号处理函数,当用户调整范围构件或微调按钮时让这个处理函数进行响应,应该从调整对象中取什么值,怎样从中取值呢?要解决这个问题,先看一下 _GtkAdjustment结构的定义: struct _GtkAdjustment { GtkObject parent_instance; gdouble lower; gdouble upper; gdouble value; gdouble step_increment; gdouble page_increment; gdouble page_size; }; 如果你不喜欢像一个. ...查看

  • GTK+中比例控件使用说明 (发布于 2008-12-02)

    比例构件(Scale widgets)一般用于允许用户在一个指定的取值范围你可视地选择和操纵一个值。例如,在图片的缩放预览中调整放大倍数,或控制一种颜色的亮度,或在指定屏幕保护启动之前不活动的时间间隔时,可能需要用到比例构件。 像滚动条一样,有水平和垂直两种不同类型的比例构件。(大多数程序员似乎喜欢水平的比例构件。)既然在本质上它们的工作方式是相同的,那么不需要对它们分别对待。下面的函数. ...查看

  • GTK+中滚动条控件使用说明 (发布于 2008-12-02)

    这是指的是标准的,到处被使用的滚动条(Scrollbar)。一般只用于滚动其它的构件,比如列表、文本构件,或视角构件(在很多情况下使用滚动窗口构件更方便)。对其它目的,应该使用比例构件,因为它更友好,而且有更多的特性。 分别有水平和垂直滚动条两种类型。实在不必对它们作说明。你用下面的函数创建 滚动条: GtkWidget *gtk_hscrollbar_new( GtkAdjustment *adjustment ); GtkWidget *gtk_vscrollbar. ...查看

  • GTK+中标签(Label)使用说明(1) (发布于 2008-12-02)

    标签(Labels)是 GTK 中最常用的构件,实际上它很简单。但因为没有相关联的 X 窗口,标签不能引发信号。如果需要获取或引发信号,可以将它放在一个事件盒中,或放在按钮构件里面。 用以下函数创建一个新标签: GtkWidget *gtk_label_new( const char *str ); GtkWidget *gtk_label_new_with_mnemonic( const char *str ); 唯一的参数是要由标签显示的字符串。创建标签后,要改变标签你的文本,用以下函数. ...查看

  • GTK+中标签(Label)使用说明(2) (发布于 2008-12-02)

    下面是一个说明这些函数的短示例。这个示例用框架构件(Frame widget)能更好地示范标签的风格。现在你不用理会这点,框架构件以后再作介绍。 在 GTK+ 2.0 里,标签文本里能包含改变字体等文本属性的标记,并且标签能设置为可以被选择(用来复制-粘贴)。这些高级特性在这里并不介绍。 #include int main( int argc, char *argv[] ) { static GtkWidget *window = NULL; GtkWidget *hbox; GtkW. ...查看

  • GTK+中箭头控件(Arrow)使用说明 (发布于 2008-12-02)

    箭头构件(Arrow widget)画一个箭头,面向几种不同的方向,并有几种不同的风格。在许多应用程序中,常用于创建带箭头的按钮。和标签构件一样,它不能引发信号。 只有两个函数用来操纵箭头构件: GtkWidget *gtk_arrow_new( GtkArrowType arrow_type, GtkShadowType shadow_type ); void gtk_arrow_set( GtkArrow *arrow, GtkArrowType arrow_type, GtkShadowType shadow_type ); 第一个函数. ...查看

  • GTK+中工具提示控件(Tooltips)使用说明 (发布于 2008-12-02)

    工具提示对象 The Tooltips Object 工具提示对象(Tooltips)就是当鼠标指针移到按钮或其它构件上并停留几秒时,弹出的文本串。工具提示对象很容易使用,所以在此仅仅对它们进行解释,不再举例。如果你想要看些代码,可以看看 GTK 附带的testgtk.c程序。 不接收事件的构件(没有自己的 X 窗口的构件)不能和工具提示对象一起工作。 可以使用 gtk_tooltips_new() 函数创建工具提示对象。因为GtkTooltips. ...查看

  • GTK+中进度条(Progress Bar)使用说明(1) (发布于 2008-12-02)

    进度条用于显示正在进行的操作的状态。在下面的代码中可以看出,它相当容易使用。下面的内容从创建一个新进度条开始。 GtkWidget *gtk_progress_bar_new( void ); 创建进度条后就可以使用它了。 void gtk_progress_bar_set_fraction ( GtkProgressBar *pbar, gdouble fraction ); 第一个参数是希望操作的进度条,第二个参数是“已完成”的百分比,意思是进度条从0-100%已经填. ...查看

  • GTK+中进度条(Progress Bar)使用说明(2) (发布于 2008-12-02)

    下面是一个进度条的示例,用timeout函数更新进度条的值。代码也演示了怎样复位进度条。 #include typedef struct _ProgressData { GtkWidget *window; GtkWidget *pbar; int timer; gboolean activity_mode; } ProgressData; /* 更新进度条,这样就能够看到进度条的移动 */ gint progress_timeout( gpointer data ) { ProgressData *pdata = (ProgressData *)data; gdouble new_val; if (pda. ...查看

  • GTK+中对话框(Dialog)使用说明 (发布于 2008-12-02)

    对话构件非常简单,事实上它仅仅是一个预先组装了几个构件到里面的窗口。对话框的数据结构是: struct GtkDialog { GtkWindow window; GtkWidget *vbox; GtkWidget *action_area; }; 从上面可以看到,对话框只是简单地创建一个窗口,并在顶部组装一个纵向盒(vbox),然后在这个纵向盒中组装一个分隔线(separator),再加一个称为“活动区(action_area)”的横向盒(hbox)。 对话框构件可以用于. ...查看

  • GTK+中标尺(Ruler)使用说明 (发布于 2008-12-02)

    标尺构件(Ruler widgets)一般用于在给定窗口中指示鼠标指针的位置。一个窗口可以有一个横跨整个窗口宽度的水平标尺和一个占据整个窗口高度的垂直标尺。标尺上有一个小三角形的指示器标出鼠标指针相对于标尺的精确位置。 首先,必须创建标尺。水平和垂直标尺用下面的函数创建: GtkWidget *gtk_hruler_new( void ); /* 水平标尺 */ GtkWidget *gtk_vruler_new( void ); /* 垂直标尺 */ . ...查看

  • GTK+中状态栏(Status Bar)使用说明 (发布于 2008-12-02)

    状态栏(Status bar)是一些简单的构件,一般用来显示文本消息。它将文本消息压入到一个栈里面,当弹出当前消息时,将重新显示前一条文本消息。 为了让应用程序的不同部分使用同一个状态栏显示消息,状态栏构件使用上下文标识符(Context Identifiers)来识别不同“用户”。在栈顶部的消息就是要显示的消息,不管它的上下文是什么。消息在栈里面是以后进先出(last-in-first-out)的方式保存的,. ...查看

  • GTK+中文本输入控件(Entry)使用说明(1) (发布于 2008-12-02)

    文本输入构件(Entry widget)允许在一个单行文本框里输入和显示一行文本。文本可以用函数进行操作,如将新的文本替换、前插、追加到文本输入构件的当前内容中。 用下面的函数创建一个文本输入构件: GtkWidget *gtk_entry_new( void ); 下面的函数改变文本输入构件当前的文本内容。 void gtk_entry_set_text( GtkEntry *entry, const gchar *text ); 文本输入构件的内容可以用下面的函数获取。. ...查看

  • GTK+中文本输入控件(Entry)使用说明(2) (发布于 2008-12-02)

    下面的代码是一个使用文本输入构件的示例。 #include #include #include void enter_callback( GtkWidget *widget, GtkWidget *entry ) { const gchar *entry_text; entry_text = gtk_entry_get_text (GTK_ENTRY (entry)); printf("Entry contents: %s\n", entry_text); } void entry_toggle_editable( GtkWidget *checkbutton, GtkWidget *entry ) { gtk_editable_set_editable (GTK_. ...查看

  • GTK+中微调控件(Spin Button)使用说明(2) (发布于 2008-12-02)

    下面是一个使用微调按钮构件的示例。 #include #include static GtkWidget *spinner1; void toggle_snap( GtkWidget *widget, GtkSpinButton *spin ) { gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active); } void toggle_numeric( GtkWidget *widget, GtkSpinButton *spin ) { gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->activ. ...查看

  • GTK+中微调控件(Spin Button)使用说明(1) (发布于 2008-12-02)

    创建微调按钮构件之后,还可以用下面的函数对其重新配置: void gtk_spin_button_configure( GtkSpinButton *spin_button, GtkAdjustment *adjustment, gdouble climb_rate, guint digits ); 其中spin_button参数就是要重新配置的构件。其它的参数与创建时的意思相同。 使用下面的两个函数可以设置或获取构件内部使用的调整对象: void gtk_spin_button_set_adjustment( GtkSpi. ...查看

3691/1012345678910>