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

📄 gtk+程序设计概述_風啲丗界.htm

📁 gtk 开发手册和参考文档。 包括gtk glib gdk等
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        <LI>gtk+ 编程中,以 g_ 开头的函数和以 g 开头的变量为在 glib 函数库中定义的函数和变量。以 gtk_ 开头的函数和以 Gtk 
        开头的变量为在 gtk+ 函数库中定义的函数和变量。 
        <LI>main函数返回0表示程序正常结束 
        <LI>gtk+ 编程中函数的命名使用“ _ ”来分隔 <BR>gtk+ 
        中的各种构件有一个层次结构,新的构件一般在原来构件的基础上添加了某些功能后得到的。 gtk+ 的层次结构如下图所示: </LI></OL>
      <DIV align=center forimg="1"><IMG class=blogimg 
      src="gtk+程序设计概述_風啲丗界.files/45121bfa7efaf8cdb48f31a0.gif" border=0 
      small="0"></DIV>
      <P class=标题2>相关头文件</P>
      <OL>
        <LI>头文件 gtk/gtk.h 中包含了 gtk +库中的所有头文件,也包含了 gdk.h 和 glib.h 
        <LI>头文件 gnome.h 中包含了 gtk.h ,要用到 GNOME 库中的构件和库函数,包含 gnome.h 就可以了 </LI></OL>
      <HR color=#00ccff>

      <P class=标题1>2 程序的初始化与消息循环</P>
      <OL>
        <LI>gtk_init :在进行 gtk +编程时必须先使用该函数来对 gtk 
        函数库进行初始化,它还能够自动分析命令行参数,并根据命令行参数来初始化应用程序。注意:此处的命令行参数为 gtk+ 
        中预定义的值,如果不是,则给出出错信息。比如:在程序中使用 --display 参数可以用来指示要使用的 X display 
        <LI>gtk_exit:退出GTK+应用程序并回收所有GTK+资源所占的空间 
        <LI>g_print 函数用来在标准输出中输出数据,它一般在调试时使用 </LI></OL>
      <HR color=#00ccff>

      <P class=标题1>3 GTK+主循环</P>
      <P class=标题2>3.1 主循环基本知识</P>
      <OL>
        <LI>gtk_main函数运行GTK+主循环(相当于 Window 
        程序中的消息循环),直到调用gtk_main_quit函数,gtk_main才会退出。gtk_main函数可以递归调用,每次调用一个gtk_main_quit函数就退出gtk_main函数的一个实例 

        <LI>gtk_main_quit用来退出最里层的gtk_main主循环 
        <LI>由于GTK+程序中只有一条执行线索,因此事件处理函数中的代码都是在gtk_main函数中执行的。如果在事件处理函数中又调用了gtk_main,则称为gtk_main的递归调用 

        <LI>gtk_main_level返回递归的层次。如果没有gtk_main运行时,返回0,如果一个gtk_main函数在运行,则返回1 
        <LI>gtk_main_iteration:该函数是gtk_main函数的一次迭代,它在处理完一个事件后返回(gtk_main函数只有在调用gtk_main_quit后才返回,否则将阻塞等待,以处理下一个事件)。gtk_main_iteration通常与gtk_event_pending合在一起使用。 

        <LI>gtk_events_pending:在有事件到达时返回 </LI></OL>
      <P class=标题2>3.2 退出函数</P>
      <P>&nbsp;&nbsp;&nbsp; 
      退出函数就是当调用gtk_main_quit函数时要调用的回调函数。退出函数的原型为:<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      &nbsp;&nbsp; gint (*GtkFunction)(gpointer data)<BR>&nbsp;&nbsp;&nbsp; 
      当退出函数返回FALSE时,该退出函数被调用一次后将被系统自动删除,此后再次调用gtk_main_quit函数将不会再调用退出函数。<A 
      href="file:///C:/Documents%20and%20Settings/LJW/桌面/计算机笔记/计算机笔记/GTK+程序设计/files/exit.c">例题:退出函数</A></P>
      <P>&nbsp;&nbsp;&nbsp; 
      可以为一个gtk_main主循环添加多个退出函数,这些退出函数的调用顺序与它们被添加的顺序相反。当某个退出函数返回FALSE而另一个退出函数返回TRUE时,在第二次调用gtk_main_quit时,只有返回TRUE的退出函数被调用</P>
      <OL>
        <LI>gtk_quit_add用来给某个主循环添加退出函数,添加时必须指定主循环的级别 
        <LI>gtk_quit_remove使用gtk_quit_add的返回值来从主循环中删除一个回调函数 
        <LI>gtk_quit_remove_by_data使用传递给回调函数的数据来从主循环中删除回调函数 </LI></OL>
      <HR color=#00ccff>

      <P class=标题1>4 定时器</P>
      <OL>
        <LI>gtk_timeout_add函数用来往程序中添加一个定时器,并返回此定时器的ID 
        <LI>gtk_timeout_remove则根据定时器的ID来删除一个定时器 
        <LI>现在一般使用g_timeout_add系列的函数来代替gtk_timeout_add系列的函数 </LI></OL>
      <P>&nbsp;&nbsp;&nbsp; 定期调用的回调函数的原型为:<BR>&nbsp;&nbsp;&nbsp; gint 
      timeout_callback(gpointer data) <BR>&nbsp;&nbsp;&nbsp; 
      当该回调函数返回FALSE时,定时器将在调用一次该函数后被删除。如果要让定时器一直起作用,则必须让定期调用的回调函数返回TRUE</P>
      <HR color=#00ccff>

      <P class=标题1>5 idle函数</P>
      <P>&nbsp;&nbsp;&nbsp; 
      idle函数只有在主循环中没有事件要被处理时才会被运行,且如果idle函数的返回值为FALSE,idle函数将在被调用一次后被删除。如果要让idle函数一直起作用,则必须让它返回TRUE</P>
      <OL>
        <LI>gtk_idle_add函数用来往程序中添加一个idle函数 
        <LI>gtk_idle_remove根据idle函数的ID来删除idle函数 
        <LI>gtk_idle_remove_by_data根据传递给idle函数的参数来删除idle函数 </LI></OL>
      <HR color=#00ccff>

      <P class=标题1>6 使用文件描述符进行输入输出</P>
      <OL>
        <LI>gtk_input_add函数用来往GTK+程序中添加一个文件描述符,当该文件描述符读、写或发生异常时调用指定的回调函数。该函数返回一个ID号用来在删除文件描述符时使用 

        <LI>gtk_input_remove函数使用gtk_input_add函数的返回值来删除一个输入函数 </LI></OL>
      <P>&nbsp;&nbsp;&nbsp; 输入回调函数的原型为:void(*DdkInputFunction)(gpointer 
      data,gint_source,GdkInputCondition condition),其中condition的取值可以是:</P>
      <OL>
        <LI>GDK_INPUT_READ&nbsp;&nbsp;&nbsp;&nbsp; 当文件描述符读就绪时调用回调函数 
        <LI>GDK_INPUT_WRITE&nbsp;&nbsp;&nbsp; 当文件描述符写就绪时调用回调函数 
        <LI>GDK_INPUT_EXECPTION 
        当文件描述符上有异常产生时调用回调函数。注意:只有在TCP发送紧急数据时的套接字描述符上才产生异常 </LI></OL>
      <HR color=#00ccff>

      <P class=标题1>7 编译应用程序</P>
      <P>&nbsp;&nbsp;&nbsp; 
      使用autoconf和automake工具的目的是创建一个能在用户环境使用的,可移植的shell脚本和Makefile文件。autoconf实际上是一个工具集,用来生成可移植的shell脚本--configure。configure脚本用来探查编译系统,生成Makefile文件和一个特殊的头文件config.h。使用configure生成的Makefile文件来编译程序能够使程序适应用户系统的特定环境。configure脚本从一个称为makefile.in的模版文件生成Makefile文件。automake由一个手写的makefile.am生成Makefile.in文件。Makefile.in文件随源代码一块发布,当用户运行configure时使用它来生成Makefile文件。</P></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章 
