⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xplore 查看主题 - gtk+编程入门[原创].htm

📁 GTK+编程入门(ZT).rar
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                  <TABLE cellSpacing=1 cellPadding=3 width="90%" align=center 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><SPAN class=genmed><B>代码::</B></SPAN></TD></TR>
                    <TR>
                      <TD class=code><BR>gcc -Wall -o basicgtk basicgtk.c 
                        `gtk-config --cflags --libs` 
                  <BR>&nbsp;</TD></TR></TBODY></TABLE><SPAN 
                  class=postbody><BR>编译通过后运行此程序,会在桌面上看到一个窗体。 <BR>下面来解释一下这段小程序 
                  <BR>1、关于数据类型 
                  <BR>这个程序中出现了gint,gchar等数据类型,这些都是GLIB的数据类型,GLIB有点像windows下C的STL,GLIB的数据类型的表示和C的差不多,基本上是在前面加一个g的前缀,但GLIB对数据类型的处理(主要指内存管理方面)比C要优化一些。如果这方面还有什么问题请参考GLIB的说明。 
                  <BR>2、关于GtkWidget 
                  <BR>GtkWidget从本质上说它只一个数据结构,在这里,我们可以把它理解为一个对象,这里好像用到了面向对象的概念,不错同GTK+就是基于面象对面的恩想设计的,你可能会问,GTK+程序不是用C语言写的吗?注意,这里只是用到了面向对象的思想和面向对象的编程方法,并不是面向对象语言,C++语言的发明人Bjarne 
                  Stroustrup曾经说过,面向对像的程序设计是编写程序代码的一种方法。而向对像的程序设计语言是在语言内部明确的提供帮助。 
                  <BR>因此,这里的GtkWidget可以说一个对象。 <BR>3、初始化GTK+ 
                  <BR>在调用GTK+的函数之前,必须先初始化GTK+。gtk_init()就是对GTK+进行初始化,它主要处理命令行的参数。 
                  <BR>4、创建并显示窗体 
                  <BR>函数gtk_window_new()的作用就是创建一个窗体,而该函数的参数是说明所要创建窗体的类型,它可以是以下三种中的一种: 
                  <BR>GTK_WINDOW_TOPLEVEL、GTK_WINDOW_DIALOG、GTK_WINDOW_POPUP 
                  <BR>5、gtk_main循环 
                  <BR>gtk_main函数的作用就是进入GTK+循环,即程序不停的运行,直到程序的的另一个部分调用了gtk_main_quit或程序崩溃为止,这有点像win32程序的消息循环。 
                  <BR><BR>三、信号与事件 
                  <BR>这里将引入GTK+信号和事件的概念,信号和事件的概念十分相近,初学者比较难区别,简单的说,当用户点击一个按纽或是移动鼠标,就称该用户触发了一个事件,而X本身能够抓住的一些事情,如窗口删除、点击按纽,这些就称为信号。(的确很难区别,不过在程序里使用信号和事件的方法却没有区别) 
                  <BR>对信号和事件的处理首先要连接信号,这里将使用到连接函数gtk_signal_connect, 
                  <BR>这里给出一个例子 <BR></SPAN>
                  <TABLE cellSpacing=1 cellPadding=3 width="90%" align=center 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><SPAN class=genmed><B>代码::</B></SPAN></TD></TR>
                    <TR>
                      <TD class=code>&nbsp; 
                        <BR>&nbsp;//---------------------------------------- 
                        <BR>&nbsp; 
                        &nbsp;TheWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL); 
                        <BR>&nbsp; 
                        &nbsp;gtk_signal_connect(GTK_OBJECT(TheWindow),"destroy",GTK_SIGNAL_FUNC(StopTheApp),NULL); 
                        <BR>&nbsp; &nbsp;gtk_widget_show(TheWindow); <BR>&nbsp; 
                        &nbsp;//----------------------------------------------- 
                        <BR>&nbsp;</TD></TR></TBODY></TABLE><SPAN 
                  class=postbody><BR>gtk_signal_connect函数有四个参数,第一个是GTK+对象,GTK_OBJECT宏起到转化作用,第二个是要捕捉的信号名,第三个是信号处理程序名,GTK_SIGNAL_FUNC宏是将函数的指针转换成一个更便于GTK+内部使用的信号函数指针。最后一个参数是要传递给信号处理函数的数据指针,没有就是NULL。 
                  <BR>接下来就要编写信号处理函数 <BR></SPAN>
                  <TABLE cellSpacing=1 cellPadding=3 width="90%" align=center 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><SPAN class=genmed><B>代码::</B></SPAN></TD></TR>
                    <TR>
                      <TD class=code>&nbsp; <BR>void StopTheApp(GtkObject * 
                        TheWindow,gpointer data) <BR>&nbsp; &nbsp; { <BR>&nbsp; 
                        &nbsp;gtk_main_quit(); <BR>&nbsp; &nbsp; } 
                    <BR>&nbsp;</TD></TR></TBODY></TABLE><SPAN 
                  class=postbody><BR>下面再写一个程序来理解信号和事件 <BR></SPAN>
                  <TABLE cellSpacing=1 cellPadding=3 width="90%" align=center 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><SPAN class=genmed><B>代码::</B></SPAN></TD></TR>
                    <TR>
                      <TD class=code>&nbsp; 
                        <BR>/******************************** <BR>&nbsp; * 
                        events.c <BR>&nbsp; * <BR>&nbsp; 
                        ***********************************/ <BR>&nbsp; 
                        #include&lt;gtk/gtk.c&gt; <BR>&nbsp; //信处理函数 <BR>&nbsp; 
                        void StopTheApp(GtkWinget *TheWindow,gpointer data) 
                        <BR>&nbsp; { <BR>&nbsp; &nbsp; gtk_main_quit(); 
                        <BR>&nbsp; } <BR>&nbsp;//事件处理函数 <BR>&nbsp; gboolean 
                        EventHandler(GtkWidget *TheWindow,GdkEvent 
                        *event,gpointer data) <BR>&nbsp; { <BR>&nbsp; 
                        &nbsp;switch(event-&gt;type) <BR>&nbsp; &nbsp;{ 
                        <BR>&nbsp; &nbsp; &nbsp;case GDK_EXPOSE: <BR>&nbsp; 
                        &nbsp; &nbsp; g_print("the window contents were 
                        redrawn\n"); <BR>&nbsp; &nbsp; &nbsp; break; <BR>&nbsp; 
                        &nbsp; case GDK_LEAVE_NOTIFY: <BR>&nbsp; &nbsp; &nbsp; 
                        g_print("the mouse left the window\n"); <BR>&nbsp; 
                        &nbsp; &nbsp; break; <BR>&nbsp; &nbsp; case GDK_DELETE: 
                        <BR>&nbsp; &nbsp; &nbsp; g_print("the window was 
                        killed"); <BR>&nbsp; &nbsp; &nbsp; break; <BR>&nbsp; 
                        &nbsp; default: <BR>&nbsp; &nbsp; &nbsp; break; 
                        <BR>&nbsp; &nbsp;} <BR>&nbsp; &nbsp;return FALSE; 
                        <BR>&nbsp; } <BR>&nbsp; <BR>&nbsp; ginit main(gint 
                        argc,gchar **argv) <BR>&nbsp; { <BR>&nbsp; &nbsp; 
                        GtkWidget TheWidow; <BR>&nbsp; &nbsp; 
                        gtk_init(&amp;argc,&amp;argv); <BR>&nbsp; &nbsp; 
                        TheWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL); 
                        <BR>&nbsp; &nbsp; 
                        gtk_signal_connect(GTK_OBJECT(TheWidow),"event",GTK_SIGNAL_FUNC(EventHandler),NULL); 
                        <BR>&nbsp; &nbsp; 
                        gtk_signal_connect(GTK_OBJECT(TheWidow),"destroy",GTK_SIGNAL_FUNC(StopTheApp),NULL); 
                        <BR>&nbsp; &nbsp; gtk_widget_show(TheWindow); <BR>&nbsp; 
                        &nbsp; gtk_main(); <BR>&nbsp; &nbsp; return 0; 
                        <BR>&nbsp; } <BR>&nbsp;</TD></TR></TBODY></TABLE><SPAN 
                  class=postbody><BR><BR>这里第一个信号连接函数是连接的事件处理函数,而第二个是连接的信号处理函数。 
                  <BR>最后,需要断开信号连接,使用函数gtk_signal_disconnect(); <BR></SPAN>
                  <TABLE cellSpacing=1 cellPadding=3 width="90%" align=center 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><SPAN class=genmed><B>代码::</B></SPAN></TD></TR>
                    <TR>
                      <TD class=code>&nbsp; 
                        <BR>//--------------------------------------------- 
                        <BR>&nbsp; gint SignalHandler; <BR>&nbsp; 
                        SignalHandler=gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNALFUNC(HandlerFunc),NULL); 
                        <BR>&nbsp; 
                        gtk_signal_disconnect(GTK_OBJECT(window),GTK_SIGNAL_FUNC(HandlerFunc),NULL); 
                        <BR>&nbsp;</TD></TR></TBODY></TABLE><SPAN 
                  class=postbody><BR>到这里,我们应该对GTK+编程有了一个大概的了解了。 
                  <BR>[/code]</SPAN><SPAN 
                  class=postbody><BR>_________________<BR><IMG 
                  src="Xplore  查看主题 - GTK+编程入门[原创].files/sign_xinhe.gif" 
                  border=0> <BR><SPAN 
                  style="COLOR: #ff0000">这人一到了大学就要写程序,过去用ASP,一天三遍的写,麻烦!现在有了PHP,一行顶过去五行,方便!PHP效率不错还挺实惠。</SPAN></SPAN><SPAN 
                  class=gensmall></SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD class=row1 vAlign=center align=left width=150><SPAN class=nav><A 
            class=nav 
            href="http://bbs.xplore.cn/viewtopic.php?t=1010#top">返回顶部</A></SPAN></TD>
          <TD class=row1 vAlign=bottom noWrap width="100%" height=28>
            <TABLE height=18 cellSpacing=0 cellPadding=0 width=18 border=0>
              <TBODY>
              <TR>
                <TD vAlign=center noWrap><A 
                  href="http://bbs.xplore.cn/profile.php?mode=viewprofile&amp;u=48"><IMG 
                  title=浏览用户个人资料 alt=浏览用户个人资料 
                  src="Xplore  查看主题 - GTK+编程入门[原创].files/icon_profile.gif" 
                  border=0></A> <A 
                  href="http://bbs.xplore.cn/privmsg.php?mode=post&amp;u=48"><IMG 
                  title=发送私人信息 alt=发送私人信息 
                  src="Xplore  查看主题 - GTK+编程入门[原创].files/icon_pm.gif" 
                  border=0></A>
                  <SCRIPT language=JavaScript type=text/javascript><!--	if ( navigator.userAgent.toLowerCase().indexOf('mozilla') != -1 && navigator.userAgent.indexOf('5.') == -1 && navigator.userAgent.indexOf('6.') == -1 )		document.write(' ');	else		document.write('</td><td>&nbsp;</td><td valign="top" nowrap="nowrap"><div style="position:relative"><div style="position:absolute"></div><div style="position:absolute;left:3px;top:-1px"></div></div>');				//--></SCRIPT>
                   <NOSCRIPT></NOSCRIPT></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD class=spaceRow colSpan=2 height=1><IMG height=1 alt="" 
            src="Xplore  查看主题 - GTK+编程入门[原创].files/spacer.gif" width=1></TD></TR>
        <TR align=middle>
          <TD class=catBottom colSpan=2 height=28>
            <TABLE cellSpacing=0 cellPadding=0 border=0>
              <TBODY>
              <TR>
                <FORM action=viewtopic.php?t=1010&amp;start=0 method=post>
                <TD align=middle><SPAN class=gensmall>显示贴子范围: <SELECT 
                  name=postdays><OPTION value=0 selected>所有贴子</OPTION><OPTION 
                    value=1>1 天以来</OPTION><OPTION value=7>7 天以来</OPTION><OPTION 
                    value=14>2 周以来</OPTION><OPTION value=30>1 
                    个月来</OPTION><OPTION value=90>3 个月来</OPTION><OPTION 
                    value=180>6 个月来</OPTION><OPTION value=364>1 
                  年以来</OPTION></SELECT>&nbsp;<SELECT name=postorder><OPTION 
                    value=asc selected>旧贴在前面</OPTION><OPTION 
                    value=desc>新贴在前面</OPTION></SELECT>&nbsp;<INPUT class=liteoption type=submit value=确定 name=submit></SPAN></TD></FORM></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=2 cellPadding=2 width="100%" align=center border=0>
        <TBODY>
        <TR>
          <TD vAlign=center noWrap align=left><SPAN class=nav><A 
            href="http://bbs.xplore.cn/posting.php?mode=newtopic&amp;f=18"><IMG 
            alt=发表新贴 src="Xplore  查看主题 - GTK+编程入门[原创].files/post.gif" 
            align=middle border=0></A>&nbsp;&nbsp;&nbsp;<A 
            href="http://bbs.xplore.cn/posting.php?mode=reply&amp;t=1010"><IMG 
            alt=回复主题 src="Xplore  查看主题 - GTK+编程入门[原创].files/reply.gif" 
            align=middle border=0></A></SPAN></TD>
          <TD vAlign=center align=left width="100%"><SPAN 
            class=nav>&nbsp;&nbsp;&nbsp;<A class=nav 
            href="http://bbs.xplore.cn/index.php">Xplore 论坛首页</A> -&gt; <A 
            class=nav href="http://bbs.xplore.cn/viewforum.php?f=18">UNIX/Linux 
            编程</A></SPAN></TD>
          <TD vAlign=top noWrap align=right><SPAN class=gensmall>所有时间: 
            北京时间</SPAN><BR><SPAN class=nav></SPAN></TD></TR>
        <TR>
          <TD align=left colSpan=3><SPAN class=nav>页数: <B>1</B> (共 <B>1</B> 
            页)</SPAN></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=2 width="100%" align=center border=0>
        <TBODY>
        <TR>
          <TD vAlign=top noWrap align=left width="40%"><SPAN class=gensmall><A 
            href="http://bbs.xplore.cn/viewtopic.php?t=1010&amp;watch=topic&amp;start=0&amp;sid=38971f6fa859c4e0efc2bbfe80e1d56f">跟踪主题</A></SPAN><BR>&nbsp;<BR></TD>
          <TD vAlign=top noWrap align=right>
            <FORM name=jumpbox 
            onsubmit="if(document.jumpbox.f.value == -1){return false;}" 
            action=viewforum.php method=get>
            <TABLE cellSpacing=0 cellPadding=0 border=0>
              <TBODY>
              <TR>
                <TD noWrap><SPAN class=gensmall>论坛跳转:&nbsp;<SELECT 
                  onchange="if(this.options[this.selectedIndex].value != -1){ forms['jumpbox'].submit() }" 
                  name=f><OPTION value=-1>选择论坛</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>站内事务</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=9>公告栏</OPTION><OPTION value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>我爱编程</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=14>VB,VC,.net专栏</OPTION><OPTION 
                    value=15>C/C++专栏</OPTION><OPTION 
                    value=2>JAVA技术</OPTION><OPTION 
                    value=16>脚本语言及WEB开发</OPTION><OPTION 
                    value=17>XML编程</OPTION><OPTION value=18 selected>UNIX/Linux 
                    编程</OPTION><OPTION value=29>编程技术</OPTION><OPTION 
                    value=31>每周一题</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>操作系统</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=1>Linux/UNIX技术</OPTION><OPTION 
                    value=3>Windows技术</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>计算机应用</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=20>电脑技术</OPTION><OPTION value=8>系统安全</OPTION><OPTION 
                    value=30>数据库技术</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION value=-1>设计</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=27>图形图像设计</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>休闲娱乐</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=4>心情涂鸦</OPTION><OPTION value=32>跳蚤市场</OPTION><OPTION 
                    value=-1>&nbsp;</OPTION><OPTION 
                    value=-1>课程专栏</OPTION><OPTION 
                    value=-1>----------------</OPTION><OPTION 
                    value=13>汇编语言程序设计</OPTION></SELECT>&nbsp;<INPUT class=liteoption type=submit value=确定></SPAN></TD></TR></TBODY></TABLE></FORM><SPAN 
            class=gensmall>您 <B>可以</B> 发表新贴<BR>您 <B>可以</B> 回复主题<BR>您 <B>可以</B> 
            编辑发贴<BR>您 <B>可以</B> 删除发贴<BR>您 <B>可以</B> 投票贴子<BR>You <B>can</B> 
            attach files in this forum<BR>You <B>can</B> download files in this 
            forum<BR></SPAN></TD></TR></TBODY></TABLE>
      <DIV align=center><SPAN class=copyright><BR><BR><!--	We request you retain the full copyright notice below including the link to www.phpbb.com.	This not only gives respect to the large amount of time given freely by the developers	but also helps build interest, traffic and use of phpBB 2.0. If you cannot (for good	reason) retain the full copyright we request you at least leave in place the	Powered by phpBB 2.0.8 line, with phpBB linked to www.phpbb.com. If you refuse	to include even this then support on our forums may be affected.	The phpBB Group : 2002// -->Powered 
      by <A class=copyright href="http://www.phpbb.com/" target=_phpbb>phpBB</A> 
      2.0.8 &copy; 2001, 2002 phpBB 
Group<BR></SPAN></DIV></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -