本来想接上篇把关于窗口方面的写的更详尽一点,但因为我做软件的习惯来说还暂时用不不到、我们先跳过,然后先说说窗口中的布局。跟大多数软件界面一样,一般包含标题栏、菜单栏、工具栏、状态栏和工作区等。

首先,我必须要有一个初步的规划,因为是自己设计一些软件,我只需要问我自己几个问题(why/how),而不需要跟设计部进行沟通。
1.Q:为什么要设计这个demo?
   A:初步认识GTK+的构件并应用到实际开发中,实现掌握GTK+的能力并能分享给大家。

2.Q:如何分享?demo有什么功能?
   A:我通过逐步添加代码的方式,高亮显示能看到代码进化的过程,让本系列读者达到学习的目的;要全面接触到所有的GTK+的构建,那么只有把demo做成GTK+构件演示软件才能满足了。

3.Q:demo的界面大致是怎么样的?
   A:基本的软件界面,通过菜单、工具栏等方式逐步演示界面上显示不到的功能。

4.Q:怎么样去划分demo的功能?
   A:根据Glade 3中的划分,GTK+构建分为Toplevels、Containers、Controls and Display、Composite Widgets等类型。所以在菜单设计中可以按这个分类去设计。

好了,现在应该基本知道未来的demo大概是个什么样的了吧。

一、添加简单菜单栏,以后在逐步完善

在添加菜单栏之前、还需要用一个容器来将窗体划分为多个区域,以供放工具栏、状态栏等.我们从上到下分4栏,最上面是菜单栏,紧接着是工具栏,然后是工作区,最下面是状态栏。我们先添加一个容器vbox来划分区域,并加入toggle菜单。这个菜单的功能是让用户可以操作划分区域的显示和隐藏。

#include <gtk/gtk.h>/*@Description: 从一个图片中获取信息得到pixbuf@param:       gchar filename
*/
GdkPixbuf *create_pixbuf(const gchar * filename)
{GdkPixbuf *pixbuf;GError *error = NULL;/** 函数gdk_pixbuf_new_from_file() 从一个图片文件中加载图象数据,从而生成一个新的 pixbuf,* 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL 的话,程序就会出现错误。*/pixbuf = gdk_pixbuf_new_from_file(filename, &error);if(!pixbuf) {fprintf(stderr, "%s\n", error->message);g_error_free(error);}return pixbuf;
}int main( int argc, char *argv[])
{GtkWidget *window; GtkWidget *vbox;            //盒装容器GtkWidget *menubar;         //菜单栏GtkWidget *menutoggle, *menu_tog_toggle,*menu_tog_toolbar, *menu_tog_statusbar;  //界面开关菜单//GtkWidget *menu_about, *menu_about_us;  //帮助菜单/*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/gtk_init(&argc, &argv);/*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/*设置窗口标题*/gtk_window_set_title(GTK_WINDOW(window), "一步一步学GTK+ DEMO");/*设置窗口默认大小*/gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);/** 设置窗口在显示器中的位置为居中。*   GTK_WIN_POS_NONE            :不固定*   GTK_WIN_POS_CENTER          : 居中*   GTK_WIN_POS_MOUSE           : 出现在鼠标位置*   GTK_WIN_POS_CENTER_ALWAYS   : 窗口改变大小的时候仍然居中*/gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*函数gtk_window_set_icon() 是为窗口设置图标用的,函数create_pixbuf是我们自定义的,目的是从一个图片中获取信息得到pixbuf。*/gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("./images/bear.png"));
    /*创建一个盒装容器并添加到窗口中*/vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);/*创建菜单*/menubar = gtk_menu_bar_new();   //代表整个菜单,是一个menu shellmenutoggle = gtk_menu_new();   //这里代表第一列菜单toggle ,也是一个menu shellmenu_tog_toggle = gtk_menu_item_new_with_label("widget toggle");menu_tog_toolbar = gtk_menu_item_new_with_label("show Toolbar"); //toggle 菜单中子项menu_tog_statusbar = gtk_menu_item_new_with_label("show Statusbar");gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_tog_toggle), menutoggle);  //widget toggle菜单加入 menutoggle menu shellgtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_toolbar);gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_statusbar);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menu_tog_toggle);/*把菜单加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);/***********************************以下是信号处理部分************************************//*关闭窗口时退出主循环*/g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit), NULL);/***********************************以下是显示控件部分************************************//*开始显示窗口*/ //gtk_widget_show(window);
    gtk_widget_show_all(window);gtk_main();return 0;
}