href="http://hi.baidu.com/phoenix20080808/blog/category/gtk+&sup3;&Igrave;&ETH;ò&Eacute;è&frac14;&AElig;">类别:gtk+程序设计</A> 
| <A title=将此文章添加到百度搜藏 onclick="return addToFavor();" 
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN 
id=result></SPAN>) | <A 
href="http://hi.baidu.com/phoenix20080808/blog/item/8a623616e0a8ea1d972b43f3.html#send">评论</A>&nbsp;(0)
<SCRIPT language=javascript>
/*<![CDATA[*/
var pre = [true,'综合学习', '综合学习','/phoenix20080808/blog/item/f6d945ccf850cc1501e928f0.html'];
var post = [true,'gtk+信号处理','gtk+信号处理', '/phoenix20080808/blog/item/13eb9009cba7edaa2eddd4f8.html'];
if(pre[0] || post[0]){
	document.write('<div style="height:5px;line-height:5px;">&nbsp;</div><div id="in_nav">');
	if(pre[0]){
		document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' +  pre[2] + '</a>&nbsp;&nbsp;&nbsp;&nbsp;');
	}
	if(post[0]){
		document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' +  post[2] + '</a>');
	}
	document.write('</div>');
}
/*]]>*/
</SCRIPT>
 </DIV>
<DIV class=line></DIV>
<STYLE type=text/css>#in_related_doc A {
	TEXT-DECORATION: none
}
</STYLE>

<DIV id=in_related_tmp></DIV>
<SCRIPT language=javascript type=text/javascript>
/*<![CDATA[*/
function HI_MOD_IN_RELATED_DOC_CALLBACK(arg){
    if(arg.length <= 1) return false;
    var hasMore = arg[0];
    var D=function(A,B){A[A.length]=B;}
    if(arg.length % 2 == 0) D(arg, ["","","",""]);

    var html = ['<div id="in_related_doc"><div class="tit">相关文章:</div>'];
    D(html, '<table cellpadding="0" cellspacing="3" border="0">');
    for(var i = 1, j = arg.length; i < j; i += 2){
        D(html, '<tr>');
        D(html, '<td width="15px"><a style="font-size:25px" >&#8226;</a></td><td><a href="http://hi.baidu.com/' + arg[i][3] + '/blog/item/' + arg[i][2] + '.html" target="_blank" title="' + arg[i][0] + '">' + arg[i][1] + '</a>');
        D(html, new Array(10).join('\u3000'));
        D(html, '</td>');
        if(arg[i + 1][0] != "")
            D(html, '<td width="15px"><a style="font-size:25px" >&#8226;</a></td><td><a href="http://hi.baidu.com/' + arg[i + 1][3] + '/blog/item/' + arg[i + 1][2] + '.html" target="_blank" title="' + arg[i + 1][0] + '">' + arg[i + 1][1] + '</a></td>');
        else
            D(html, '<td>&nbsp;</td><td>&nbsp;</td>');
        D(html, '</tr>');
    }
    if(hasMore) D(html, '<tr><td colspan="4"><a target="_blank" href="/sys/search?pageno=1&type=7&sort=1&word=gtk%2B%B3%CC%D0%F2%C9%E8%BC%C6%B8%C5%CA%F6&item=8a623616e0a8ea1d972b43f3">更多&gt;&gt;</a></td></tr>');
    D(html, '</table></div><div class="line">&nbsp;</div>');

    var div = document.getElementById('in_related_tmp');
    if(div){
        div.innerHTML = html.join('');
        while(div.firstChild){
            div.parentNode.insertBefore(div.firstChild, div);
        }
        div.parentNode.removeChild(div);
    }
}

if(RelatedDocData == -1){	// not supported xhr
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = '/sys/search?type=8&word=gtk%2B%B3%CC%D0%F2%C9%E8%BC%C6%B8%C5%CA%F6&item=8a623616e0a8ea1d972b43f3&t=' + new Date().getTime();
    document.getElementsByTagName('HEAD')[0].appendChild(script);
}else if(RelatedDocData == null){
	GetAndEval = true;
}else{
	eval(RelatedDocData);
}

/*]]>*/
</SCRIPT>

<DIV id=in_reader>
<DIV class=tit>最近读者:</DIV>
<SCRIPT>

	var g_spAnnony=true;


var g_read=[

{}
];
g_read.length=g_read.length-1;

var _rh1="";
var _rh2="";

