如何在GTK +中创建Google Chrome等窗口

时间:2011-01-31 08:08:37

标签: c gtk

我对GTK库很陌生,并尝试使用其C API开发GTK + 2中的小项目。要求是在 Google-Chrome类型窗口中执行此操作。它将拥有自己的标题栏和不同颜色的控件。

任何人都可以帮我解决任何已经实现过这个的教程或参考或任何开源代码吗?

感谢您的帮助。

5 个答案:

答案 0 :(得分:5)

由于Chromium浏览器是一个开源项目,因此可以在此处获取其来源:http://src.chromium.org/viewvc/chrome/trunk/

根据定义,您所寻求的应该是:)

答案 1 :(得分:5)

您要做的是自定义装饰。

我的理解是你必须在窗口上set_decorated False,以便WM不会将边框/标题栏本身添加到你的窗口,然后拥有你自己的自定义Window子类来处理它在{{ 1}}方法。

并非无足轻重。

答案 2 :(得分:2)

你可能正在寻找的是gtk独轮车示例。它向您展示了如何使用xpm文件创建一个整形窗口。这是C,Perl和Python中的一个示例。几年前我做了其中一个,但现在还没有使用它。

Here is the C version ...

The Python Example is Here ...

Here is a tutorial on pixmaps and GTK+

只需使用Gimp创建图像并将其另存为xpm文件。

答案 3 :(得分:1)

添加到246tNt的答案,Chrome使用了Skia。这是一个例子(Gtk + 3,cairo,skia):

  g_signal_connect(window_container_, "draw",
                   G_CALLBACK(OnWindowContainerDraw), NULL);

gboolean OnWindowContainerDraw(GtkWidget* widget,
                               cairo_t *cr) {                  
  SkBitmap bitmap;
  bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
  bitmap.allocPixels();

  SkDevice device(bitmap);
  SkCanvas canvas(&device);
  SkPaint paint;
  SkRect r;

  paint.setARGB(255, 255, 255, 255);
  r.set(10, 10, 20, 20);
  canvas.drawRect(r, paint);

  cairo_surface_t* surface = cairo_image_surface_create_for_data(
      (unsigned char*)bitmap.getPixels(), CAIRO_FORMAT_ARGB32,
      bitmap.width(), bitmap.height(), bitmap.rowBytes());
  cairo_surface_mark_dirty(surface);
  cairo_set_source_surface(cr, surface, 0, 0);
  cairo_paint(cr);

  return FALSE;
}

答案 4 :(得分:0)

我对你真正想要的东西感到有点困惑,但我认为你想要的是一个在你的窗口内提供网页浏览器的控件。

WebKitGTK +是一个这样的控件:http://webkitgtk.org/

GtkMozEmbed是另一个:http://www.mozilla.org/unix/gtk-embedding.html

上次我这样做,我不得不尝试一些找到一个有效的。控件有不同的错误,并支持HTML(和Flash。)