二、添加状态栏,并点击任意菜单的时候在状态来显示内容

#include <gtk/gtk.h>/*@Description: 从一个图片中获取信息得到pixbuf@param:       gchar filename
*/
GdkPixbuf *create_pixbuf(const gchar * filename)
{GdkPixbuf *pixbuf;GError *error = NULL;/** 函数gdk_pixbuf_new_from_file() 从一个图片文件中加载图象数据,从而生成一个新的 pixbuf,* 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL 的话,程序就会出现错误。*/pixbuf = gdk_pixbuf_new_from_file(filename, &error);if(!pixbuf) {fprintf(stderr, "%s\n", error->message);g_error_free(error);}return pixbuf;
}/*点击菜单时,状态栏显示*/
void menu_pressed(GtkWidget *widget, gpointer window)
{gchar *str;str = g_strdup_printf("you clicked one menu item");gtk_statusbar_push(GTK_STATUSBAR(window),gtk_statusbar_get_context_id(GTK_STATUSBAR(window), str), str);g_free(str);
}int main( int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;            //盒装容器GtkWidget *menubar;         //菜单栏GtkWidget *menutoggle, *menu_tog_toggle,*menu_tog_toolbar, *menu_tog_statusbar;  //界面开关菜单//GtkWidget *menu_about, *menu_about_us;  //帮助菜单GtkWidget *statusbar;       //状态栏/*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/gtk_init(&argc, &argv);/*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/*设置窗口标题*/gtk_window_set_title(GTK_WINDOW(window), "一步一步学GTK+ DEMO");/*设置窗口默认大小*/gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);/** 设置窗口在显示器中的位置为居中。*   GTK_WIN_POS_NONE            :不固定*   GTK_WIN_POS_CENTER          : 居中*   GTK_WIN_POS_MOUSE           : 出现在鼠标位置*   GTK_WIN_POS_CENTER_ALWAYS   : 窗口改变大小的时候仍然居中*/gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*函数gtk_window_set_icon() 是为窗口设置图标用的,函数create_pixbuf是我们自定义的,目的是从一个图片中获取信息得到pixbuf。*/gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("./images/bear.png"));/*创建一个盒装容器并添加到窗口中*/vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);/*创建菜单*/menubar = gtk_menu_bar_new();   //代表整个菜单,是一个menu shell
menutoggle = gtk_menu_new();   //这里代表第一列菜单toggle ,也是一个menu shellmenu_tog_toggle = gtk_menu_item_new_with_label("widget toggle");menu_tog_toolbar = gtk_menu_item_new_with_label("show Toolbar"); //toggle 菜单中子项menu_tog_statusbar = gtk_menu_item_new_with_label("show Statusbar");gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_tog_toggle), menutoggle);  //widget toggle菜单加入 menutoggle menu shell
    gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_toolbar);gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_statusbar);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menu_tog_toggle);/*把菜单加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 4);statusbar = gtk_statusbar_new();gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);/***********************************以下是信号处理部分************************************//*关闭窗口时退出主循环*/g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(menu_tog_toolbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));g_signal_connect(G_OBJECT(menu_tog_statusbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));/***********************************以下是显示控件部分************************************//*开始显示窗口*///gtk_widget_show(window);
    gtk_widget_show_all(window);gtk_main();return 0;
}

状态栏的相关函数:

guint      gtk_statusbar_push              (GtkStatusbar *statusbar,guint           context_id,const gchar  *text);
void       gtk_statusbar_pop              (GtkStatusbar *statusbar,guint           context_id);
void       gtk_statusbar_remove            (GtkStatusbar *statusbar,guint           context_id,guint         message_id);
void       gtk_statusbar_remove_all        (GtkStatusbar *statusbar,guint           context_id);

三、添加工具栏,并给“退出”按钮加入信号

#include <gtk/gtk.h>/*@Description: 从一个图片中获取信息得到pixbuf@param:       gchar filename
*/
GdkPixbuf *create_pixbuf(const gchar * filename)
{GdkPixbuf *pixbuf;GError *error = NULL;/** 函数gdk_pixbuf_new_from_file() 从一个图片文件中加载图象数据,从而生成一个新的 pixbuf,* 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL 的话,程序就会出现错误。*/pixbuf = gdk_pixbuf_new_from_file(filename, &error);if(!pixbuf) {fprintf(stderr, "%s\n", error->message);g_error_free(error);}return pixbuf;
}/*点击菜单时,状态栏显示*/
void menu_pressed(GtkWidget *widget, gpointer window)
{gchar *str;str = g_strdup_printf("you click one menu item");gtk_statusbar_push(GTK_STATUSBAR(window),gtk_statusbar_get_context_id(GTK_STATUSBAR(window), str), str);g_free(str);
}int main( int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;            //盒装容器GtkWidget *menubar;         //菜单栏GtkWidget *menutoggle, *menu_tog_toggle,*menu_tog_toolbar, *menu_tog_statusbar;  //界面开关菜单//GtkWidget *menu_about, *menu_about_us;  //帮助菜单 GtkWidget *toolbar;         //工具栏GtkToolItem *tool_exit, *tool_sep,*tool_about;GtkWidget *statusbar;       //状态栏/*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/gtk_init(&argc, &argv);/*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/*设置窗口标题*/gtk_window_set_title(GTK_WINDOW(window), "一步一步学GTK+ DEMO");/*设置窗口默认大小*/gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);/** 设置窗口在显示器中的位置为居中。*   GTK_WIN_POS_NONE            :不固定*   GTK_WIN_POS_CENTER          : 居中*   GTK_WIN_POS_MOUSE           : 出现在鼠标位置*   GTK_WIN_POS_CENTER_ALWAYS   : 窗口改变大小的时候仍然居中*/gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*函数gtk_window_set_icon() 是为窗口设置图标用的,函数create_pixbuf是我们自定义的,目的是从一个图片中获取信息得到pixbuf。*/gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("./images/bear.png"));/*创建一个盒装容器并添加到窗口中*/vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);/*创建菜单*/menubar = gtk_menu_bar_new();   //代表整个菜单,是一个menu shell
menutoggle = gtk_menu_new();   //这里代表第一列菜单toggle ,也是一个menu shellmenu_tog_toggle = gtk_menu_item_new_with_label("View");menu_tog_toolbar = gtk_menu_item_new_with_label("show Toolbar"); //toggle 菜单中子项menu_tog_statusbar = gtk_menu_item_new_with_label("show Statusbar");gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_tog_toggle), menutoggle);  //widget toggle菜单加入 menutoggle menu shell
    gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_toolbar);gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_statusbar);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menu_tog_toggle);//创建工具栏toolbar = gtk_toolbar_new();gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); //设置工具栏样式为图标gtk_container_set_border_width(GTK_CONTAINER(toolbar), 0);      //工具栏边框大小tool_exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);     //工具栏中的 “退出” 按钮gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_exit, -1);tool_sep = gtk_separator_tool_item_new();                       //工具栏中按钮之间的分割线gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_sep, -1);tool_about = gtk_tool_button_new_from_stock(GTK_STOCK_HELP);    //工具栏中的“关于” 按钮gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_about, -1);statusbar = gtk_statusbar_new();/*把菜单加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 1);/*把工具栏加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);/*把状态栏加入盒子最下面*/gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);/***********************************以下是信号处理部分************************************//*关闭窗口时退出主循环*/g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(tool_exit), "clicked",G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(menu_tog_toolbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));g_signal_connect(G_OBJECT(menu_tog_statusbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));/***********************************以下是显示控件部分************************************//*开始显示窗口*///gtk_widget_show(window);
    gtk_widget_show_all(window);gtk_main();return 0;
}


四、选择(Check)菜单选项(menu item)

移除刚才菜单点时候状态栏显示的功能,新增功能——控制工具栏和状态栏的显示/隐藏。

#include <gtk/gtk.h>/*@Description: 从一个图片中获取信息得到pixbuf@param:       gchar filename
*/
GdkPixbuf *create_pixbuf(const gchar * filename)
{GdkPixbuf *pixbuf;GError *error = NULL;/** 函数gdk_pixbuf_new_from_file() 从一个图片文件中加载图象数据,从而生成一个新的 pixbuf,* 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL 的话,程序就会出现错误。*/pixbuf = gdk_pixbuf_new_from_file(filename, &error);if(!pixbuf) {fprintf(stderr, "%s\n", error->message);g_error_free(error);}return pixbuf;
}/*点击菜单时,状态栏显示*/
/*
void menu_pressed(GtkWidget *widget, gpointer window)
{gchar *str;str = g_strdup_printf("you click one menu item");gtk_statusbar_push(GTK_STATUSBAR(window),gtk_statusbar_get_context_id(GTK_STATUSBAR(window), str), str);g_free(str);
}
*/
//根据菜单栏的选择(check)控制一些构件的显示和隐藏
void toggle_display(GtkWidget *widget, gpointer oneofwidget)
{if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {gtk_widget_show(oneofwidget);} else {gtk_widget_hide(oneofwidget);}
}int main( int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;            //盒装容器GtkWidget *menubar;         //菜单栏GtkWidget *menutoggle, *menu_tog_toggle,*menu_tog_toolbar, *menu_tog_statusbar;  //界面开关菜单//GtkWidget *menu_about, *menu_about_us;  //帮助菜单GtkWidget *toolbar;         //工具栏GtkToolItem *tool_exit, *tool_sep,*tool_about;GtkWidget *statusbar;       //状态栏/*初始化整个GTK+程序,是每一个GTK+程序必不可少的部分*/gtk_init(&argc, &argv);/*这里生成了一个窗口构件——GtkWindow,GTK_WINDOW_TOPLEVEL包含窗口的标题栏和边框,同意用窗口管理器来进行管理*/window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/*设置窗口标题*/gtk_window_set_title(GTK_WINDOW(window), "一步一步学GTK+ DEMO");/*设置窗口默认大小*/gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);/** 设置窗口在显示器中的位置为居中。*   GTK_WIN_POS_NONE            :不固定*   GTK_WIN_POS_CENTER          : 居中*   GTK_WIN_POS_MOUSE           : 出现在鼠标位置*   GTK_WIN_POS_CENTER_ALWAYS   : 窗口改变大小的时候仍然居中*/gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*函数gtk_window_set_icon() 是为窗口设置图标用的,函数create_pixbuf是我们自定义的,目的是从一个图片中获取信息得到pixbuf。*/gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("./images/bear.png"));/*创建一个盒装容器并添加到窗口中*/vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);/*创建菜单*/menubar = gtk_menu_bar_new();   //代表整个菜单,是一个menu shell
menutoggle = gtk_menu_new();   //这里代表第一列菜单toggle ,也是一个menu shellmenu_tog_toggle = gtk_menu_item_new_with_label("View");//menu_tog_toolbar = gtk_menu_item_new_with_label("show Toolbar"); //toggle 菜单中子项//menu_tog_statusbar = gtk_menu_item_new_with_label("show Statusbar");menu_tog_toolbar = gtk_check_menu_item_new_with_label("show Toolbar");gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_tog_toolbar),TRUE);menu_tog_statusbar = gtk_check_menu_item_new_with_label("show Statusbar");gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_tog_statusbar),TRUE);gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_tog_toggle), menutoggle);  //widget toggle菜单加入 menutoggle menu shell
    gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_toolbar);gtk_menu_shell_append(GTK_MENU_SHELL(menutoggle), menu_tog_statusbar);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menu_tog_toggle);//创建工具栏toolbar = gtk_toolbar_new();gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); //设置工具栏样式为图标gtk_container_set_border_width(GTK_CONTAINER(toolbar), 0);      //工具栏边框大小
tool_exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);     //工具栏中的 “退出” 按钮gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_exit, -1);tool_sep = gtk_separator_tool_item_new();                       //工具栏中按钮之间的分割线gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_sep, -1);tool_about = gtk_tool_button_new_from_stock(GTK_STOCK_HELP);    //工具栏中的“关于” 按钮gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_about, -1);statusbar = gtk_statusbar_new();/*把菜单加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 1);/*把工具栏加入盒子容器*/gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);/*把状态栏加入盒子最下面*/gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);/***********************************以下是信号处理部分************************************//*关闭窗口时退出主循环*/g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(tool_exit), "clicked",G_CALLBACK(gtk_main_quit), NULL);//g_signal_connect(G_OBJECT(menu_tog_toolbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));//g_signal_connect(G_OBJECT(menu_tog_statusbar),"activate",G_CALLBACK(menu_pressed), G_OBJECT(statusbar));g_signal_connect(G_OBJECT(menu_tog_toolbar), "activate",G_CALLBACK(toggle_display), toolbar);g_signal_connect(G_OBJECT(menu_tog_statusbar), "activate",G_CALLBACK(toggle_display), statusbar);/***********************************以下是显示控件部分************************************//*开始显示窗口*///gtk_widget_show(window);
    gtk_widget_show_all(window);gtk_main();return 0;
}

