<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kanru&#039;s 探險日誌 &#187; Programming</title>
	<atom:link href="http://blog.kanru.info/archives/category/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.kanru.info</link>
	<description>當發現美好的事物時，所要做的第一件事，就是把它分享給所有人</description>
	<lastBuildDate>Sun, 23 May 2010 09:51:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Parasite &#8211; Gtk+ UI 除錯開發工具</title>
		<link>http://blog.kanru.info/archives/605</link>
		<comments>http://blog.kanru.info/archives/605#comments</comments>
		<pubDate>Mon, 16 Mar 2009 11:02:40 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[parasite]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=605</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://chipx86.github.com/gtkparasite/">Parasite</a> 是一個強大的 Gtk+ UI 除錯/開發工具，使用方法類似 Firefox 中很好用的 Firebug，可以附著於執行中的程式，顯示 widget tree 與 properties，動態修改 widget 屬性，甚至透過 python console 還可以隨時 coding 改變 widget 行為。</p>

<p><img src="http://people.debian.org.tw/~koster/blog/parasite_python_shell.png" alt="Parasite Python Shell" width="90%"/></p>

<p>目前還沒有正式發行版，可以自己從 Git 拖回來編譯安裝。
<pre class="brush: bash;">
$ git clone git://github.com/chipx86/gtkparasite
</pre></p>

<p>參考：</p>

<ul>
<li><a href="http://lwn.net/Articles/321409/">LWN 文章</a></li>
<li><a href="http://chipx86.github.com/gtkparasite/video/parasite-intro.avi">Screencast</a></li>
</ul>

<p>話說，現在 github 不只有 git hosting，還有 web page hosting 了，不少專案就這樣透過 github 快速成立，或許以後 github 會朝完整的 project hosting 發展？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/605/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://chipx86.github.com/gtkparasite/video/parasite-intro.avi" length="9434202" type="video/x-msvideo" />
		</item>
		<item>
		<title>為什麼 Git 比 X 好？</title>
		<link>http://blog.kanru.info/archives/525</link>
		<comments>http://blog.kanru.info/archives/525#comments</comments>
		<pubDate>Sat, 06 Dec 2008 00:40:33 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[translate]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=525</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>當初一看到這個標題心裡想的是 Git 怎麼拿來跟 X 比？原來這個 X 是指其他 SCM&#8230;</p>

<p><a href="http://whygitisbetterthanx.com/">http://whygitisbetterthanx.com/</a></p>

<p>很多人都注意到了，但是現在有</p>

<p><a href="http://zh-tw.whygitisbetterthanx.com/">http://zh-tw.whygitisbetterthanx.com/</a></p>

<p>囉，小小替 Git 宣傳一下 :p</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/525/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vim &#8211; 以游標位置為基礎捲動螢幕</title>
		<link>http://blog.kanru.info/archives/510</link>
		<comments>http://blog.kanru.info/archives/510#comments</comments>
		<pubDate>Mon, 01 Dec 2008 15:40:22 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=510</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>不是人人都有大螢幕可以一次容納幾百行程式碼，且看文件時我們常會希望可以從頭看到尾，或者是寫文章時我們會希望可以從螢幕的最上頭開新段落然後一次寫一整個螢幕。</p>

<p>如果不熟悉以下命令，你可能常常要用 hjkl 或方向鍵去移動游標，調整顯示的範圍。但是，其實不用這麼辛苦。</p>

<p><strong>zt</strong> 把游標下這行放到螢幕最上方</p>

<p><strong>zz</strong> 放到中間</p>

<p><strong>zb</strong> 放到最後</p>

<p>比如說，要開始寫新段落我只要 <strong>L</strong> 移動游標到最後，然後 <strong>zt</strong> ，我就會有一整頁空白的空間可以開始揮灑 <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/510/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vim &#8211; 檔名太長怎麼辦</title>
		<link>http://blog.kanru.info/archives/487</link>
		<comments>http://blog.kanru.info/archives/487#comments</comments>
		<pubDate>Sun, 30 Nov 2008 11:25:59 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=487</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>這是 vim 的一個小技巧，考慮以下情境：</p>

<ol>
<li>我現在在 <code>~/</code> 目錄</li>
<li>因為某個原因我打開 vim 編輯 <code>/usr/src/foodir/src/bardoor.c</code></li>
<li>看了看，發現需要參考同目錄下的 <code>bardoor.h</code>，於是打入命令 <code>:tabe </code></li>
<li>接下來怎麼辦？因為目前工作目錄是 <code>~/</code>，如果要用 vim 的 tab 補完的話還是需要把路徑再打一次</li>
<li>想一想再看答案 <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>