function wrreader(){
	_rh1 += '<table width="100%" ><tr>';
	_rh2+='<tr>';
	if(g_spAnnony){
		_rh1+='<td align="center" width="10%" ><img border="0" width="55" height="55" src="http://img.baidu.com/hi/img/portraitn.jpg"></td>';
		_rh2+='<td>&nbsp;</td>';
		if(g_read.length>0){
			_rh1+='<td align="left" width="12%">';
		}else{
			_rh1+='<td align="left" width="100%">';
		}
		_rh1+="<a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"' target='_self'>登录</a>后,您就出现在这里。</td>";
		_rh2+='<td>&nbsp;</td>'
	}
	if(g_read.length==0){
		if(!g_spAnnony){
			_rh1+='<td align=left width="100%">最近还没有登录用户看过这篇文章……</td>';
			_rh2+='<td>&nbsp;</td>';
		}
	}else{
		for(i=0,len=g_read.length;i<len;i++){
			_rh1+='<td align="center" valign="bottom" width="10%" class="user"><a href="/'+g_read[i][0]+'" target="_blank"><img border="0" src="http://himg.baidu.com/sys/portraitn/item/'+g_read[i][1]+'.jpg"></a></td>';
			_rh2+='<td align="center" valign="top" class="user"><a href="/'+g_read[i][0]+'" target="_blank">'+g_read[i][2]+'</a></td>';
		}
	}
	_rh1+='<td width="100%"></td></tr>';
	_rh2+='<td></td></tr></table>';
	document.write(_rh1+_rh2);
}

wrreader();
</SCRIPT>
</DIV>
<DIV class=line></DIV>
<SCRIPT language=JavaScript>
allkey=allkey+"08a6eaf4e9a92def7609d76f_8a623616e0a8ea1d972b43f3_";
</SCRIPT>

<DIV id=in_comment><A name=comment></A>
<DIV class=tit>网友评论:</DIV>
<SCRIPT>
function writecmt(type,id,cmtname,cmturl,portraitId){
	var html1="";

	if(type==1){
			html1="<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'><img  border='0' src='http://himg.baidu.com/sys/portraitn/item/"+portraitId+".jpg'><br>"+cmtname+"</a>";
	}else{
		if(cmtname=="" || cmtname=="匿名网友"){
			if(cmturl==""){
				html1="<a>匿名网友</a>";
			}else{
				html1="<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a>";
			}
		}else{
			if(cmturl==""){
				html1="<div class='f14' style='display:inline'>网友:<a>"+cmtname+"</a></div>";
			}else{
				html1="<div class='f14' style='display:inline'>网友:<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a></div>";
			}
		}
	}
	document.write(html1);
}

</SCRIPT>

<DIV id=page></DIV></DIV>
<DIV id=in_send><A name=send></A>
<FORM id=popFormSubmit name=form1 onsubmit="return checkcmtform()" 
action=/phoenix20080808/commit method=post><INPUT type=hidden value=8 name=ct> 
<INPUT type=hidden value=1 name=cm> <INPUT type=hidden 
value=8a623616e0a8ea1d972b43f3 name=spBlogID>
<SCRIPT language=JavaScript>
	document.write("<input type='hidden' name='spRefURL' value='"+window.location.href+"'>");
</SCRIPT>
 
<DIV class=tit>发表评论:</DIV>
<TABLE cellSpacing=5 cellPadding=0 width=620 border=0>
  <TBODY>
  <TR>
    <TD class=f14>姓 名:</TD>
    <TD><INPUT id=spBlogCmtor style="WIDTH: 220px" onfocus=hidErr(1); 
      tabIndex=1 maxLength=49 onchange="checkname('spBlogCmtor')" 
      name=spBlogCmtor>
      <SCRIPT>
document.write(" &nbsp;&nbsp; <a href='http://passport.baidu.com/?reg&tpl=sp&return_method=get&skip_ok=1&u=http://hi.baidu.com/sys/reg/' target='_blank'>注册</a>");
document.write(" | <a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"'>登录</a>");

</SCRIPT>
       
      <DIV id=nmerror style="DISPLAY: none">*姓名最长为50字节</DIV></TD></TR>
  <TR id=1_err style="DISPLAY: none">
    <TD>&nbsp;</TD>
    <TD>
      <DIV class=error id=1_err_con></DIV></TD></TR>
  <TR>
    <TD class=f14>网址或邮箱:</TD>
    <TD><INPUT id=spBlogCmtURL style="WIDTH: 360px" onfocus=hidErr(2); 
      tabIndex=2 maxLength=128 onchange="checkeandu('spBlogCmtURL')" 
      name=spBlogCmtURL> (选填)</TD>
    <SCRIPT>
G("spBlogCmtor").value="";
G("spBlogCmtURL").value="";
</SCRIPT>
  </TR>
  <TR id=2_err style="DISPLAY: none">
    <TD>&nbsp;</TD>
    <TD>
      <DIV class=error id=2_err_con></DIV></TD></TR>
  <TR>
    <TD class=f14 vAlign=top>内 容:</TD>
    <TD><TEXTAREA id=spBlogCmtText style="WIDTH: 520px; HEIGHT: 155px" onfocus=hidErr(3); tabIndex=3 name=spBlogCmtText></TEXTAREA>
      <SCRIPT>
G("spBlogCmtor").value=G("spBlogCmtor").defaultValue;
G("spBlogCmtText").value="";
</SCRIPT>
       </TD></TR>
  <TR id=3_err style="DISPLAY: none">
    <TD>&nbsp;</TD>
    <TD>
      <DIV class=error id=3_err_con></DIV></TD></TR>
  <TR id=vercode>
    <TD class=f14 vAlign=top>验证码:</TD>
    <TD vAlign=top><INPUT type=hidden 
      value=83B62F9A97C4932444291BEEE82DB5ED83155A92663A7DEE395413E38139E7B7A70EF66AE912F39679F1F7811EC6D8B45DF35442177582C162536186074B4CFD 
      name=spVcode> <INPUT id=spVerifyKey tabIndex=4 maxLength=4 size=6 
      name=spVerifyKey autocomplete="off">请输入下图中的四位验证码,字母不区分大小写。<BR>
      <SCRIPT language=JavaScript>

			var imgsrc="http://hiup.baidu.com/cgi-bin/genimg?83B62F9A97C4932444291BEEE82DB5ED83155A92663A7DEE395413E38139E7B7A70EF66AE912F39679F1F7811EC6D8B45DF35442177582C162536186074B4CFD";
			document.write("<img id='verifypic' src='"+imgsrc+"' width='120' height='40'>");

			function newverifypic(){
				document.getElementById("verifypic").src = imgsrc +"&t="+ Math.random();
			}
		</SCRIPT>
      <A title=看不清左边的字符 href="javascript:newverifypic();">看不清?</A> </TD></TR>
  <TR>
    <TD class=f14 vAlign=top>&nbsp;</TD>
    <TD class=f14 vAlign=top><INPUT id=btn_ok tabIndex=5 type=submit value=发表评论 name=btn_ok></TD></TR></TBODY></TABLE></FORM></DIV><BR></DIV>
<TABLE height=8 cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=modbl width=7>&nbsp;</TD>
    <TD class=modbc>&nbsp;</TD>
    <TD class=modbr width=7>&nbsp;</TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<SCRIPT language=javascript>
<!--
var hstr="/phoenix20080808/brwstat?key1=1";
document.write("<script src='"+hstr+"&key2="+allkey+"'><\/script>");
//-->
</SCRIPT>
<BR>
<CENTER>
<DIV id=ft>&copy;2008 Baidu</DIV></CENTER>
<SCRIPT>
if(document.getElementById("m_blog"))
{
	var imgarray = document.getElementById("m_blog").getElementsByTagName('img');
	var imgw = document.getElementById("m_blog").offsetWidth;
	imgw =imgw-40;
	for(var i=0; i<imgarray.length; i++){
	if(imgarray[i].className=="blogimg" && imgarray[i].width>=imgw) imgarray[i].width=imgw;
	}
}

// Fix ff bugs
var blog_text = document.getElementById('blog_text');
blog_text.innerHTML = blog_text.innerHTML.replace(/href\s*=\s*("|')?(\.\.\/\.\.\/)/gi,"href=$1../$2");

</SCRIPT>
</CENTER><IMG style="DISPLAY: none" src=""> </BODY></HTML>

⌨️ 快捷键说明

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