转载于:https://www.cnblogs.com/ikodota/archive/2013/03/13/step_by_step_study_gtk_layout.html

(三)、一步一步学GTK+之布局相关推荐

  1. visual studio学习python_一步一步学Python3(小学生也适用) 第三篇: Visual Studio Code

    工欲善其事,必先利其器: 器欲尽其用,必先得其法. 前面两章我们分别安装了Python3.8和在三种模式下运行了Python的print()函数程序.在开始我们正式学习Python基础语法时,我们先把 ...

  2. 一步一步学VBScript(4)之WSH对象三

    一步一步学VBScript(4)之WSH对象三 前沿: 脚本可以干什么,它仅仅只是帮助您完成一个事件吗. 我觉得脚本是种生活.它帮你改变繁琐的重复劳动. 您可以让服务器管理着您的工作的.悠闲的品尝杯咖 ...

  3. 一步一步学Spring Boot(三)

    课程名称 <一步一步学Spring Boot(三)> 学习地址 CSDN学习地址: http://edu.csdn.net/lecturer/994 51CTO学习地址:http://ed ...

  4. 零基础无实物一步一步学PLCS7-1200仿真(三)-电动机正反转控制(互锁)

    在学习完电动机的启保停控制后,我们今天来学习电气控制里面进阶的正反转控制,也就是大名鼎鼎的互锁电路.首先需要了解电动机可以实现电动机正反转的工作原理. 一.硬件电路 用S7-1200 PLC控制一台三 ...

  5. 一步一步学Spring Boot(三)-黄文毅-专题视频课程

    一步一步学Spring Boot(三)-1059人已学习 课程介绍         Spring Boot是现在很热门的一个微服务框架,作为一名Java Web 开发工程师,是必须要掌握它的.本系列课 ...

  6. 【Linux】一步一步学Linux——VMware虚拟机三种网络模式详解(07)

    00. 目录 文章目录 00. 目录 01. 虚拟网络连接组件 02. 常见网络连接配置 03. 桥接模式 04. NAT 模式 05. 仅主机模式 06. 自定义模式 07. 附录 参考博客: ht ...

  7. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 手挽手带你学React:四档(上)一步一步学会react-redux (自己写个Redux)

    手挽手带你学React入门四档,用人话教你react-redux,理解redux架构,以及运用在react中.学完这一章,你就可以开始自己的react项目了. 之前在思否看到过某个大神的redux搭建 ...

最新文章

  1. html标准模式与混杂模式,关于Doctype、严格模式与混杂模式
  2. NServiceBus的安装与调试
  3. android游戏画面抖动,抖音游戏主播是怎么直播手机画面的?
  4. 借助 IIS 管理器 -- 用手机测试HTML页面
  5. return 关键字 c
  6. k8s部署hbase 2.2.6(含docker、helm部署方案)
  7. 神经网络如何学习的?
  8. 中国少数民族文学馆在内蒙古呼和浩特揭幕
  9. HNU 12894 Keys dfs
  10. JAVA总裁--Java数组基础知识
  11. 一些Layout的坑
  12. 液晶手写板原理拆解_汽车抬头显示HUD的拆解
  13. iOS 程序上传流程
  14. java私塾初级_Java私塾初级教程-19
  15. 把docx格式的word文档转换为txt文件
  16. Android三种动画知识总结
  17. 【每日早报】2019/09/17
  18. fromPCAtoprincipalcurvetoprincipalgraph_拔剑-浆糊的传说_新浪博客
  19. rm命令删除特定文件或目录或不删除特定文件或目录
  20. outer apply的用法

热门文章

  1. CMU计算机学院院长Andrew Moore离职,下一任院长人选未定
  2. 我是京东智能配送机器人,已抵达您的楼下
  3. 腾讯225页报告:AI正取代互联网成为新引擎,马化腾提七大关键词
  4. Windows环境下通过lynx查看隐藏链接识别黑链方法
  5. 企业级应用的前端思考。
  6. 实战:自定义脚本启动mysql-mysql 5.6.19
  7. 通过实验来理解代理ARP(二)
  8. Fiddler使用AutoResponder进行本地文件和线上文件的映射
  9. PHP清除HTML代码、空格、回车换行符的函数
  10. Apahce服务器配置非根目录的虚拟目录