<p><span id="more-487"></span></p>

<p>答案是 <strong>:tabe %:r.h</strong></p>

<p>利用 vim 的 filename-modifiers 可以輕鬆作到，vim 有 10 個這樣的 modifier 可以作用於 &#8220;%&#8221;，&#8221;#&#8221;，&#8221;#n&#8221;，&#8221;&lt;cfile&gt;&#8221;，&#8221;&lt;sfile&gt;&#8221;，&#8221;&lt;afile&gt;&#8221; 或 &#8220;&lt;abuf&gt;&#8221; 出現的地方：</p>

<table width='100%'>
<tr><td><strong>:p</strong></td> <td>完整路徑</td></tr>
<tr><td><strong>:8</strong></td> <td>變成 8.3 格式 (win32 用)</td></tr>
<tr><td><strong>:~</strong></td> <td>轉換為相對於 <code>~/</code> 目錄的路徑</td></tr>
<tr><td><strong>:.</strong></td> <td>轉換成相對於 <code>./</code> 目錄</td></tr>
<tr><td><strong>:h</strong></td> <td>保留路徑頭部，相當於 dirname 指令</td></tr>
<tr><td><strong>:t</strong></td> <td>保留檔案名，相當於 basename 指令</td></tr>
<tr><td><strong>:r</strong></td> <td>保留檔案名並去除延伸檔案名</td></tr>
<tr><td><strong>:e</strong></td> <td>只留下延伸檔案名</td></tr>
<tr><td><strong>:s?pat?sub?</strong></td> <td>用 sub 取代第一個出現的 pat</td></tr>
<tr><td><strong>:g?pat?sub?</strong></td> <td>同上，全部取代</td></tr>
</table>

<p />

<p>例如，如果文件名是 &#8220;src/version.c&#8221;，當前目錄是 &#8220;/home/mool/vim&#8221;：</p>

<table width='100%'>
<tr><td><strong>:p</strong></td>                    <td>/home/mool/vim/src/version.c</td></tr>
<tr><td><strong>:p:.</strong></td>                                 <td>src/version.c</td></tr>
<tr><td><strong>:p:~</strong></td>                           <td>~/vim/src/version.c</td></tr>
<tr><td><strong>:h</strong></td>                                   <td>src</td></tr>
<tr><td><strong>:p:h</strong></td>                  <td>/home/mool/vim/src</td></tr>
<tr><td><strong>:p:h:h</strong></td>                <td>/home/mool/vim</td></tr>
<tr><td><strong>:t</strong></td>                                       <td>version.c</td></tr>
<tr><td><strong>:p:t</strong></td>                                     <td>version.c</td></tr>
<tr><td><strong>:r</strong></td>                                   <td>src/version</td></tr>
<tr><td><strong>:p:r</strong></td>                  <td>/home/mool/vim/src/version</td></tr>
<tr><td><strong>:t:r</strong></td>                                     <td>version</td></tr>
<tr><td><strong>:e</strong></td>                                               <td>c</td></tr>
<tr><td><strong>:s?version?main?</strong></td>                     <td>src/main.c</td></tr>
<tr><td><strong>:s?version?main?:p</strong></td>    <td>/home/mool/vim/src/main.c</td></tr>
<tr><td><strong>:p:gs?/?\\?</strong></td>           <td>\home\mool\vim\src\version.c</td></tr>
</table>

<p />
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abook Tags Support</title>
		<link>http://blog.kanru.info/archives/472</link>
		<comments>http://blog.kanru.info/archives/472#comments</comments>
		<pubDate>Sun, 23 Nov 2008 13:49:30 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[abook]]></category>
		<category><![CDATA[mutt]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=472</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://abook.sourceforge.net/">Abook</a> 是一個文字模式的通訊錄軟體，可以跟 mutt <a href="http://wiki.mutt.org/?MuttGuide/Aliases">搭配</a>使用。</p>

<p>功能很齊全，就是沒有群組的功能&#8230;<a href="http://people.debian.org.tw/~koster/misc/abook_tags.diff">這個 patch</a> 新增一個 tags 欄位，讓 abook 在搜尋的時候會搜尋 NAME, NICK, EMAIL, TAGS 四個項目，模擬群組的功能。</p>

<p>不知道若原作者看到這種 patch 會做何感想 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/472/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X-Server 1.5.0 very sluggish</title>
		<link>http://blog.kanru.info/archives/333</link>
		<comments>http://blog.kanru.info/archives/333#comments</comments>
		<pubDate>Thu, 18 Sep 2008 00:56:13 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[exa]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=333</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>最近升到 xorg 1.5.0，某些操作 (terminal 快速更新) 會使 xserver 佔用非常多 cpu，看來是<a href="http://lists.freedesktop.org/archives/xorg/2008-September/038534.html">這個</a>問題</p>

<blockquote>
  <p>Working on it &#8230; right now it looks like:</p>
  
  <ul>
  <li><p>XShm pixmaps got accidentally reenabled in the course of 
  Adam&#8217;s changes</p></li>
  <li><p>Someone (maybe GTK, having tracked it down yet) is taking advantage<br />
  of that by creating a shared pixmap and using it as the source for
  a composite operation.</p></li>
  <li><p>That is not handled well in EXA and triggers migration of the
  destination back to system memory. (*)</p></li>
  </ul>
  
  <p>&#8211; Owen</p>
  
  <p>(*) One of the many cases where we&#8217;d be better off creating temporaries
  in video memory to avoid migration.</p>
</blockquote>

<p>測測..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emesene &amp; SQL Optimization</title>
		<link>http://blog.kanru.info/archives/330</link>
		<comments>http://blog.kanru.info/archives/330#comments</comments>
		<pubDate>Wed, 17 Sep 2008 14:27:00 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[emesene]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=330</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>最近都是用 <a href="http://www.emesene.org">emesene</a> 上 MSN，不過他的啟動速度實在是非常慢，啟動的時候硬碟燈狂閃，判斷應該是在讀取聯絡人的資料快取。先用 python profiler 跑過一次，結果果然是 Logger.py 裡面從 sqlite 撈資料的函式在慢。</p>

<p>大小約 17MB 的 db，每個 query 竟然都要一秒以上，難怪 emesene 啟動要這麼久了。就來幫 emesene 最佳化一下 sql 吧。</p>

<p>以底下這個 query 為例：</p>

<p><pre lang="sql">
    select e.stamp, ue.data 
    from event e, user_event ue, user u
    where e.id = ue.id_event and
    u.id = ue.id_user and
    e.name = "status-changed" and
    u.account = "%s"
    order by e.stamp desc
    limit 1
</pre>
結果是
<pre lang="c">
1221129396.22343|NLN
CPU Time: user 1.173822 sys 0.023997
</pre></p>

<p>用 explain query plan 看看</p>

<p><pre lang="c">
    0|1|TABLE user_event AS ue
    1|0|TABLE event AS e USING PRIMARY KEY
    2|2|TABLE user AS u USING PRIMARY KEY
</pre></p>

<p>應該是先把 user_event 與 event, user 三個 table join 在一起，最後再檢查 e.name 與 u.account。</p>

<p>來看看三個 table 的大小</p>

<ul>
<li>user_event: 180801 row</li>
<li>event: 192968 row</li>
<li>user: 196 row</li>
</ul>

<p>這樣 join 起來是多大的 table 呀</p>

<p>先試試改寫 from clause 裡的順序
<pre lang="sql">
    select e.stamp, ue.data 
    from user u, event e, user_event ue
    where e.id = ue.id_event and
    u.id = ue.id_user and
    e.name = "status-changed" and
    u.account = "%s"
    order by e.stamp desc
    limit 1
</pre>
結果是
<pre lang="c">
    1221129396.22343|NLN
    CPU Time: user 0.485926 sys 0.008998
</pre>
很好，時間少了一半，explain query plan 顯示
<pre lang="c">
    0|2|TABLE user_event AS ue
    1|0|TABLE user AS u USING PRIMARY KEY
    2|1|TABLE event AS e USING PRIMARY KEY
</pre>
如果幫 user_event 建個 index 呢？
<pre lang="sql">
    create index ueiduser on user_event(id_user);
</pre>
再 query 一次
<pre lang="c">
    1221129396.22343|NLN
    CPU Time: user 0.017997 sys 0.004999
</pre>
快了非常多吧！explain query plan 顯示：
<pre lang="c">
    0|0|TABLE user AS u
    1|1|TABLE user_event AS ue WITH INDEX ueiduser
    2|2|TABLE event AS e USING PRIMARY KEY
</pre>
這是因為 sqlite 會以 from clause 的第一個當作 outer loop，所以我把數量最小的 user 移到前面，再適當的建立 index，使得 query 的速度快了 100 倍&#8230;</p>

<p>參考</p>

<ul>
<li><a href="http://www.sqlite.org/optoverview.html">http://www.sqlite.org/optoverview.html</a></li>
<li><a href="http://www.sqlite.org/cvstrac/wiki?p=QueryPlans">http://www.sqlite.org/cvstrac/wiki?p=QueryPlans</a></li>
</ul>

<p>Patch <a href="http://people.debian.org.tw/~koster/misc/emesene_sqlquery_optimization.diff">在此</a></p>

<p>Emesene svn trunk 已經收錄最新 patch <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/330/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>video-intel 2.5 &amp; EXA</title>
		<link>http://blog.kanru.info/archives/307</link>
		<comments>http://blog.kanru.info/archives/307#comments</comments>
		<pubDate>Mon, 01 Sep 2008 10:06:34 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[exa]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[intel]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=307</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>video-intel 自從 2.2 版就預設使用 EXA 加速，而這個新一代的加速引擎卻因為在文字的顯示上非常緩慢，掩蓋了 EXA 本身的優良特性，Debian BTS 上也<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=451571">怨聲載道</a>。video-intel 2.5 <a href="http://cworth.org/exa/i965/new_job_old_tricks/">Carl Worth</a> 終於解決了這個問題，原來是因為使用過小的 buffer，導致每次 driver 都要等待上一次 composite operation 結束才能重新使用 buffer，在加大 buffer 之後，EXA 的 text rendering 速度甚至超過了 XAA！</p>

<p>全面轉換至 EXA，引入 GEM，video-intel 的效能只會越來越好 <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AnkhSVN 結合 Visual Studio 與 Subversion</title>
		<link>http://blog.kanru.info/archives/297</link>
		<comments>http://blog.kanru.info/archives/297#comments</comments>
		<pubDate>Sat, 31 May 2008 14:34:28 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[小工具]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[ankhsvn]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tortoisesvn]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=297</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>最近很多時間都是待在 Visual Studio 的環境下寫程式，而 VCS 則是使用 Windows 下很方便的 <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>。對於已經習慣在編輯器裡面修改程式，告一段落後到檔案總管(或是 shell)把修改提交到伺服器上的我來說，使用 TortoiseSVN 算是很習慣了。但是對於第一次接觸 VCS 的同學，可能會忘記要提交修改、要寫 Changelog、開始新的修改前要先 update 等。</p>

