﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-雪域佛国-随笔分类-GTK</title><link>http://www.cppblog.com/dfghj44444/category/13470.html</link><description>什么都懂一点，生活就有趣一些</description><language>zh-cn</language><lastBuildDate>Thu, 16 Dec 2010 17:02:38 GMT</lastBuildDate><pubDate>Thu, 16 Dec 2010 17:02:38 GMT</pubDate><ttl>60</ttl><item><title>用GtkTreeView实现checkButton </title><link>http://www.cppblog.com/dfghj44444/archive/2010/10/18/130270.html</link><dc:creator>叫我老王吧</dc:creator><author>叫我老王吧</author><pubDate>Mon, 18 Oct 2010 07:20:00 GMT</pubDate><guid>http://www.cppblog.com/dfghj44444/archive/2010/10/18/130270.html</guid><wfw:comment>http://www.cppblog.com/dfghj44444/comments/130270.html</wfw:comment><comments>http://www.cppblog.com/dfghj44444/archive/2010/10/18/130270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dfghj44444/comments/commentRss/130270.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dfghj44444/services/trackbacks/130270.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif">今天正好有这个需求，顺手搜了一下，又不是那么符合我的需要，于是自己随手写了个新的，把代码最小化了<br><br><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;GtkListStore&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">list_store&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gtk_list_store_new&nbsp;(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;GTK_TYPE_POINTER,G_TYPE_STRING);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新建一个LISTSTORE</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;GtkWidget&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tree_view&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gtk_tree_view_new_with_model&nbsp;(GTK_TREE_MODEL&nbsp;(list_store));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新建一个TREEVIEW</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;GtkCellRenderer&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gtk_cell_renderer_toggle_new&nbsp;();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义CHECKBOX类型</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;g_signal_connect&nbsp;(cell,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">toggled</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;G_CALLBACK&nbsp;(channel_toggled_cb),<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list_store);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绑定点击事件（否则点了没有勾）</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;gtk_tree_view_insert_column(GTK_TREE_VIEW&nbsp;(tree_view),<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">record</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在最左边插入一列CHECKBOX</span></div>
至于具体的点击事件，我就不贴了，比较简单<br></span></span></span></span>
<img src ="http://www.cppblog.com/dfghj44444/aggbug/130270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dfghj44444/" target="_blank">叫我老王吧</a> 2010-10-18 15:20 <a href="http://www.cppblog.com/dfghj44444/archive/2010/10/18/130270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GTK学习笔记100624---遍历GTK TreeView</title><link>http://www.cppblog.com/dfghj44444/archive/2010/06/25/118699.html</link><dc:creator>叫我老王吧</dc:creator><author>叫我老王吧</author><pubDate>Fri, 25 Jun 2010 03:57:00 GMT</pubDate><guid>http://www.cppblog.com/dfghj44444/archive/2010/06/25/118699.html</guid><wfw:comment>http://www.cppblog.com/dfghj44444/comments/118699.html</wfw:comment><comments>http://www.cppblog.com/dfghj44444/archive/2010/06/25/118699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dfghj44444/comments/commentRss/118699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dfghj44444/services/trackbacks/118699.html</trackback:ping><description><![CDATA[
<div style="border-left-color: rgb(204, 204, 204); padding-bottom: 4px; background-color: rgb(238, 238, 238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; padding-top: 4px; "><span style="COLOR: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">GtkTreeIter&nbsp;iter;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义一个迭代器</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GtkTreeModel&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pmodel;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pitem;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;pmodel</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gtk_tree_view_get_model(GTK_TREE_VIEW1));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得到TREEVIEW的model</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;gtk_tree_model_get_iter_first(pmodel,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">iter);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">迭代器定位到第一行</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;columns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gtk_tree_model_get_n_columns(pmodel);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取行数<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取列名</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">columns;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_285_469_Open_Image" onclick="this.style.display='none'; Codehighlighter1_285_469_Open_Text.style.display='none'; Codehighlighter1_285_469_Closed_Image.style.display='inline'; Codehighlighter1_285_469_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_285_469_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_285_469_Closed_Text.style.display='none'; Codehighlighter1_285_469_Open_Image.style.display='inline'; Codehighlighter1_285_469_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_285_469_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_285_469_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GtkTreeViewColumn&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">column&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gtk_tree_view_get_column(GTK_TREE_VIEW(control),i);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">遍历header</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;coltitle(__(gtk_tree_view_column_get_title(column),</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">coltitle;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出列名</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开始遍历内容</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img id="Codehighlighter1_491_687_Open_Image" onclick="this.style.display='none'; Codehighlighter1_491_687_Open_Text.style.display='none'; Codehighlighter1_491_687_Closed_Image.style.display='inline'; Codehighlighter1_491_687_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_491_687_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_491_687_Closed_Text.style.display='none'; Codehighlighter1_491_687_Open_Image.style.display='inline'; Codehighlighter1_491_687_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_491_687_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_491_687_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">columns;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id="Codehighlighter1_525_684_Open_Image" onclick="this.style.display='none'; Codehighlighter1_525_684_Open_Text.style.display='none'; Codehighlighter1_525_684_Closed_Image.style.display='inline'; Codehighlighter1_525_684_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_525_684_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_525_684_Closed_Text.style.display='none'; Codehighlighter1_525_684_Open_Image.style.display='inline'; Codehighlighter1_525_684_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_525_684_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_525_684_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gtk_tree_model_get&nbsp;(GTK_TREE_MODEL(pmodel),</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">iter,<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pitem,<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将指定单元格的值传给pitem</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id="Codehighlighter1_635_672_Open_Image" onclick="this.style.display='none'; Codehighlighter1_635_672_Open_Text.style.display='none'; Codehighlighter1_635_672_Closed_Image.style.display='inline'; Codehighlighter1_635_672_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_635_672_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_635_672_Closed_Text.style.display='none'; Codehighlighter1_635_672_Open_Image.style.display='inline'; Codehighlighter1_635_672_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_635_672_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_635_672_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">pitem;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出单元格的值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img id="Codehighlighter1_678_679_Open_Image" onclick="this.style.display='none'; Codehighlighter1_678_679_Open_Text.style.display='none'; Codehighlighter1_678_679_Closed_Image.style.display='inline'; Codehighlighter1_678_679_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_678_679_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_678_679_Closed_Text.style.display='none'; Codehighlighter1_678_679_Open_Image.style.display='inline'; Codehighlighter1_678_679_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_678_679_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_678_679_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(gtk_tree_model_iter_next(pmodel,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">iter));</span></div>
唉，网上找了半天，没找到思路，只有自己慢慢啃了，写完发一下，给需要的朋友一些借鉴<br><br>
<img src ="http://www.cppblog.com/dfghj44444/aggbug/118699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dfghj44444/" target="_blank">叫我老王吧</a> 2010-06-25 11:57 <a href="http://www.cppblog.com/dfghj44444/archive/2010/06/25/118699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cairo 图形指南 (4) —— 基本绘图</title><link>http://www.cppblog.com/dfghj44444/archive/2010/04/08/111958.html</link><dc:creator>叫我老王吧</dc:creator><author>叫我老王吧</author><pubDate>Thu, 08 Apr 2010 06:15:00 GMT</pubDate><guid>http://www.cppblog.com/dfghj44444/archive/2010/04/08/111958.html</guid><wfw:comment>http://www.cppblog.com/dfghj44444/comments/111958.html</wfw:comment><comments>http://www.cppblog.com/dfghj44444/archive/2010/04/08/111958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dfghj44444/comments/commentRss/111958.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dfghj44444/services/trackbacks/111958.html</trackback:ping><description><![CDATA[<tr>
<td class="Ftext1" height="30"></td></tr><tr><td>&nbsp;</td></tr>
<tr>
<td class="F14"><br>这一部分讲述如何绘制一些简单的图元，包括直线、填充与笔画操作、虚线、线端（Cap）与线的交合等图形的绘制方法。<br>直线段<br>直线段是非常基础的矢量图形对象。画一条直线段，需要调用两个函数：cairo_move_to() 
函数，用于设置线段起点；cairo_line_to() 用于设定线段终点。<br>#include <br>#include <br>double 
<font>coordx</font>[100];<br>double coordy[100];<br>int count = 0;<br>static 
gboolean<br>on_expose_event(GtkWidget *widget,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; GdkEventExpose 
*event,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; gpointer data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_t *cr;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cr = gdk_cairo_create(widget-&gt;window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_source_rgb(cr, 0, 0, 0);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 
0.5);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int i, j;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for ( i = 0; i 1; i++ ) {<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; for ( j&nbsp;&nbsp;= 0; j -1; j++ ) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;cairo_move_to(cr, <font>coordx</font><em>, coordy<em>);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;cairo_line_to(cr, <font>coordx</font>[j], coordy[j]);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;count = 0;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke(cr);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_destroy(cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return FALSE;<br>}<br>gboolean 
clicked(GtkWidget *widget, GdkEventButton *event,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gpointer 
user_data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (event-&gt;button == 1) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
<font>coordx</font>[count] = event-&gt;x;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; coordy[count++] = 
event-&gt;y;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (event-&gt;button == 3) 
{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; gtk_widget_queue_draw(widget);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return TRUE;<br>}<br>int<br>main (int argc, char 
*argv[])<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GtkWidget *window;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_init(&amp;argc, &amp;argv);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;window = 
gtk_window_new(GTK_WINDOW_TOPLEVEL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;g_signal_connect(window, "expose-event",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
G_CALLBACK(on_expose_event), NULL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g_signal_connect(window, 
"destroy",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; G_CALLBACK(gtk_main_quit), NULL);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;g_signal_connect(window, "button-press-event", <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
G_CALLBACK(clicked), NULL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_set_title(GTK_WINDOW(window), "lines");<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); <br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_widget_set_app_paintable(window, TRUE);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_widget_show_all(window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_main();<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 0;<br>}<br>该示例会创建一个支持鼠标交互绘制直线段的 GTK+ 
窗口。在窗口中使用鼠标左键随便点几下，每一次点击时，光标位置的坐标都会被记入长度为 100 
的数组；然后点击鼠标右键，所有由鼠标左键点击所得到的点会被彼此连接形成直线段；在窗口中再次点击鼠标右键时，会对窗口绘图区域进行清除。<br>下面对该示例程序代码进行分析：<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgb(cr, 0, 0, 0);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 
0.5);<br>设置颜色为黑色，线宽为 0.5pt 为参数，绘制直线段。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int i, j;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for ( i = 
0; i 1; i++ ) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; for ( j&nbsp;&nbsp;= 0; j -1; j++ ) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;cairo_move_to(cr, <font>coordx</font><em>, coordy<em>);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;cairo_line_to(cr, <font>coordx</font>[j], coordy[j]);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp; }<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>用 cairo_move_to() 和 cairo_line_to() 函数在 cr 中定义绘图路径 (path)，连接 
<font>coordx</font>[] 和 coordy[] 所记录的每个点。<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke(cr);<br>cairo_stroke() 函数会将 cr 中的路径绘制出来。<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;g_signal_connect(window, "button-press-event",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
G_CALLBACK(clicked), NULL);<br>设定 button-press-event 事件的回调函数为 clicked ()。<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (event-&gt;button == 1) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <font>coordx</font>[count] 
= event-&gt;x;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; coordy[count++] = event-&gt;y;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;}<br>在 clicked () 函数中，当鼠标左键点击事件发生时，讲光标所在位置的 x 和 y 坐标分别记入数组 
<font>coordx</font> 和 coordy。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (event-&gt;button == 3) {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; gtk_widget_queue_draw(widget);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>在 clicked () 
函数中，当鼠标右键单击时，调用 gtk_widget_queue_draw () 函数重绘窗口区域。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/cairo-ex04.png" border="0"><br>描绘 (Stroke) 与填充 (Fill)<br>描绘 (Stroke) 可以绘制形状的轮廓，填充 (Fill) 
则用于向形状内部灌注颜色。 <br>#include <br>#include <br>#include <br>static 
gboolean<br>on_expose_event (GtkWidget * widget,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;GdkEventExpose * event, gpointer data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_t *cr;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cr = gdk_cairo_create (widget-&gt;window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int width, height;<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_window_get_size (GTK_WINDOW (widget), &amp;width, &amp;height);<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 9);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgb (cr, 0.69, 
0.19, 0);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_arc (cr, width / 2, height / 2,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 
(width ) / 2 - 10, 0,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 2 * M_PI);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke_preserve (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgb (cr, 0.3, 0.4, 
0.6);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_fill (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_destroy (cr);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;return FALSE;<br>}<br>int<br>main (int argc, char *argv[])<br>{<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;GtkWidget *window;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_init (&amp;argc, &amp;argv);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;window = gtk_window_new (GTK_WINDOW_TOPLEVEL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g_signal_connect 
(G_OBJECT (window), "expose-event",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK 
(on_expose_event), NULL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g_signal_connect (G_OBJECT (window), 
"destroy",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK (gtk_main_quit), NULL);<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_window_set_position (GTK_WINDOW (window),<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;GTK_WIN_POS_CENTER);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_window_set_default_size (GTK_WINDOW 
(window), 200, 150);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_widget_set_app_paintable (window, 
TRUE);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_widget_show_all (window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_main ();<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;return 0;<br>}<br>这个示例绘制一个内部填充灰色的圆。<br>下面对代码进行解析：<br>#include 
<br>之所以引入这个头文件，是因为程序中使用了圆周率常量 M_PI。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int width, height;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_get_size (GTK_WINDOW (widget), &amp;width, 
&amp;height);<br>获取窗口的宽度与高度尺寸。程序中将使用这些值作为绘制圆形的参考尺寸，以实现窗口尺寸变化时，所绘制的圆的尺寸也会相应变化。<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgb (cr, 0.69, 0.19, 0);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_arc (cr, width 
/ 2, height / 2,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (width ) / 2 - 10, 0,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp; 2 * M_PI);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke_preserve (cr);<br>描绘圆的轮廓。这里要注意一下 
cairo_stroke_preserve () 函数与 cairo_stroke () 
函数的区别（最好的办法是用后者替换一下前者，看看程序执行效果）。cairo_stroke_preserve () 函数会将它绘制的路径依然保存在 cairo 
环境中，而 cairo_stroke () 所绘制的路径，在绘制完成后，就从 cairo的环境中清除了。<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_source_rgb (cr, 0.3, 0.4, 0.6);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_fill (cr);<br>对使用 
cairo_stroke_preserve () 函数绘制的路径进行蓝色填充。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/cairo-ex04-stroke-fill.png" border="0"><br>虚线 (Dash)<br>每条线都可以用不同的虚线笔 (dash pen) 来画。虚线模式是通过 cairo_set_dash () 
函数来设定。模式类型通过一个数组来定义，数组中的值均为正数，它们用于设置虚线的虚部分与实部分。数组的长度与偏移量可以在程序中设定。如果数组的长度 为 
0，虚线模式就是被禁止了，那所绘制的线是实线。如果数组长度为 
1，则对应着虚实均匀分布的虚线模式。偏移量是用来设置在虚线的始端在一个虚线周期（包含一个实部单元和一个虚部单元）内的起始位置。<br>#include 
<br>#include <br>static gboolean<br>on_expose_event (GtkWidget * widget,<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GdkEventExpose * event, gpointer data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_t 
*cr;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cr = gdk_cairo_create (widget-&gt;window);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_source_rgba (cr, 0, 0, 0, 1);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static const double 
dashed1[] = { 4.0, 1.0 };<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static int len1 = sizeof (dashed1) / sizeof 
(dashed1[0]);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static const double dashed2[] = { 4.0, 10.0, 4.0 
};<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static int len2 = sizeof (dashed2) / sizeof (dashed2[0]);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;static const double dashed3[] = { 1.0 };<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 
1.5);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_dash (cr, dashed1, len1, 0);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to 
(cr, 40, 60);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 60);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke 
(cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_dash (cr, dashed2, len2, 10);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 120);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 120);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_dash (cr, dashed3, 1, 0);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 180);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 180);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_destroy (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 
FALSE;<br>}<br>int<br>main (int argc, char *argv[])<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GtkWidget 
*window;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GtkWidget *darea;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_init (&amp;argc, 
&amp;argv);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;window = gtk_window_new (GTK_WINDOW_TOPLEVEL);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;darea = gtk_drawing_area_new ();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_container_add (GTK_CONTAINER 
(window), darea);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g_signal_connect (darea, "expose-event",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK (on_expose_event), NULL);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;g_signal_connect (window, "destroy",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK 
(gtk_main_quit), NULL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_window_set_position (GTK_WINDOW 
(window),<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;GTK_WIN_POS_CENTER);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_widget_show_all (window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_main ();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 
0;<br>}<br>该示例演示了三种虚线模式的设置及绘制。<br>下面分析一下关键代码。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static const double 
dashed1[] = { 4.0, 1.0 };<br>设定第一条虚线的模式，它的实部是 4 个像素，虚部是 1 个像素。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;static 
int len1 = sizeof (dashed1) / sizeof (dashed1[0]);<br>计算数组 dashed1 的长度。<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_dash (cr, dashed1, len1, 0);<br>设置虚线模式。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;darea = 
gtk_drawing_area_new ();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_container_add (GTK_CONTAINER (window), 
darea);<br>这次，我们是在 drawing_area 部件上绘图，不再是窗口区域了。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/cairo-ex04-dash.png" border="0"><br>线帽 (Line caps)<br>线帽是针对直线段的端点形状而言的，分为三种：<br>
<ul><br>
<li>CAIRO_LINE_CAP_SQUARE <br>
</li><li>CAIRO_LINE_CAP_ROUND <br>
</li><li>CAIRO_LINE_CAP_BUTT </li></ul><br>对应形状如下图所示：<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/linecaps.png" border="0"><br>同一条直线段，CAIRO_LINE_CAP_SQUARE 线帽与 CAIRO_LINE_CAP_BUTT 
线帽会导致直线段长度有所差别，前者会比后者长一个线宽尺寸。<br>#include <br>#include <br>static 
gboolean<br>on_expose_event (GtkWidget * widget,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;GdkEventExpose * event, gpointer data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_t *cr;<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cr = gdk_cairo_create (widget-&gt;window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgba 
(cr, 0, 0, 0, 1);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 10);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 
40, 60);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 60);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke 
(cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 150);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 150);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_cap (cr, 
CAIRO_LINE_CAP_SQUARE);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 240);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 240);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 1.5);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 40);<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 40, 260);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_move_to (cr, 360, 40);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 260);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 365, 40);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_line_to (cr, 365, 260);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_destroy (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 
FALSE;<br>}<br>该示例绘制三条具有不同线帽的直线段，同时也展示了不同线帽对线的长度的影响。<br>下面对关键代码进行简单分析：<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 10);<br>设置线的宽度为 10px。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_cap 
(cr, CAIRO_LINE_CAP_ROUND);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 150);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_line_to (cr, 360, 150);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>画了一条线帽为 
CAIRO_LINE_CAP_ROUND 的直线段。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_move_to (cr, 40, 40);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_line_to (cr, 40, 260);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke 
(cr);<br>这是三条竖线之一，用于表现线帽对线的长度的影响。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/cairo-ex04-linecaps.png" border="0"><br>线的交合 (Line joins)<br>线的交合存在以下三种风格：<br>
<ul><br>
<li>CAIRO_LINE_JOIN_MITER <br>
</li><li>CAIRO_LINE_JOIN_BEVEL <br>
</li><li>CAIRO_LINE_JOIN_ROUND </li></ul><br>对应形状如下图所示。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/joins.jpg" border="0"><br>#include <br>#include <br>static gboolean<br>on_expose_event 
(GtkWidget * widget,<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GdkEventExpose * event, gpointer 
data)<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_t *cr;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cr = gdk_cairo_create 
(widget-&gt;window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_source_rgb (cr, 0.1, 0, 0);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_rectangle (cr, 30, 30, 100, 100);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 
14);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_rectangle (cr, 160, 30, 100, 100);<br>&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 14);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_join (cr, 
CAIRO_LINE_JOIN_BEVEL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_rectangle 
(cr, 100, 160, 100, 100);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 14);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke 
(cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_destroy (cr);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 
FALSE;<br>}<br>int<br>main (int argc, char *argv[])<br>{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GtkWidget 
*window;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;GtkWidget *darea;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_init (&amp;argc, 
&amp;argv);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;window = gtk_window_new (GTK_WINDOW_TOPLEVEL);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;darea = gtk_drawing_area_new ();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_container_add (GTK_CONTAINER 
(window), darea);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g_signal_connect (darea, "expose-event",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK (on_expose_event), NULL);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;g_signal_connect (window, "destroy",<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;G_CALLBACK 
(gtk_main_quit), NULL);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_window_set_position (GTK_WINDOW 
(window),<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;GTK_WIN_POS_CENTER);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_window_set_default_size (GTK_WINDOW (window), 300, 280);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;gtk_widget_show_all (window);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;gtk_main ();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return 
0;<br>}<br><br>该示例采用不同的交合类型绘制了三个矩形。<br>下面对关键代码进行简单分析：<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_rectangle 
(cr, 30, 30, 100, 100);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_set_line_width (cr, 14);<br>&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cairo_stroke 
(cr);<br>绘制了一个线宽为 14px，交合类型为 CAIRO_LINE_JOIN_MITER 的矩形。<br><img alt="" src="http://liyanrui.is-programmer.com/user_files/LiYanrui/Image/cairo/cairo-ex04-joins.png" border="0"><br><br><br><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong></em></em></em></em></td></tr>
<img src ="http://www.cppblog.com/dfghj44444/aggbug/111958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dfghj44444/" target="_blank">叫我老王吧</a> 2010-04-08 14:15 <a href="http://www.cppblog.com/dfghj44444/archive/2010/04/08/111958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>