webkit自带谷歌浏览器实例分析 联系客服

发布时间 : 星期四 文章webkit自带谷歌浏览器实例分析更新完毕开始阅读

一个简单的浏览器了呐?嘎嘎O(∩_∩)O,,,欲知后事如何,且看下回分解。。。

Webkit自带谷歌浏览器实例分析(2)

上篇说到,咱们把main函数走了一遍了,是不是可以写个基于webkit简单的浏览器了呢?

非也,,,其实即便是这么简单的浏览器,代码也还没完。Main函数只是整个程序的一个入口而已,也就是说只是个门口,,,~~~~(>_<)~~~~ 好辛苦啊??里边东西多着哩!

还有三个创建整个浏览器界面的函数,不过我认为对了解Gtk的人来说应该不是很麻烦,只是核心部分是与webkit的接口,是不是还是像上节那样一直挖下去呢?快来看看吧~

还是先找重点的那三个函数。。。

/*严格来说这个例子很懒,直接定义在main函数之前了,有点乱是不?*/ static GtkWidget* create_toolbar (){} /*返回个工具栏,,,有点废话哈~*/ static GtkWidget* create_browser (){}/*返回个browser,,,依然废话哈~,这个

browser是什么哇?有点犯嘀咕*/

static GtkWidget* create_statusbar (){} /*这个好理解多了*/

/*Come on baby!创建工具栏啦*/ static GtkWidget* create_toolbar () {

GtkWidget* toolbar = gtk_toolbar_new (); /*创建一个工具栏部件*/

#if GTK_CHECK_VERSION(2,15,0) /*检查GTK+的版本,版本要比括号中的新才好*/ gtk_orientable_set_orientation (GTK_ORIENTABLE (toolbar),

GTK_ORIENTATION_HORIZONTAL);

#else

gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar),

/*设置工具箱是水平显示还是垂直显示*/ GTK_ORIENTATION_HORIZONTAL);

#endif

/*设置toolbar风格GTK_TOOLBAR_BOTH_HORIZ 是自定义的*/

gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH_HORIZ);

GtkToolItem* item; /*新建一个小家伙,准备暂存工具栏的控件*/

/* 后退按钮下边红色部分函数是从储存库中得到GTK_STOCK_GO_BACK图标*/ item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);

/*将信号click与item部件绑定,点击按钮时候调用go_back_cb ,null是要传给回调函数的参数,这里为空。一会再分析回调函数,回调函数一般cb结尾*/

g_signal_connect (G_OBJECT (item), \go_back_cb),

NULL);

gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);/*负1表示从工具栏

的最后第一个位置追加*/

/* 前进按钮,同上,就不罗嗦了 */

item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);

g_signal_connect (G_OBJECT (item), \G_CALLBACK (go_forward_cb),

NULL);

gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);/*追加到最后一个*/

/* 地址输入栏,,,注意了啊,含金量的地方!O(∩_∩)O */ item = gtk_tool_item_new ();

gtk_tool_item_set_expand (item, TRUE);/*将item放大占据额外的控件*/ uri_entry = gtk_entry_new ();/*创建一个网址输入框直接加到工具栏可否?*/ gtk_container_add (GTK_CONTAINER (item), uri_entry);/*放到item中去*/ g_signal_connect (G_OBJECT (uri_entry), \G_CALLBACK

(activate_uri_entry_cb), NULL);

gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);

/* The go button */

item = gtk_tool_button_new_from_stock (GTK_STOCK_OK);

/* g_signal_connect_swapped 与g_signal_connect 意思一样,只不过前者的回调函数有一个参数,也就是g_signal_connect_swapped的第四个参数,这次非空了噶 */

g_signal_connect_swapped (G_OBJECT (item), \G_CALLBACK

(activate_uri_entry_cb), (gpointer)uri_entry);

gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);

return toolbar; }/*工具栏创建完毕,,,先把这三个函数看完,待会去看回调函数去*/

/*创建browser,何为browser,,,我也不知道,不过一会就知道了*/ static GtkWidget* create_browser ()

{ /*先创建一个带滚动条的滚动窗,原来如此,滚动条是滚动窗的一部分啊*/ GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);

/*为滚动条设置一个策略,GTK_POLICY_AUTOMATIC 意思是需要时候才显示*/

gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),

GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

/*这个是全局变量,相当于一个view就是(标题栏+页面)视图,然后放入滚动窗*/ web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET

(web_view));

g_signal_connect (web_view, \G_CALLBACK (title_change_cb),

web_view);/* title-changed信号与web_view绑定.时间发生调用title_change_cb回调函数改变标题*/

g_signal_connect (web_view, \G_CALLBACK

(notify_load_status_cb), web_view);/*加载状态,分为正在提交,加载完成,未加载三个状态*/

g_signal_connect (web_view, \G_CALLBACK

(notify_progress_cb), web_view);/*加载进度*/

g_signal_connect (web_view, \G_CALLBACK

(link_hover_cb), web_view);

return scrolled_window;

} /*至此带滚动条的窗口创建完毕,,,回调函数与信号回头一起研究*/

static GtkWidget* create_statusbar () {

main_statusbar = GTK_STATUSBAR (gtk_statusbar_new ());

status_context_id = gtk_statusbar_get_context_id (main_statusbar, \

Hover\

return (GtkWidget*)main_statusbar; }/*创建状态栏*/

/*下面该创建个东西放这三个:工具栏、状态栏、browser了,创建mainwindow*/ static GtkWidget* create_window () {

/*创建一个主窗口*/

GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /*设置默认大小*/

gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); gtk_widget_set_name (window, \/*设置窗口名字*/

/*绑定销毁回调函数,一般来说都会有这个函数的*/

g_signal_connect (window, \

return window; }/*主窗口创建完毕*/

目前为止,整个程序基本上走完了一遍,程序的第二个层次也已分析完毕,,,剩下的回调函数部分是与webkit接触最为紧密的一部分,且听下回细细道来