<p>而 <a href="http://ankhsvn.open.collab.net/">AnkhSVN</a> 則提供了一個與 Visual Studio 整合的方案，1.x 版的 AnkhSVN 可以由 VS 內執行 VCS 的命令，而開發中的 2.x 則實做了 Source Control Provider 的介面，與 VS 的環境更緊密的結合，可以完全取代預設的 Sourcesafe 方案，使用上應該與商業化的 Visual SVN 類似，可以直接 checkout 專案、看 changelog、看 diff 等。</p>

<p><a href="http://www.flickr.com/photos/kanru/2538089627/" title="solution by Kanru Chen, on Flickr"><img src="http://farm3.static.flickr.com/2224/2538089627_549c5a285e_o.png" width="337" height="270" alt="solution" /></a></p>

<p>測試的時候的小插曲：因為 2.x 是 &#8220;stable, but unfinished&#8221;，只有提供 nightly build，但是我抓下來的安裝檔都沒辦法在 VS 2005 上面正常執行，後來直接到 #ankhsvn 求救，也很快獲得回應，原來是因為不小心參考到 2008 才有的介面，修正之後，最新的 snapshot 已經可以正常使用 <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>不過要注意的是，2.x 用的是最新版的 svn，所以 working copy 的 format 是第 9 版，而最新的 TortoiseSVN 的 1.4.x release 用的是第 8 版，會沒辦法共同使用，要把 TortoiseSVN 更新到開發中的 1.5 才能讓 working copy 相容。如果沒辦法接受使用兩個開發中軟體的話，還是可以用最新的 release 版本，還是很好用的 :p</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/297/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MFC 使用 GDI+</title>
		<link>http://blog.kanru.info/archives/294</link>
		<comments>http://blog.kanru.info/archives/294#comments</comments>
		<pubDate>Wed, 02 Apr 2008 13:23:33 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[gdiplus]]></category>
		<category><![CDATA[mfc]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=294</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>首先要 include gdiplus.h，然後東西都在 Gdiplus namespace 裡面，要記得 link 到 gdiplus.lib</p>

<p>可以在 stdafx.h 寫</p>

<p><code>
<pre></pre></code></p>

<h1>include &lt;gdiplus.h&gt;</h1>

<h1>pragma comment(lib, "gdiplus")</h1>

<p>using namespace Gdiplus;

</p>

<p>然後使用前要先呼叫 GdiplusStartup</p>

<p><code>
<pre>
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&amp;gdiplusToken, &amp;gdiplusStartupInput, NULL);
</pre>
</code></p>

<p>程式結束時要呼叫 GdiplusShutdown</p>

<p><code>
<pre>
GdiplusShutdown(gdiplusToken);
</pre>
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/294/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
