<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2240323542513209789</id><updated>2012-01-25T08:20:55.517+08:00</updated><category term='Shinichi Watanabe'/><category term='manga'/><category term='funny'/><category term='news'/><category term='translation'/><category term='Kazuya Tsurumaki'/><category term='talk'/><category term='note'/><category term='Miyazaki Hayao'/><category term='mv'/><category term='cartoon'/><category term='policy'/><category term='program'/><category term='comic'/><category term='music'/><category term='book'/><category term='Satoshi Kon'/><category term='life'/><category term='test'/><category term='movie'/><category term='Hiroki Endo'/><category term='travel'/><category term='Steven Spielberg'/><category term='South Park'/><category term='Yoshifumi Kondo'/><category term='Akiyuki Shinbo'/><category term='trick'/><category term='animation'/><category term='Tomomi Mochizuki'/><category term='anime'/><category term='Mamoru Oshii'/><category term='Akitaro Daichi'/><category term='Tsutomu Nihei'/><category term='Otomo Katsuhiro'/><category term='Shintaro Kago'/><category term='thinking'/><title type='text'>不怎麼樣</title><subtitle type='html'>思緒、心得、習作、生活</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default?start-index=101&amp;max-results=100'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>268</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-192446369494690954</id><published>2010-11-21T08:53:00.003+08:00</published><updated>2010-11-21T08:58:09.997+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>三支小程式</title><content type='html'>&lt;p&gt;幫朋友寫的作業，題目不刁鑽，強調趣味性，但若要找出複雜度低的演算法，其實很具挑戰，我那時候接近期中考，時間不多，就每個都厚顏地暴力解了。聽說後來讓助教測試程式的時候，其中一題的進階測試數據跑了十分鐘還沒跑出結果，囧在當下，哈哈。&lt;/p&gt;&lt;p&gt;以下便列這幾個程式題目和我的跛腳實作。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;hr /&gt;&lt;p&gt;&lt;b&gt;III. 網路配線&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;電腦網路使得一組電腦可以經由網路 (如Ethernet網路) 而獲得聯繫，在此我們考慮「線性」網路配線問題，即除了兩端點電腦之外，其餘電腦均僅與其他兩電腦連結，典型之電腦網路範例如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TOhtWZAo7TI/AAAAAAAAUKs/YHz5OcxQw9M/s1600-h/clip_image002%5B5%5D.jpg"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="159" alt="clip_image002" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TOhtXZePehI/AAAAAAAAUKw/QpM7oH6j7k0/clip_image002_thumb%5B2%5D.jpg?imgmax=800" width="349" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;其中，黑色頂點代表電腦在&lt;i&gt;xy&lt;/i&gt;平面的座標位置 (本題以英呎feet為單位)，連結的邊則以兩端點之距離表示，在此，距離是根據其幾何距離Euclidean Distance計算。&lt;/p&gt;&lt;p&gt;為了節省網路配線的開銷，必須使得總配線長度最小，如下圖為其最佳解：&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TOhtYNl4LoI/AAAAAAAAUK0/WWlmraihm-s/s1600-h/clip_image004%5B5%5D.jpg"&gt;&lt;img title="clip_image004" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="174" alt="clip_image004" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TOhtZOR7BUI/AAAAAAAAUK4/wmmGjf3A688/clip_image004_thumb%5B2%5D.jpg?imgmax=800" width="434" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;其中，兩端點不限，網路配線的總長度為 ：4 + 5 + 5.83 + 11.18 = 26.01 ft。&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;233&lt;br /&gt;234&lt;br /&gt;235&lt;br /&gt;236&lt;br /&gt;237&lt;br /&gt;238&lt;br /&gt;239&lt;br /&gt;240&lt;br /&gt;241&lt;br /&gt;242&lt;br /&gt;243&lt;br /&gt;244&lt;br /&gt;245&lt;br /&gt;246&lt;br /&gt;247&lt;br /&gt;248&lt;br /&gt;249&lt;br /&gt;250&lt;br /&gt;251&lt;br /&gt;252&lt;br /&gt;253&lt;br /&gt;254&lt;br /&gt;255&lt;br /&gt;256&lt;br /&gt;257&lt;br /&gt;258&lt;br /&gt;259&lt;br /&gt;260&lt;br /&gt;261&lt;br /&gt;262&lt;br /&gt;263&lt;br /&gt;264&lt;br /&gt;265&lt;br /&gt;266&lt;br /&gt;267&lt;br /&gt;268&lt;br /&gt;269&lt;br /&gt;270&lt;br /&gt;271&lt;br /&gt;272&lt;br /&gt;273&lt;br /&gt;274&lt;br /&gt;275&lt;br /&gt;276&lt;br /&gt;277&lt;br /&gt;278&lt;br /&gt;279&lt;br /&gt;280&lt;br /&gt;281&lt;br /&gt;282&lt;br /&gt;283&lt;br /&gt;284&lt;br /&gt;285&lt;br /&gt;286&lt;br /&gt;287&lt;br /&gt;288&lt;br /&gt;289&lt;br /&gt;290&lt;br /&gt;291&lt;br /&gt;292&lt;br /&gt;293&lt;br /&gt;294&lt;br /&gt;295&lt;br /&gt;296&lt;br /&gt;297&lt;br /&gt;298&lt;br /&gt;299&lt;br /&gt;300&lt;br /&gt;301&lt;br /&gt;302&lt;br /&gt;303&lt;br /&gt;304&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; "&gt;&lt;span class="note"&gt;/*&lt;br /&gt;&lt;br /&gt;輸入說明:&lt;br /&gt;每組輸入為網路上的電腦總數n (原則上不超過8)，緊接每行為其座標值，&lt;br /&gt;其編號自動依數字順序1, 2, …等。輸入電腦總數為0時結束。&lt;br /&gt;&lt;br /&gt;輸出說明:&lt;br /&gt;最小配線長度之電腦順序及其最佳解 (配線長度)。&lt;br /&gt;&lt;br /&gt;輸入範例:&lt;br /&gt;5&lt;br /&gt;8 11&lt;br /&gt;8 16&lt;br /&gt;12 16&lt;br /&gt;13 8&lt;br /&gt;24 10&lt;br /&gt;0&lt;br /&gt;&lt;br /&gt;輸出範例:&lt;br /&gt;32145&lt;br /&gt;26.01&lt;br /&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;cstdlib&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;ctime&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; EQ ==&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; COUNT_OF_CORRDINATE 10&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; COUNT_OF_DIMENSION 2&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; MAX_COUNT_OF_PERMUTATION 10000 &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最多排列數&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;using &lt;/span&gt;&lt;span class="reservedWord"&gt;namespace &lt;/span&gt;std;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;Coordinate [COUNT_OF_CORRDINATE][COUNT_OF_DIMENSION];&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;Permutation [MAX_COUNT_OF_PERMUTATION];&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; value {&lt;br /&gt;    InitialValue = 444,&lt;br /&gt;    SeparatedValue = 666,&lt;br /&gt;    A,&lt;br /&gt;    B&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;powTen( &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得10^n的值&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 1;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( n -- &amp;gt; 0 )&lt;br /&gt;        temp *= 10;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;temp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;double &lt;/span&gt;getDistance( Coordinate data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;a, &lt;span class="reservedWord"&gt;int &lt;/span&gt;b )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;a座標到b座標之間的距離&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;differenceX = data[a][0] - data[b][0];&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;differenceY = data[a][1] - data[b][1];&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;sqrt( differenceX * differenceX +&lt;br /&gt;                 differenceY * differenceY );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getRandNumber( &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得1~n之間的隨機數&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;rand() % n + 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;bool &lt;/span&gt;noSingleRepetition( Permutation per, &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp, &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;檢查在一個排列中是否有重複的數字&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;per: 已有的排列數字&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;temp: 即將要加入的排列數字&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;n: 總共有幾個數字&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;noRepetition = true;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( -- n &amp;gt;= 0 ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( per[n] EQ temp )&lt;br /&gt;            noRepetition = false;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;noRepetition;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;bool &lt;/span&gt;noGroupRepetition( Permutation per, &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;檢查是否有重複的排列&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;per: 已有的排列&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;temp: 即將要加入的排列&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;noRepetition = true;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( per[i] != InitialValue ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( per[i++] EQ temp )&lt;br /&gt;            noRepetition = false;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;noRepetition;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getRandPermutation( &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得隨機排列數字&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;permutation = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;over = false;&lt;br /&gt;    Permutation per = {0};&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = n - 1; i &amp;gt;= 0; i -- ) {&lt;br /&gt;        over = false;&lt;br /&gt;        &lt;span class="reservedWord"&gt;while &lt;/span&gt;( !over ) {&lt;br /&gt;            &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = getRandNumber( n );&lt;br /&gt;&lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( noSingleRepetition( per, temp, n ) ) {&lt;br /&gt;                permutation += temp * powTen( i );&lt;br /&gt;                &lt;br /&gt;                per[i] = temp;&lt;br /&gt;                &lt;br /&gt;                over = true;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;permutation;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getPermutationNumber( &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得排列數&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;ex. n = 3 -&amp;gt; get 6&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;    n = 4 -&amp;gt; get 24&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;    n = 5 -&amp;gt; get 120&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = n ? 1 : 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;若n=0, 則回傳0&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( n &amp;gt; 0 ) {&lt;br /&gt;        temp *= n;&lt;br /&gt;        n --;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;temp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setPermutation( Permutation perMethod, &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;總共有幾組排列方式就設置幾組&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;perMethod: 存放排列方式(以純數字儲存)&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;n: 總共幾個節點&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = getPermutationNumber( n );&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;permutation = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;over = false;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; count; i ++ ) {&lt;br /&gt;        over = false;&lt;br /&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;while &lt;/span&gt;( !over ) {&lt;br /&gt;            &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = getRandPermutation( n );&lt;br /&gt;&lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( noGroupRepetition( perMethod, temp ) ) {&lt;br /&gt;                perMethod[i] = temp;&lt;br /&gt;                over = true;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;double &lt;/span&gt;getMinDistance( Coordinate data, Permutation perMethod, &lt;span class="reservedWord"&gt;int &lt;/span&gt;n, &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; minRoute )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;計算此排列方式須行經的距離，求出最小者&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;data: 座標資料&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;perMethod: 座標排列方式&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;n: 有幾個座標&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;minRoute: 最短路徑所經過座標的順序&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = getPermutationNumber( n );&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 0, single = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;turn = A, a = InitialValue, b = InitialValue;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;double &lt;/span&gt;distance = 0, minDistance = 99999;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; count; i ++ ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;有幾種排列方式&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;        single = perMethod[i];&lt;br /&gt;        distance = 0;&lt;br /&gt;        &lt;br /&gt;       &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = n - 1; j &amp;gt;= 0; j -- ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;有幾個節點&lt;br /&gt;&lt;/span&gt;            temp = single / powTen( j );&lt;br /&gt;            single -= temp * powTen( j );&lt;br /&gt;            &lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( turn EQ A ) {&lt;br /&gt;                a = temp;&lt;br /&gt;                turn = B;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;                b = temp;&lt;br /&gt;                turn = A;&lt;br /&gt;            }&lt;br /&gt;                &lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( a != InitialValue &amp;amp;&amp;amp;&lt;br /&gt;                 b != InitialValue ) {&lt;br /&gt;                distance += getDistance( data, a - 1, b - 1 );&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( distance &amp;lt; minDistance ) {&lt;br /&gt;            minDistance = distance;&lt;br /&gt;            minRoute = perMethod[i];&lt;br /&gt;        }&lt;br /&gt;        a = b = InitialValue;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;minDistance;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;initialData( Coordinate data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;初始化資料&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; COUNT_OF_CORRDINATE; i ++ )&lt;br /&gt;       &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0; j &amp;lt; COUNT_OF_DIMENSION; j ++ )&lt;br /&gt;            data[i][j] = InitialValue;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;showData( Coordinate data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;countOfCoordinate )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;顯示節點資料(檢查用)&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n----------------\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; countOfCoordinate; i ++ ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0; j &amp;lt; COUNT_OF_DIMENSION; j ++ )&lt;br /&gt;            cout &amp;lt;&amp;lt; data[i][j] &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;.&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;-&lt;b&gt;&lt;/b&gt;---------------\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;inputData( Coordinate data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; countOfCoordinate )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;輸入座標&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;x = 0, y = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;over = false;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( !over ) {&lt;br /&gt;        cin &amp;gt;&amp;gt; temp;&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( temp EQ 0 ) {&lt;br /&gt;            over = true;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;           &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; temp * COUNT_OF_DIMENSION; i ++ ) {&lt;br /&gt;                cin &amp;gt;&amp;gt; data[x][y++];&lt;br /&gt;&lt;br /&gt;               &lt;span class="reservedWord"&gt; if &lt;/span&gt;( y EQ COUNT_OF_DIMENSION ) {&lt;br /&gt;                    x ++;&lt;br /&gt;                    y = 0;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="note"&gt;//d&lt;b&gt;&lt;/B&gt;ata[x++][0] = SeparatedValue;&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;    }&lt;br /&gt;    countOfCoordinate = x;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;run()&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;執行主函式&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    Coordinate data = {0};&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;countOfCoordinate = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;座標的數目&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    Permutation perMethod = {0}; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;有幾種排列方式&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;double &lt;/span&gt;minDistance = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最短路徑&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;minRoute = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最短路由&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    initialData( data );&lt;br /&gt;&lt;br /&gt;    inputData( data, countOfCoordinate );&lt;br /&gt;    &lt;span class="note"&gt;//s&lt;b&gt;&lt;/B&gt;howData( data, countOfCoordinate );&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    setPermutation( perMethod, countOfCoordinate );&lt;br /&gt;&lt;br /&gt;    minDistance = getMinDistance( data, perMethod, countOfCoordinate, minRoute );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;最&lt;b&gt;&lt;/b&gt;短路由: &amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; minRoute &amp;lt;&amp;lt; endl;&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;最&lt;b&gt;&lt;/b&gt;短路徑: &amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; minDistance &amp;lt;&amp;lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main()&lt;br /&gt;{&lt;br /&gt;    srand( time( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;) );&lt;br /&gt;&lt;br /&gt;    run();&lt;br /&gt;    &lt;br /&gt;    system( &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;AUSE&amp;quot;&lt;/span&gt; );&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;IV. 最大子陣列問題&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; "&gt;&lt;span class="note"&gt;/*&lt;br /&gt;&lt;br /&gt;IV. 最大子陣列問題&lt;br /&gt;&lt;br /&gt;給定一任意陣列，最大子陣列問題 (Maximum-Subarray Problem)&lt;br /&gt;的目的是找到一連續子陣列其總和最大。舉例說明，給定一陣列 如下：&lt;br /&gt;-2, 1, -3, 4, -1, 2, 1, -5, 4&lt;br /&gt;則最大子陣列為4, -1, 2, 1，其總和為6，其他子陣列的總和都比6小。&lt;br /&gt;試寫一程式解決最大子陣列問題。&lt;br /&gt;&lt;br /&gt;輸入說明:&lt;br /&gt;每組輸入為陣列表列，輸入數字均為整數值，0代表結束。&lt;br /&gt;&lt;br /&gt;輸出說明:&lt;br /&gt;最大子陣列及其總和。&lt;br /&gt;&lt;br /&gt;輸入範例:&lt;br /&gt;-2 1 -3 4 -1 2 1 -5 4&lt;br /&gt;13 -3 -25 20 -3 -16 -23 18 20 -7 12 -5 -22 15 -4 7&lt;br /&gt;0&lt;br /&gt;&lt;br /&gt;輸出範例:&lt;br /&gt;4 -1 2 1&lt;br /&gt;Maximum = 6&lt;br /&gt;18 20 -7 12&lt;br /&gt;Maximum = 43&lt;br /&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;//#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;cstdlib&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; EQ ==&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; COUNT_OF_DATA 100&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; LENGTH_OF_DATA 1000&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; LENGTH_OF_INPUT_LINE 100&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;using &lt;/span&gt;&lt;span class="reservedWord"&gt;namespace &lt;/span&gt;std;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;Data [COUNT_OF_DATA][LENGTH_OF_DATA];&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;char &lt;/span&gt;Line [LENGTH_OF_INPUT_LINE];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getCountOfData( Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;order )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得資料數目&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( data[order][i] )&lt;br /&gt;        i ++;&lt;br /&gt;        &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;i + 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;cleanLine( Line line )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將line字串清空&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; LENGTH_OF_INPUT_LINE; i ++ )&lt;br /&gt;        line[i] = &lt;span class="quot"&gt;&amp;#039; &lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;translateData( Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;order, Line line )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;從一行字串轉為一筆資料&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    Line temp = {0};&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0, no = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;haveNumber = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;有無數字&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;haveNegative = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;有無負數&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; LENGTH_OF_INPUT_LINE; i ++ ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( line[i] EQ &lt;span class="quot"&gt;&amp;#039;-&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;出現負數的符號&lt;br /&gt;&lt;/span&gt;            haveNegative = true;&lt;br /&gt;            j = 0;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( line[i] &amp;lt;= &lt;span class="quot"&gt;&amp;#039;9&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; &amp;amp;&amp;amp; line[i] &amp;gt;= &lt;span class="quot"&gt;&amp;#039;0&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; ) {&lt;br /&gt;            temp[j++] = line[i];&lt;br /&gt;            haveNumber = true;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( haveNumber ) {&lt;br /&gt;               &lt;span class="reservedWord"&gt; if &lt;/span&gt;( haveNegative )&lt;br /&gt;                    data[order][no++] = - atoi( temp );&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;                    data[order][no++] = atoi( temp );&lt;br /&gt;                &lt;br /&gt;                cleanLine( temp ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;清空temp&lt;br /&gt;&lt;/span&gt;                haveNumber = haveNegative = false;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;inputData( Data data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;輸入資料，並回傳共輸入幾組資料&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 0, count = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;over = false;&lt;br /&gt;    &lt;br /&gt;    Line tempStr = {0};&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( !over ) {&lt;br /&gt;&lt;br /&gt;        cin.getline( tempStr, 100 );&lt;br /&gt;        translateData( data, count, tempStr );&lt;br /&gt;        &lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( tempStr[0] EQ &lt;span class="quot"&gt;&amp;#039;0&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; )&lt;br /&gt;            over = true;&lt;br /&gt;            &lt;br /&gt;        count ++;&lt;br /&gt;    }&lt;br /&gt;    over = false;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;count;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;printData( Data data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;印出資料&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; data[i][0]; i ++ ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0; data[i][j]; j ++ )&lt;br /&gt;            cout &amp;lt;&amp;lt; data[i][j] &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getBiggestSubArrary( Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;order, &lt;span class="reservedWord"&gt;int &lt;/span&gt;count, &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; no )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取count個的情況，回傳最大的連續加成，&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;並把開始數的位置寫入no&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;biggest = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 0, k = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;length = getCountOfData( data, order );&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; ( length - count ); i ++ ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0, k = i; j &amp;lt; count; j ++ )&lt;br /&gt;            temp += data[order][k++];&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( temp &amp;gt; biggest ) {&lt;br /&gt;            biggest = temp;&lt;br /&gt;            no = i;&lt;br /&gt;        }&lt;br /&gt;        temp = 0;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;biggest;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getBiggestArrary( Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;order, &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; biggestNo, &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; biggestLength )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;求得在任何情況下的連續數字相加最大值&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;biggestNo: 最大連續相加值的起始位置&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;biggestLength: 最大連續相加值的長度&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;length = getCountOfData( data, order );&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;temp = 0, no = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;biggestValue = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最大連續相加值&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 1; i &amp;lt;= length; i ++ ) {&lt;br /&gt;        temp = getBiggestSubArrary( data, order, i, no );&lt;br /&gt;        &lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( temp &amp;gt; biggestValue ) {&lt;br /&gt;            biggestValue = temp;&lt;br /&gt;            biggestNo = no;&lt;br /&gt;            biggestLength = i;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;biggestValue;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;printAnswer( Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;order, &lt;span class="reservedWord"&gt;int &lt;/span&gt;value, &lt;span class="reservedWord"&gt;int &lt;/span&gt;no, &lt;span class="reservedWord"&gt;int &lt;/span&gt;length )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;印出答案&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;最&lt;b&gt;&lt;/b&gt;大連續數字總和: &amp;quot;&lt;/span&gt;;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; length; i ++ ) {&lt;br /&gt;        cout &amp;lt;&amp;lt; data[order][no++];&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( i + 1 &amp;lt; length )&lt;br /&gt;            cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;+ &amp;quot;&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;= &amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;run( Data data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;執行主函式&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;no = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最大連續相加值的起始位置&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;length = 0; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;最大連續相加值的長度&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;order = inputData( data );&lt;br /&gt;    &lt;span class="note"&gt;//p&lt;b&gt;&lt;/B&gt;rintData( data );&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; i &amp;lt; order - 1; i ++ ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;int &lt;/span&gt;value = getBiggestArrary( data, i, no, length );&lt;br /&gt;&lt;br /&gt;        printAnswer( data, i, value, no, length );&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main()&lt;br /&gt;{&lt;br /&gt;    Data data = {0};&lt;br /&gt;&lt;br /&gt;    run( data );&lt;br /&gt;    &lt;br /&gt;    system( &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;AUSE&amp;quot;&lt;/span&gt; );&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;V. 水桶謎題&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;假設有兩個水桶及一個水池 (無限供應水)，兩個水桶的容量均為已知，但是都沒有刻度，所以你只能進行下列三種動作：&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;(1) Fill 將水桶的水裝滿&lt;/p&gt;&lt;p&gt;(2) Empty 將水桶的水倒光&lt;/p&gt;&lt;p&gt;(3) Pour 將其中一個水桶的水倒到另一個水桶 &lt;/p&gt;&lt;p&gt;其中，第三種動作僅有兩種可能，即第一個水桶的水須全部倒光、或是第二個水桶已裝滿便算結束。舉例說明，假設水桶A及水桶B都可容納8公升，若此時水桶A有5公升，水桶B有6公升，第一種動作可將水桶A裝滿，第二種動作可將水桶A倒光，第三種動作可將水桶A的水倒入水桶B，但僅可將水桶B裝滿到8公升，使得水桶A剩下3公升。&lt;/p&gt;&lt;p&gt;水桶謎題的目的在使水桶B達到某給定的水量 (公升)，如圖所示為範例，若水桶A的容量為3公升，水桶B的容量為5公升，目標水量為4公升，則可達到目標的順序如下 ：&lt;/p&gt;&lt;p&gt;Fill A&lt;/p&gt;&lt;p&gt;Pour A B&lt;/p&gt;&lt;p&gt;Fill A&lt;/p&gt;&lt;p&gt;Pour A B&lt;/p&gt;&lt;p&gt;Empty B&lt;/p&gt;&lt;p&gt;Pour A B&lt;/p&gt;&lt;p&gt;Fill A&lt;/p&gt;&lt;p&gt;Pour A B&lt;/p&gt;&lt;p&gt;Success&lt;/p&gt;&lt;p&gt;其中，Pour A B表示將水桶A倒水倒水桶B中。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TOhtaSqVIRI/AAAAAAAAUK8/zqFus816oAU/s1600-h/clip_image002%5B6%5D%5B4%5D.jpg"&gt;&lt;img title="clip_image002[6]" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="155" alt="clip_image002[6]" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TOhtbjRrw2I/AAAAAAAAULA/BUnhtQ4r8Ro/clip_image002%5B6%5D_thumb%5B2%5D.jpg?imgmax=800" width="430" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;水桶A 水桶B 目標 (水桶B)&lt;/p&gt;&lt;p&gt;注意：&lt;/p&gt;&lt;p&gt;1. 本題中你可以假設給定的謎題一定有解。&lt;/p&gt;&lt;p&gt;2. 水桶A與水桶B在剛開始時皆是空的。&lt;/p&gt;&lt;p&gt;● 本問題曾經出現在電影「終極警探3」中。&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;233&lt;br /&gt;234&lt;br /&gt;235&lt;br /&gt;236&lt;br /&gt;237&lt;br /&gt;238&lt;br /&gt;239&lt;br /&gt;240&lt;br /&gt;241&lt;br /&gt;242&lt;br /&gt;243&lt;br /&gt;244&lt;br /&gt;245&lt;br /&gt;246&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; "&gt;&lt;span class="note"&gt;/*&lt;br /&gt;&lt;br /&gt;輸入說明:&lt;br /&gt;每組有三個數字，第一個數字為水桶A的容量，第二個數字為水桶B的容量，&lt;br /&gt;第三個數字為目標容量，單位均為公升。輸入為0 0 0時則結束。&lt;br /&gt;&lt;br /&gt;輸出說明:&lt;br /&gt;列出達到目標的順序。&lt;br /&gt;&lt;br /&gt;輸入範例:&lt;br /&gt;5 7 3&lt;br /&gt;3 5 4&lt;br /&gt;0 0 0&lt;br /&gt;&lt;br /&gt;輸出範例:&lt;br /&gt;Fill A&lt;br /&gt;Pour A B&lt;br /&gt;Fill A&lt;br /&gt;Pour A B&lt;br /&gt;Empty B&lt;br /&gt;Pour A B&lt;br /&gt;Fill A&lt;br /&gt;Pour A B&lt;br /&gt;Success&lt;br /&gt;Fill A&lt;br /&gt;Pour A B&lt;br /&gt;Fill A&lt;br /&gt;Pour A B&lt;br /&gt;Empty B&lt;br /&gt;Pour A B&lt;br /&gt;Success&lt;br /&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; MAX_COUNT_OF_DATA 100 &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;可一次讀取幾筆題目&lt;br /&gt;&lt;/span&gt;&lt;span class="define"&gt;#define&lt;/span&gt; MAX_OF_TIMER 12 &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;遞迴取幾次（若題目解不出來可調高此參數！）&lt;br /&gt;&lt;/span&gt;&lt;span class="define"&gt;#define&lt;/span&gt; EQ ==&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;using &lt;/span&gt;&lt;span class="reservedWord"&gt;namespace &lt;/span&gt;std;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;struct &lt;/span&gt;data {&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;aMax;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;A最大容量&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;aNow;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;A目前容量&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;bMax;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;B最大容量&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;bNow;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;B目前容量&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;goal;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;B的目標容量&lt;br /&gt;&lt;/span&gt;}Data;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; { A, B };&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;start( &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace, Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;開始倒水行為&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;bool &lt;/span&gt;gSuccess = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;告知其他遞迴已經找到解法，可以結束執行了&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;string &lt;/span&gt;intToString( &lt;span class="reservedWord"&gt;int &lt;/span&gt;&amp;amp; i )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;int轉string（C的方法）&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;num = i;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;temp[100];&lt;br /&gt;&lt;br /&gt;    sprintf( temp, &lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt;d&amp;quot;&lt;/span&gt;, num);&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;string &lt;/span&gt;str = temp;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;string &lt;/span&gt;nameToString( &lt;span class="reservedWord"&gt;int &lt;/span&gt;name )&lt;br /&gt;&lt;span class="note"&gt;// 回傳&amp;quot;A&lt;b&gt;&lt;/b&gt;&amp;quot;或&amp;quot;B&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;name EQ A ? &lt;span class="quot"&gt;&amp;quot;A&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; : &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;fill( &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace, Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;name, &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;加滿&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;noNeedFill = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;解決會多寫的bug&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( name EQ A ) {&lt;br /&gt;        noNeedFill = data.aNow EQ data.aMax ?&lt;span class="reservedWord"&gt; true &lt;/span&gt;: false;&lt;br /&gt;        data.aNow = data.aMax;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;        noNeedFill = data.bNow EQ data.bMax ?&lt;span class="reservedWord"&gt; true &lt;/span&gt;: false;&lt;br /&gt;        data.bNow = data.bMax;&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    &lt;span class="reservedWord"&gt;string &lt;/span&gt;temp = nameToString( name ) + &lt;span class="quot"&gt;&amp;quot;加&lt;b&gt;&lt;/b&gt;滿\t&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.aNow ) + &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.bNow ) + &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !noNeedFill )&lt;br /&gt;        trace += temp;&lt;br /&gt;        &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !gSuccess )&lt;br /&gt;        start( trace, data, timer );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;empty( &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace, Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;name, &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;倒掉&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;noNeedEmpty = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;解決會多寫的bug&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( name EQ A ) {&lt;br /&gt;        noNeedEmpty = data.aNow EQ 0 ?&lt;span class="reservedWord"&gt; true &lt;/span&gt;: false;&lt;br /&gt;        data.aNow = 0;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;        noNeedEmpty = data.bNow EQ 0 ?&lt;span class="reservedWord"&gt; true &lt;/span&gt;: false;&lt;br /&gt;        data.bNow = 0;&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    &lt;span class="reservedWord"&gt;string &lt;/span&gt;temp = nameToString( name ) + &lt;span class="quot"&gt;&amp;quot;倒&lt;b&gt;&lt;/b&gt;光\t&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.aNow ) + &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.bNow ) + &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !noNeedEmpty )&lt;br /&gt;        trace += temp;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !gSuccess )&lt;br /&gt;        start( trace, data, timer );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;bool &lt;/span&gt;pour( &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace, Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;from, &lt;span class="reservedWord"&gt;int &lt;/span&gt;to, &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;from加到to(加滿或加到from沒水為止)&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( from EQ A &amp;amp;&amp;amp; data.aNow ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;A倒給B&lt;br /&gt;&lt;/span&gt;        &lt;span class="reservedWord"&gt;int &lt;/span&gt;tolerable = data.bMax - data.bNow; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目前B還能容納多少公升&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( tolerable &amp;gt; data.aMax ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;可容納的還比A目前水量多&lt;br /&gt;&lt;/span&gt;            data.bNow += data.aNow;&lt;br /&gt;            data.aNow = 0;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;A把B倒滿還會有剩&lt;br /&gt;&lt;/span&gt;            data.bNow = data.bMax;&lt;br /&gt;            data.aNow -= tolerable;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( from EQ B &amp;amp;&amp;amp; data.bNow ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;B倒給A&lt;br /&gt;&lt;/span&gt;        &lt;span class="reservedWord"&gt;int &lt;/span&gt;tolerable = data.aMax - data.aNow; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目前A還能容納多少公升&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( tolerable &amp;gt; data.bMax ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;可容納的還比B目前水量多&lt;br /&gt;&lt;/span&gt;            data.aNow += data.bNow;&lt;br /&gt;            data.bNow = 0;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;B把A倒滿還會有剩&lt;br /&gt;&lt;/span&gt;            data.aNow = data.aMax;&lt;br /&gt;            data.bNow -= tolerable;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;string &lt;/span&gt;temp = nameToString( from ) + &lt;span class="quot"&gt;&amp;quot;分&lt;b&gt;&lt;/b&gt;給&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  nameToString( to ) + &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;t&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.aNow ) + &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; +&lt;br /&gt;                  intToString( data.bNow ) + &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    trace += temp;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( data.bNow EQ data.goal ) {&lt;br /&gt;        cout &amp;lt;&amp;lt; trace;&lt;br /&gt;        &lt;br /&gt;        gSuccess = true; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;告知其他遞迴可以結束了 &lt;br /&gt;&lt;/span&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;true; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;達到指定水量&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;        start( trace, data, timer );&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;false;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;start( &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace, Data data, &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;開始所有可能的倒水行為&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( timer &amp;lt; MAX_OF_TIMER ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;計數器機制，預防無限遞迴&lt;br /&gt;&lt;/span&gt;        timer ++;&lt;br /&gt;        &lt;br /&gt;        fill( trace, data, A, timer );&lt;br /&gt;        empty( trace, data, A, timer );&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( pour( trace, data, A, B, timer ) )&lt;br /&gt;            cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;S&lt;b&gt;&lt;/b&gt;uccess !!\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        fill( trace, data, B, timer );&lt;br /&gt;        empty( trace, data, B, timer );&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( pour( trace, data, B, A, timer ) )&lt;br /&gt;            cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;S&lt;b&gt;&lt;/b&gt;uccess !!\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;printData( Data *data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;印出所有資料（檢查用）&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n-----------\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0; data[i].aMax; i ++ )&lt;br /&gt;        cout &amp;lt;&amp;lt; data[i].aMax &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;             &amp;lt;&amp;lt; data[i].bMax &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;             &amp;lt;&amp;lt; data[i].goal &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;    cout &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;-&lt;b&gt;&lt;/b&gt;----------\n&amp;quot;&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;run( Data *data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;執行主函式&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0;&lt;br /&gt;    &lt;span class="reservedWord"&gt;bool &lt;/span&gt;over = false;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( ! over ) {&lt;br /&gt;        cin &amp;gt;&amp;gt; data[i].aMax &amp;gt;&amp;gt; data[i].bMax &amp;gt;&amp;gt; data[i].goal;&lt;br /&gt;        &lt;br /&gt;        data[i].aNow = data[i].bNow = 0;&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !data[i].aMax &amp;amp;&amp;amp; !data[i].bMax &amp;amp;&amp;amp; !data[i].goal )&lt;br /&gt;            over = true;&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;            i ++;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="note"&gt;//p&lt;b&gt;&lt;/B&gt;rintData( data );&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( &lt;span class="reservedWord"&gt;int &lt;/span&gt;j = 0; j &amp;lt; i; j ++ ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;string &lt;/span&gt;trace = &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;int &lt;/span&gt;timer = 0;&lt;br /&gt;        &lt;br /&gt;        start( trace, data[j], timer );&lt;br /&gt;        gSuccess = false; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;重新跑一個新的題目&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main()&lt;br /&gt;{&lt;br /&gt;    Data *data = &lt;span class="reservedWord"&gt;new &lt;/span&gt;Data [MAX_COUNT_OF_DATA];&lt;br /&gt;    &lt;br /&gt;    run( data );&lt;br /&gt;    &lt;br /&gt;    system( &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;AUSE&amp;quot;&lt;/span&gt; );&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-192446369494690954?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/192446369494690954/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/11/blog-post_21.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/192446369494690954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/192446369494690954'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/11/blog-post_21.html' title='三支小程式'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_bi6B4jS4CJw/TOhtXZePehI/AAAAAAAAUKw/QpM7oH6j7k0/s72-c/clip_image002_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-7022821229053961667</id><published>2010-11-21T08:33:00.001+08:00</published><updated>2010-11-21T08:33:39.934+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>[轉貼]前置處理器的預設變數</title><content type='html'>&lt;p&gt;存放一些編譯時的訊息，挺有意思的。&lt;/p&gt;&lt;p&gt;轉貼自 &lt;a href="http://taichunmin.pixnet.net/blog/post/32540994"&gt;http://taichunmin.pixnet.net/blog/post/32540994&lt;/a&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; "&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;using &lt;/span&gt;&lt;span class="reservedWord"&gt;namespace &lt;/span&gt;std;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main()&lt;br /&gt;{&lt;br /&gt;    cout &amp;lt;&amp;lt; __LINE__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;這一行的行號&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __FILE__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;原始檔的檔名&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __DATE__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;編譯時的日期&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __TIME__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;編譯時的時間&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __cplusplus &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;可以使用C++函式&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __STDC__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;可以使用C函式&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __func__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;顯示現在所在的函式&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __FUNCTION__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;顯示現在所在的函式&lt;br /&gt;&lt;/span&gt;    cout &amp;lt;&amp;lt; __PRETTY_FUNCTION__ &amp;lt;&amp;lt; endl; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;顯示現在所在的函式宣告&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-7022821229053961667?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/7022821229053961667/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/11/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7022821229053961667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7022821229053961667'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/11/blog-post.html' title='[轉貼]前置處理器的預設變數'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-6493085270356294147</id><published>2010-11-13T19:19:00.001+08:00</published><updated>2010-11-13T19:19:34.569+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cartoon'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>The Secret of Kells (2009)</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TN5zYGYn55I/AAAAAAAAUKM/Wd1tR9jvbL0/s1600-h/SecretOfKel_cover_2%5B2%5D.jpg"&gt;&lt;img title="SecretOfKel_cover_2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="394" alt="SecretOfKel_cover_2" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TN5zZv41fCI/AAAAAAAAUKQ/sGiXjY_Dkp4/SecretOfKel_cover_2_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TN50IWvWguI/AAAAAAAAUKU/t06kITGyiGg/s1600-h/SecretOfKel_cover%5B3%5D.jpg"&gt;&lt;img title="SecretOfKel_cover" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="394" alt="SecretOfKel_cover" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TN50KTgrR_I/AAAAAAAAUKY/cRMGZ282Vhw/SecretOfKel_cover_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2D動畫與電影齊壽，電影發明當初，2D動畫這項技術便開始應用並商業化。這一百年來，我們看得到改進，但時至今日，該發揮的都發揮得差不多了，2D動畫還有哪些可能呢？ &lt;/p&gt;  &lt;p&gt;就在二零零九年，兩位愛爾蘭裔的動畫家Tomm Moore和Nora Twomey以一部名為《The Secret of Kells》的動畫作品，向世人宣稱，2D動畫在畫面上還有精進空間，而這，就是他們的精進成果；藉此，他們從靈魂深處發出吼聲：2D動畫不死！ &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;《The Secret of Kells》首先震撼到觀眾的，是它那精采得過份的畫面，讓人毫無招架之力。處處可見繁複雕飾與值得玩味的圖騰，過去一些在畫面上受人稱許的優質動畫，我們會說這一段製作得漂亮，那一段畫面的意境甚佳等等，但這部作品卻完全超越過去我們的經驗，它值得注意的畫面，需以「格」為計量單位，幾乎每一格都可視為一幅裝飾到位且設計感十足的畫作，引人逗留於前，久久不捨離去。 &lt;/p&gt;  &lt;p&gt;所謂Kells，指的是愛爾蘭國寶凱爾經，以下為維基百科的敘述： &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;凱爾經約在西元800年左右由蘇格蘭西部愛歐那島（Iona）上的僧侶凱爾特修士繪製。這部書由新約聖經四福音書組成，語言為拉丁語。這是一本有着華麗裝飾文字的聖經福音手抄本，每篇短文的開頭都有一幅插圖，總共有兩千幅。 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;由此可知，本片的製作團隊為了貼近凱爾經的精神，不惜花費大量物力與人力，以裝飾到極點的畫面來彰顯凱爾特修士與凱爾經的榮耀。 &lt;/p&gt;  &lt;p&gt;而除卻畫面之外，本片在劇情上表現中規中矩，比較難能得是，它忠實地呈現了當時西歐飽受維京海盜欺擾的社會景象。日耳曼人在西元第三、四世紀，手持著他們的武器，侵略羅馬，使當時的文明重心毀於一旦。當時，他們是以掠奪者的身分浩浩蕩蕩來到這塊富饒之地，不過所謂風水輪流轉，西元第八世紀以降，他們卻轉而成為被掠奪者，被更兇更悍的維京人所欺凌。 &lt;/p&gt;  &lt;p&gt;史學家說歐洲在第六、七世紀是真正的黑暗時代，後面隨之而來得則是混亂時代，在這個時代，日耳曼部落皈依了基督教，並且承認羅馬主教為教皇，為全世界的精神領袖。但維京人也在這時候闖入了他們的生活圈，使得日子更加艱難，動盪，是這時代的最佳形容詞。那是什麼樣的景況呢？說個例子，在第十世紀初葉，有一個名字叫羅洛（Rollo）的維京海盜，他一再攻擊法蘭西的沿海各地，法國國王無法抵抗，只好與他談判——如果他們答應不再擾亂其他地區，國王願意把諾曼第（Normandy）省送給他們。羅洛接受這筆交易，於是搖身一變，成為歷史上著名的諾曼第公爵。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TN50M5zgjgI/AAAAAAAAUKc/NUz-0ZiC2Vo/s1600-h/SecretOfKel-0002%5B2%5D.jpg"&gt;&lt;img title="SecretOfKel-0002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="159" alt="SecretOfKel-0002" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TN50N4mAvZI/AAAAAAAAUKg/cQHemxDBrHE/SecretOfKel-0002_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TN50QG5uORI/AAAAAAAAUKk/YeOP62z95Nw/s1600-h/brendan-et-le-secret-de-kells_2%5B2%5D.jpg"&gt;&lt;img title="brendan-et-le-secret-de-kells_2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="159" alt="brendan-et-le-secret-de-kells_2" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TN50Q1EiGbI/AAAAAAAAUKo/X31ATrLEoxs/brendan-et-le-secret-de-kells_2_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;而本片的故事背景，就是在第八世紀到第九世紀之間的愛爾蘭臨海一帶。可想而知，維京海盜必將這一帶視為「補貨」的絕佳地點，哪天缺了什麼，就來這邊大撈個一筆。而人民呢，他們生活在恐懼之中。不僅是對神的恐懼，也深深畏懼著這些強壯蠻悍的鄰居。他們最需要的，無疑是教士與武士。 &lt;/p&gt;  &lt;p&gt;一般人對於中世紀的宗教信仰和武士封建制度總有一些偏見，認為這些都是壓榨人民的機關，人民身不由己，是強制被眷養的。但實際上並非如此，中世紀的中早期，宗教和封建對於社會有很大的貢獻，它們有助於社會制度的重建與維護。中世紀的人民，絕對不能類比為希臘時代的市民，希臘市民有文化，有教養，但中世紀的人民個個都是徹底的文盲，甚至在十三世紀之前，會讀書寫字的人都被視為男子氣概。他們基本上都是野蠻人，與入侵前相比，沒有差別多少，只是後來他們受基督教管束，在一些方面不至於太過放肆，但內涵基本是一致的。 &lt;/p&gt;  &lt;p&gt;這些人民他們什麼都不懂，所以他們需要武士來武裝他們、保護他們。封建制度時期的武士，是當時的文官、法官、警察和工頭，與四千年前尼羅河流域的貴族所要負責的事情一樣多。而教士，也就是當時社會上唯一懂得讀書寫字的一群智識份子，他們便擔任起輔助武士的責任，幫忙武士處理一些更細膩、更需頭腦的事務。 &lt;/p&gt;  &lt;p&gt;而在這部《The Secret of Kells》中，也忠實呈現如是景象。因為過於邊境，已達武士領土未及之處，於是我們看到教士親自領導著人民築起防禦工程。這位教士比較特別，他是徹徹底底的實務派，他信神，但也相信工程的力量，可以讓他們免於北方蠻族的侵略。而當時年紀尚小的凱爾特，雖受教士教養，但卻反而傾心於經卷的繪製。他一樣信神，但相較於工程，他更相信經卷可以讓他們受神的庇護，免於災難人禍。這是兩種截然不同的價值觀，我們未曾生活在那個時代，不能體會當時人民的心境，所以很難去判定孰對孰錯，影片後來也沒有給一個明確的答案，彷彿要我們在絢麗難以逼視的畫面中去參透其中奧秘一般。 &lt;/p&gt;  &lt;p&gt;對於本片，有太多太多感觸，但能歸納出來下筆的，卻少得可憐。或許，那種是一種純然的、近似於宗教體驗般的感動。它震撼觀眾的視覺，進而刺激觀眾進入一種飄然境地，那是美的王國、美的聖域，只要你信奉美學，那麼你必然期盼有朝一日前往該地，去尋求那隱誨、卻又隱隱閃現奪目光芒的最終答案。 &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-6493085270356294147?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/6493085270356294147/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/11/secret-of-kells-2009.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6493085270356294147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6493085270356294147'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/11/secret-of-kells-2009.html' title='The Secret of Kells (2009)'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_bi6B4jS4CJw/TN5zZv41fCI/AAAAAAAAUKQ/sGiXjY_Dkp4/s72-c/SecretOfKel_cover_2_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-7696509918635595577</id><published>2010-10-24T21:36:00.005+08:00</published><updated>2010-11-13T19:19:13.125+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Akiyuki Shinbo'/><category scheme='http://www.blogger.com/atom/ns#' term='anime'/><title type='text'>《Soredemo Machi wa Mawatteiru》的影像風格</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1Gh9ru4I/AAAAAAAAUDE/50PavmJAlBA/s1600-h/shot0053%5B3%5D.jpg"&gt;&lt;img title="shot0053" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="329" alt="shot0053" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1HsSIH9I/AAAAAAAAUDI/AIMtgOS0JUY/shot0053_thumb%5B1%5D.jpg?imgmax=800" width="579" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;這部作品播出前便已引起我的注意，石黑正數的原作風格樸實清新，台詞逗趣且具個人特色，其中可以欣賞到很多精采的對話交鋒，有如雙口相聲一般，簡而言之，它是一部清新小品、一部優質佳作。現在問題是，這些亮點能否如法炮製，在螢幕上依然展現風采？很多作品做不到，但也有很多作品不僅做到了，還超越原著，更上一層樓。很多因素決定一部作品的成敗，不過在這邊，我只討論擔任全軍總指揮的那位要角——是的，正是導演。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;翻開《&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%A5%B3%E5%83%95%E5%92%96%E5%95%A1%E5%BB%B3_(%E6%BC%AB%E7%95%AB)"&gt;女僕咖啡廳&lt;/a&gt;》的STAFF表，馬上尋著本次關鍵字。唔，總監督新房昭之，副監督龍輪直征。龍輪直征，角色定位與大沼心差不多，都是隸屬新房昭之底下的影武者，忠實地、默默地完成任務。雖然有人說總監督實際上不干涉影片製作工作，但以下為了方便，還是以新房昭之作為主要的討論對象，或許有些人會把新房昭之視為『新房昭之+大沼心+龍輪直征』的集成詞彙，但我個人仍較傾向掛名主義，也就是監督掛誰的名字就討論誰，簡單、明瞭，不會有太多複雜的情況發生。&lt;/p&gt;&lt;p&gt;所以我們直接提出簡化後的問題：新房昭之適不適合導演《女僕咖啡廳》呢？&lt;/p&gt;&lt;p&gt;我在看過前三集之後，心裏大致有底，不過還是慢慢來，先討論新房昭之在此之前的幾部近期作品。《&lt;a href="http://zh.wikipedia.org/wiki/%E7%91%AA%E8%8E%89%E4%BA%9E%E7%8B%82%E7%86%B1"&gt;瑪麗亞狂熱&lt;/a&gt;》，撇開討喜設定和一些搞笑橋段，其餘實在不怎麼樣，風格被隱藏地徹底，要不是片頭稍微還有點味道，說這是新房昭之所導，恐怕沒人會信；《&lt;a href="http://zh.wikipedia.org/wiki/%E7%B5%95%E6%9C%9B%E5%85%88%E7%94%9F"&gt;懺・絕望先生&lt;/a&gt;》，相比於大鳴大放、大玩特玩的《&lt;a href="http://zh.wikipedia.org/wiki/%E7%B5%95%E6%9C%9B%E5%85%88%E7%94%9F"&gt;俗・絕望先生&lt;/a&gt;》，這最終集雖然中規中矩，但難免讓人感到有些失望；《&lt;a href="http://zh.wikipedia.org/wiki/%E5%8C%96%E7%89%A9%E8%AA%9E"&gt;化物語&lt;/a&gt;》，新房尬西尾，蹦出新滋味，或許是新房昭之最受歡迎的一部作品，但我們只談影像風格的話，那剩下也多是老調重彈，沒什麼比較讓人印象深刻的地方；《&lt;a href="http://zh.wikipedia.org/zh-tw/荒川爆笑團"&gt;荒川爆笑團&lt;/a&gt;》，新房昭之以往的笑料偏冷，但本片卻以強力吐槽方式營造效果，比過去作品都來得爆笑許多，只是風格隱晦，除了明顯地怪異片頭外，其餘都顯正常，就我看來，這是最不新房昭之的新房昭之片子了。至於其他如《&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%A4%8F%E6%97%A5%E9%A2%A8%E6%9A%B4"&gt;夏日風暴&lt;/a&gt;》、《&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%90%B8%E8%A1%80%E9%AC%BC%E5%90%8C%E7%9B%9F"&gt;吸血鬼同盟&lt;/a&gt;》和《&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%90%91%E9%99%BD%E7%B4%A0%E6%8F%8F%C3%97%E2%98%86%E2%98%86%E2%98%86"&gt;向陽素描&lt;/a&gt;》因為沒看或只看片段，所以就不多提了。&lt;/p&gt;&lt;p&gt;而《女僕咖啡廳》的影像，不能說貧乏，但也談不上豐富，一如往昔，片頭和片尾都是亮點，而一些光影變化、鏡子反射和特殊視角等等所謂新房風格，都如實保留下來。不過依我們對新房昭之一貫的高標準，最高也只能打上勉強及格分數，不能再多了。畢竟它與《&lt;a href="http://zh.wikipedia.org/wiki/%E5%AC%89%E7%9A%AE%E7%AC%91%E5%9C%92"&gt;嬉皮笑園&lt;/a&gt;》和《&lt;a href="http://zh.wikipedia.org/wiki/%E7%B5%95%E6%9C%9B%E5%85%88%E7%94%9F"&gt;俗・絕望先生&lt;/a&gt;》等至高作之間的距離，並非一蹴可幾。&lt;/p&gt;&lt;p&gt;而若針對內容，新房昭之擅長改編吐槽類作品，如《絕望先生》和《荒川爆笑團》，但對於向陽素描這類清新小品，他也有自己的一套演繹方式，但遇上《女僕咖啡廳》這樣有些類似校園漫畫大王的作品，新房昭之似乎就有點伸展不開，綁手綁腳地，不敢太過放肆，避免讓原味通盤變調，但太過小心，卻又不容易發揮原著的特有幽默，所以變得有點不上不下的感覺。&lt;/p&gt;&lt;p&gt;在我看來，《女僕咖啡廳》最適合讓大地丙太郎或錦織博來導演，甚至交由笠井賢一主掌鏡頭，都比新房昭之來得適切。&lt;/p&gt;&lt;p&gt;至此，已經有了一個果斷的結論，雖然一點都不嚴謹，算了，這篇本來就是隨筆性質，想寫哪就寫到哪。再說，新房昭之這樣爭議性的人物，多點不同觀點，不管筆鋒帶理性或情緒，其實都挺有意思的。&lt;/p&gt;&lt;p&gt;就說到這邊，之後就不多廢話，還是來看看裏頭有哪些值得一顧的畫面吧。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;鏡子&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1InLO9WI/AAAAAAAAUDM/DAmEqmNUM2A/s1600-h/shot0010%5B2%5D.jpg"&gt;&lt;img title="shot0010" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0010" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1JkWujII/AAAAAAAAUDQ/JHUkrKxpzes/shot0010_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1KlEa8oI/AAAAAAAAUDU/7J0LsB7Ot4A/s1600-h/shot0068%5B2%5D.jpg"&gt;&lt;img title="shot0068" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0068" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1LTzNlHI/AAAAAAAAUDY/rZi6AojVurc/shot0068_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1NSGxFyI/AAAAAAAAUDc/cTUxDSqaK9A/s1600-h/shot0093%5B2%5D.jpg"&gt;&lt;img title="shot0093" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0093" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1N4lAjcI/AAAAAAAAUDg/eleh31O6LFA/shot0093_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1OjaaljI/AAAAAAAAUDk/-Uertf8l9n0/s1600-h/shot0094%5B2%5D.jpg"&gt;&lt;img title="shot0094" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0094" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1PNWDg5I/AAAAAAAAUDo/Ro1W_MFD89Y/shot0094_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1QGp0jGI/AAAAAAAAUDs/wDHOILKwVKM/s1600-h/shot0114%5B2%5D.jpg"&gt;&lt;img title="shot0114" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0114" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1Q4KIZdI/AAAAAAAAUDw/dBmbbweQ0Uk/shot0114_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1SHJVkCI/AAAAAAAAUD0/aGqqM5ksVss/s1600-h/shot0117%5B2%5D.jpg"&gt;&lt;img title="shot0117" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0117" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1SmT9jRI/AAAAAAAAUD4/Tb58uadpC5M/shot0117_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1TK87V_I/AAAAAAAAUD8/hE4jSOvyYAI/s1600-h/shot0066%5B2%5D.jpg"&gt;&lt;img title="shot0066" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0066" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1T_0wxDI/AAAAAAAAUEA/68PzZOH5Mgs/shot0066_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1Ullw3FI/AAAAAAAAUEE/26vDFjVxxE0/s1600-h/shot0126%5B2%5D.jpg"&gt;&lt;img title="shot0126" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0126" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1Vb1-I7I/AAAAAAAAUEI/56RBynE20x4/shot0126_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1WPxMHiI/AAAAAAAAUEM/_53ajJ4--7I/s1600-h/shot0044%5B2%5D.jpg"&gt;&lt;img title="shot0044" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0044" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1Wsl-0XI/AAAAAAAAUEQ/pm3JykuHNYg/shot0044_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1XcEOiZI/AAAAAAAAUEU/MbI7UhQpyTo/s1600-h/shot0056%5B8%5D.jpg"&gt;&lt;img title="shot0056" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0056" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1YCVL8NI/AAAAAAAAUEY/BlBS2uWpu8U/shot0056_thumb%5B2%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;新房昭之著迷於間接影像已經不是什麼秘密了，本作一樣保留這個特色。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;透明&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1YkMgOAI/AAAAAAAAUEc/yHQ73jvpqGY/s1600-h/shot0046%5B2%5D.jpg"&gt;&lt;img title="shot0046" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0046" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1ZaWk1JI/AAAAAAAAUEg/9jpemQlGIBo/shot0046_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1aRzHEQI/AAAAAAAAUEk/ZPc32rj7mQA/s1600-h/shot0014%5B2%5D.jpg"&gt;&lt;img title="shot0014" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0014" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1bODdFzI/AAAAAAAAUEo/Yjrp1PhJleg/shot0014_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;隔著不是那麼透明的玻璃窗看向外面，所見的世界大不同了。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;明暗&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1cXYHwPI/AAAAAAAAUEs/ECaGSHsFGtg/s1600-h/shot0052%5B2%5D.jpg"&gt;&lt;img title="shot0052" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0052" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1czN2GrI/AAAAAAAAUEw/jR4NzHcS-ls/shot0052_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1diff6lI/AAAAAAAAUE0/qjYVOTK6r5o/s1600-h/shot0048%5B2%5D.jpg"&gt;&lt;img title="shot0048" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0048" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1eEE15NI/AAAAAAAAUE4/cWvuKGDr5yY/shot0048_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1fYUp2LI/AAAAAAAAUE8/ejz3XJb1H1A/s1600-h/shot0049%5B2%5D.jpg"&gt;&lt;img title="shot0049" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0049" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1gKIR8lI/AAAAAAAAUFA/WJf6Td0M-vE/shot0049_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1g60k1xI/AAAAAAAAUFE/KAAbTbNYlPg/s1600-h/shot0050%5B2%5D.jpg"&gt;&lt;img title="shot0050" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0050" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1hU74enI/AAAAAAAAUFI/Dny6dfpJnuI/shot0050_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;有點類似燈塔上一邊旋轉、一邊鳴叫的火光，我原本以為這裡是以陽光照射進來的角度來暗示時間，但我錯了，錯得離譜。因為我忘了在新房昭之的作品裡，光影非物理性質，乃是心理的一種投射。有時候是劇中人物的心理；有時候，只是導演自己的心理，沒錯，就這麼隨性。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;黑白&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1iOQQixI/AAAAAAAAUFM/sk66wXXJONs/s1600-h/shot0037%5B2%5D.jpg"&gt;&lt;img title="shot0037" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0037" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1isGeQEI/AAAAAAAAUFQ/jNxN4z1i4Jc/shot0037_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1jc2t-uI/AAAAAAAAUFU/jAVr2pgQANg/s1600-h/shot0038%5B2%5D.jpg"&gt;&lt;img title="shot0038" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0038" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1j3JkcUI/AAAAAAAAUFY/YsBdYAX8ZvA/shot0038_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1ktbyR-I/AAAAAAAAUFc/xCyOrN7ehy8/s1600-h/shot0045%5B5%5D.jpg"&gt;&lt;img title="shot0045" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0045" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1lYFXfeI/AAAAAAAAUFg/XWjzls4r_Aw/shot0045_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1mrtoXfI/AAAAAAAAUFk/L81zCLea7Gc/s1600-h/shot0046%5B8%5D.jpg"&gt;&lt;img title="shot0046" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0046" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1nOzHvyI/AAAAAAAAUFo/HPL99oqq8lQ/shot0046_thumb%5B2%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1oouiQXI/AAAAAAAAUFs/n7aiuK4GlNw/s1600-h/shot0057%5B2%5D.jpg"&gt;&lt;img title="shot0057" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0057" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1pEc00nI/AAAAAAAAUFw/Dhd_P-mQK6k/shot0057_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1p87BJAI/AAAAAAAAUF0/IkTiB60yUjw/s1600-h/shot0060%5B2%5D.jpg"&gt;&lt;img title="shot0060" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0060" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1qS50jyI/AAAAAAAAUF4/zXYyRp4D_o8/shot0060_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;絕望先生經典的左顧右盼再現，哈哈。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;眼睛&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1q5i-kUI/AAAAAAAAUF8/ngCIhgCh0JA/s1600-h/shot0002%5B2%5D.jpg"&gt;&lt;img title="shot0002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0002" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1rroj6EI/AAAAAAAAUGA/37Htq74fJFo/shot0002_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1sBYZKbI/AAAAAAAAUGE/BPRrnfhu1bM/s1600-h/shot0075%5B2%5D.jpg"&gt;&lt;img title="shot0075" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0075" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1s-qzL0I/AAAAAAAAUGI/Y67Ksp1Ur9A/shot0075_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1tVIuPfI/AAAAAAAAUGM/Qmy72JMnhy4/s1600-h/shot0003%5B2%5D.jpg"&gt;&lt;img title="shot0003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0003" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1t14uyDI/AAAAAAAAUGQ/0mPIP5uJiGY/shot0003_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1uWtHoMI/AAAAAAAAUGU/Rd5Fbrq6Sok/s1600-h/shot0004%5B2%5D.jpg"&gt;&lt;img title="shot0004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0004" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1vP8SX2I/AAAAAAAAUGY/T1dwFBTZxbE/shot0004_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ1v66au4I/AAAAAAAAUGc/nDcMvzMGAC8/s1600-h/shot0073%5B2%5D.jpg"&gt;&lt;img title="shot0073" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0073" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1w8ED9gI/AAAAAAAAUGg/f_xnwkzrldk/shot0073_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1xiOJU6I/AAAAAAAAUGk/jVV8xpJWGcI/s1600-h/shot0074%5B5%5D.jpg"&gt;&lt;img title="shot0074" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0074" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1yO8SWfI/AAAAAAAAUGo/On1MDfdo_QY/shot0074_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;第三話主題是眼睛，所以多了一些這樣的鏡頭，是切題沒錯，但同時也讓人聯想起過去《&lt;a href="http://zh.wikipedia.org/zh-tw/%E6%9F%AF%E5%A1%9E%E7%89%B9%E7%9A%84%E8%82%96%E5%83%8F"&gt;柯塞特的肖像&lt;/a&gt;》對目珠的強調。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;隱身&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ1ywENyUI/AAAAAAAAUGs/jrwnOkUJB3Y/s1600-h/shot0055%5B2%5D.jpg"&gt;&lt;img title="shot0055" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0055" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ1zUYWoTI/AAAAAAAAUGw/YuF1SVFu68Q/shot0055_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ10IkpKUI/AAAAAAAAUG0/7yvp4-yw1rI/s1600-h/shot0056%5B2%5D.jpg"&gt;&lt;img title="shot0056" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0056" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ10ybjzHI/AAAAAAAAUG4/P9AxQbfm7wA/shot0056_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ11X2QuOI/AAAAAAAAUG8/M2ewctc2FrA/s1600-h/shot0084%5B2%5D.jpg"&gt;&lt;img title="shot0084" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0084" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ12M45HII/AAAAAAAAUHA/jKNOqbrNA20/shot0084_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ124T6coI/AAAAAAAAUHE/kwe78vDqvMw/s1600-h/shot0097%5B2%5D.jpg"&gt;&lt;img title="shot0097" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0097" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ14NPLNRI/AAAAAAAAUHI/pr9ExrbxwBU/shot0097_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;班上同學到哪去了？又是新房昭之的慣用伎倆，將非主要角色忽略，以往《嬉皮笑園》和《絕望先生》等作都出現過類似的鏡頭，在我看來，這已經是新房昭之的一種招牌了，其他導演怕被指稱偷懶，巨細靡遺地描繪連一句台詞也沒有的角色；而新房昭之卻反其道而行，將偷懶化為風格，在新房昭之前，大概也只有大地丙太郎和庵野秀明嘗試這麼幹過，但只有新房昭之勇敢把此道發揚光大，成為一門顯學。有些人對此不屑，甭管他們了，他們可能一輩子都無法理解多樣性對於一個創作平台而言，是多麼重要的事。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;他物&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ14v2ixWI/AAAAAAAAUHM/v_KFHoXfSj4/s1600-h/shot0045%5B2%5D.jpg"&gt;&lt;img title="shot0045" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0045" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ15H4nOBI/AAAAAAAAUHQ/oCkIrzqnQ74/shot0045_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ153EGfsI/AAAAAAAAUHU/8d5h_ZbgtsY/s1600-h/shot0077%5B2%5D.jpg"&gt;&lt;img title="shot0077" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0077" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ163smgkI/AAAAAAAAUHY/zSClO7n3JNg/shot0077_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ17Zhk7lI/AAAAAAAAUHc/PhRMW4z0wWs/s1600-h/shot0091%5B2%5D.jpg"&gt;&lt;img title="shot0091" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0091" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ18hq_-GI/AAAAAAAAUHg/0RvhNZ4LRx8/shot0091_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ19KKXHmI/AAAAAAAAUHk/ABRilmcrnnI/s1600-h/shot0025%5B2%5D.jpg"&gt;&lt;img title="shot0025" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0025" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ19-CjdLI/AAAAAAAAUHo/MmgtvhOfe_M/shot0025_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;原著中長得像貍貓的家犬，充當吉祥物倒也合適。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;裝飾&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1-sdAe4I/AAAAAAAAUHs/skmPMa_1eUw/s1600-h/shot0042%5B2%5D.jpg"&gt;&lt;img title="shot0042" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0042" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1_f7BnZI/AAAAAAAAUHw/BAAzG0QIjtU/shot0042_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2A3zYJOI/AAAAAAAAUH0/aoRG_YEn3_Y/s1600-h/shot0022%5B2%5D.jpg"&gt;&lt;img title="shot0022" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0022" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2BSppTXI/AAAAAAAAUH4/CrXcpI_oOH8/shot0022_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;猶如相框般的裝飾效果，在《嬉皮笑園》中屢屢可見。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;影子&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2B6WqWFI/AAAAAAAAUH8/y9Ads0MDmsA/s1600-h/shot0032%5B2%5D.jpg"&gt;&lt;img title="shot0032" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0032" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2Cc85vNI/AAAAAAAAUIA/NGL7MfReEAY/shot0032_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2DIAFD5I/AAAAAAAAUIE/X2InEsw7rrc/s1600-h/shot0020%5B2%5D.jpg"&gt;&lt;img title="shot0020" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0020" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2DwFq-HI/AAAAAAAAUII/LPgDsZz1vM8/shot0020_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2Et42F7I/AAAAAAAAUIM/qCa3nrSDv-4/s1600-h/shot0048%5B5%5D.jpg"&gt;&lt;img title="shot0048" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0048" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2FJM4EoI/AAAAAAAAUIQ/pZrsR7yHMQs/shot0048_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2FroIcVI/AAAAAAAAUIU/bJel_bZ4CWk/s1600-h/shot0086%5B2%5D.jpg"&gt;&lt;img title="shot0086" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0086" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2GIqmE3I/AAAAAAAAUIY/EFdH6ql-Kj0/shot0086_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;沒什麼稀奇，但在新房昭之作品裡，沒什麼稀奇一樣也是可以拿來認真討論，這就是風格化與作者論的力量。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;招牌&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2GzQdgfI/AAAAAAAAUIc/598ilSLLSDY/s1600-h/shot0024%5B2%5D.jpg"&gt;&lt;img title="shot0024" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0024" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2HUNSB9I/AAAAAAAAUIg/ez9lex2fI1M/shot0024_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2JC8JSlI/AAAAAAAAUIk/HE418hZcGr0/s1600-h/%5BSpeed%5D%5BSoredemo_Machi_wa_Mawatteiru%5D%5B03%5D%5BBIG5%5D%5B1024x576%5D%5B18-01-38%5D%5B2%5D.jpg"&gt;&lt;img title="[Speed][Soredemo_Machi_wa_Mawatteiru][03][BIG5][1024x576][18-01-38]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="[Speed][Soredemo_Machi_wa_Mawatteiru][03][BIG5][1024x576][18-01-38]" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2J2FuHGI/AAAAAAAAUIo/fZ6bS1nHtIU/%5BSpeed%5D%5BSoredemo_Machi_wa_Mawatteiru%5D%5B03%5D%5BBIG5%5D%5B1024x576%5D%5B18-01-38%5D_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;一般喜歡用走馬燈來快速瀏覽過人的一生，而這邊將頭銜、經歷變為招牌，霓虹閃爍在飄雪的夜裡，顯出幾分味道。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;腳底&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2Kiam7wI/AAAAAAAAUIs/060BGDAAfa8/s1600-h/shot0098%5B2%5D.jpg"&gt;&lt;img title="shot0098" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0098" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2LPumc9I/AAAAAAAAUIw/Ppp73N10rPY/shot0098_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2L4BvQOI/AAAAAAAAUI0/xLbvZhgifYo/s1600-h/shot0074%5B2%5D.jpg"&gt;&lt;img title="shot0074" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0074" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2MSWqzSI/AAAAAAAAUI4/PMd2ctphyVw/shot0074_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2ND6_lLI/AAAAAAAAUI8/fpT58Yp2dzY/s1600-h/shot0001_2%5B2%5D.jpg"&gt;&lt;img title="shot0001_2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0001_2" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2NoAskDI/AAAAAAAAUJA/eZ5bRjiT92M/shot0001_2_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2OKgGyMI/AAAAAAAAUJE/89IH-M-kFow/s1600-h/shot0051%5B2%5D.jpg"&gt;&lt;img title="shot0051" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0051" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2O-W0uDI/AAAAAAAAUJI/GuhYthPj2ns/shot0051_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;想像一下，整個攝影棚的地板都由透明薄玻璃組成，而一些攝影機就藏於底下，由下往上拍，試圖捕捉某些平時難以呈現的鏡頭。這大概是本片的唯一創意。為何會想到這個？別忘了本片女僕的裙子長度過膝，對於新房昭之這類熱愛殺必死的老男人而言，簡直難以忍受，所以開創出以上鏡頭，也是想當然耳的事。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;廣角&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2PnKQ-bI/AAAAAAAAUJM/GKupnf2-bhk/s1600-h/shot0017%5B2%5D.jpg"&gt;&lt;img title="shot0017" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0017" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2QEHwEFI/AAAAAAAAUJQ/G_tVozdof94/shot0017_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2REJrNZI/AAAAAAAAUJU/hCnCLCj4Sm0/s1600-h/shot0056%5B5%5D.jpg"&gt;&lt;img title="shot0056" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0056" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2R6-XMcI/AAAAAAAAUJY/88hkuwy-Atw/shot0056_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2Sm0KtRI/AAAAAAAAUJc/F6dYHCqrDLM/s1600-h/shot0046%5B5%5D.jpg"&gt;&lt;img title="shot0046" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0046" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2TBi8AaI/AAAAAAAAUJg/1VlZ-j9rRKw/shot0046_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2UH8P-dI/AAAAAAAAUJk/n60BS64Tmxs/s1600-h/shot0047%5B2%5D.jpg"&gt;&lt;img title="shot0047" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0047" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2U3KAmfI/AAAAAAAAUJo/rMO3hcRa5EY/shot0047_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;並不是特別能讓人著迷的鏡頭，不過還是可以提提。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;畫風&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2Vb4hPgI/AAAAAAAAUJs/ywT83d6nH94/s1600-h/shot0108%5B8%5D.jpg"&gt;&lt;img title="shot0108" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0108" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2WAaWLSI/AAAAAAAAUJw/OlWcM2C01P0/shot0108_thumb%5B6%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TMQ2XLN05nI/AAAAAAAAUJ0/KpbKoN9WZHc/s1600-h/shot0136%5B2%5D.jpg"&gt;&lt;img title="shot0136" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="shot0136" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2Xz_O4aI/AAAAAAAAUJ4/ZsLhK9keAjI/shot0136_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TMQ2ZHcBUwI/AAAAAAAAUJ8/z1bdDoEOkLE/s1600-h/shot0102%5B5%5D.jpg"&gt;&lt;img title="shot0102" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0102" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TMQ2Z21ErfI/AAAAAAAAUKA/yO6RlwIIXiY/shot0102_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2bLGyHII/AAAAAAAAUKE/zaG9QcyR3D8/s1600-h/shot0088%5B2%5D.jpg"&gt;&lt;img title="shot0088" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="shot0088" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ2bjeEStI/AAAAAAAAUKI/dl7ClexQAt0/shot0088_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;畫風猝改的圖像也是新房昭之的招牌之一，尤其片尾最是常見。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-7696509918635595577?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/7696509918635595577/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/10/soredemo-machi-wa-mawatteiru.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7696509918635595577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7696509918635595577'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/10/soredemo-machi-wa-mawatteiru.html' title='《Soredemo Machi wa Mawatteiru》的影像風格'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TMQ1HsSIH9I/AAAAAAAAUDI/AIMtgOS0JUY/s72-c/shot0053_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-5375688081752604085</id><published>2010-09-13T08:11:00.007+08:00</published><updated>2010-10-10T09:12:39.891+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>[圖記]線西圖書館</title><content type='html'>&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEQ7suHmyI/AAAAAAAAUCQ/S5xfZrUAoJo/507_p01.jpg" align="left" /&gt; 一眼望去，滿街的遊記、食記，那麼抽個空寫寫圖記，也不是什麼稀奇的事吧。&lt;/p&gt;&lt;p&gt;至於為何會先選擇線西這塊地方，完全是個巧合，那天只是因為久沒看海，心裏癢得不得不驅車前往傳說中距離彰化市最近的海邊景點——肉粽角，說穿了就是彰濱工業區的沿岸地區。在那裡我看到海，也看到巍峨的風車，而海風拂在臉上的感覺，依然是那樣痛快，哈哈。心情挺好，於是想說既然都已經來到這裡，時間也還早，乾脆去逛逛他們的圖書館好了。&lt;/p&gt;&lt;a title="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEQ7suHmyI/AAAAAAAAUCQ/S5xfZrUAoJo/507_p01.jpg" href="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEQ7suHmyI/AAAAAAAAUCQ/S5xfZrUAoJo/507_p01.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;買飲料的同時也問了年輕俏麗（？）的老板娘，她親切地給我指點方向，又說又畫，十分詳細。我道謝後順著方向前進，沒多久便順利到達目的地。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TLEEMOcgP9I/AAAAAAAAT_s/wczZYBPalTo/s1600-h/%C3%B8G0222%5B2%5D.jpg"&gt;&lt;img title="相片0222" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0222" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEM0iyyQI/AAAAAAAAT_w/620DEPboa_Q/%C3%B8G0222_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEObuOLnI/AAAAAAAAT_0/JE7c67YjzjY/s1600-h/%C3%B8G0227%5B2%5D.jpg"&gt;&lt;img title="相片0227" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0227" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TLEEPJIIB2I/AAAAAAAAT_4/SOkQM1HulKM/%C3%B8G0227_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;恩，外觀設計不錯，但不怎麼大，與對面氣派的鄉公所一比，更是相形見絀。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEQRVaXbI/AAAAAAAAT_8/0bjfIRQHFnE/s1600-h/%C3%B8G0223%5B2%5D.jpg"&gt;&lt;img title="相片0223" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0223" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEERfX0YuI/AAAAAAAAUAA/kdl_-o6Gfz0/%C3%B8G0223_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEESmC8XHI/AAAAAAAAUAE/-KAF3pDvfO4/s1600-h/%C3%B8G0225%5B2%5D.jpg"&gt;&lt;img title="相片0225" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0225" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEETL_JLJI/AAAAAAAAUAI/bMkgWhZgdCo/%C3%B8G0225_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;只有幾個公務員和替代役辦公的地方，蓋得這麼富麗堂皇；反觀全鄉人民的精神依託所在，卻走小而美路線，完全不符合比例原則。這類對比我以前在澎湖也在某鄉鎮看過一次，有點令人憎憤，不過是個屁大點地方的首長，鄉民選擇你，是希望你來為鄉民服務，結果呢？把處所裝潢成宮殿，好像自己是土皇帝一般，不管這是誰幹的，給人的觀感都很不好，非常不好，尤其對於我這種沒什麼修養的憤鄉（憤怒鄉民）而言，更是如此。&lt;/p&gt;&lt;p&gt;好吧，不說這些掃興的話，走進去逛逛吧。喔，才九點多冷氣已經全速開放了，比我家那邊的圖書館還有錢。可能因為地方小，所以閱報區與圖書區合併在一塊，不過好處是都能享受到冷氣，兩兩相抵，其實也算不錯了。服務櫃檯坐著一個替代役，提供諮詢和借書服務，沒看到其他管理員，莫非已經被替代役給擠掉了？不過若能把管理員的薪水省下來吹冷氣，這我一樣舉雙手贊成，哈哈。&lt;/p&gt;&lt;p&gt;閒話說多了，還是看些書吧。書庫比想像中來得小，只有幾座雙面書架，比溪州鄉的圖書館更不如。讓人不禁想為線西鄉民叫屈，不過細觀書目，其實也還算可以。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEUonABqI/AAAAAAAAUAM/eNhB-J6keb4/s1600-h/%C3%B8G0228%5B2%5D.jpg"&gt;&lt;img title="相片0228" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0228" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEVyC_X4I/AAAAAAAAUAQ/Cm_BGwnd-18/%C3%B8G0228_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEXQ9Nb5I/AAAAAAAAUAU/OLXIBf-7rOc/s1600-h/%C3%B8G0229%5B2%5D.jpg"&gt;&lt;img title="相片0229" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0229" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEYGlem2I/AAAAAAAAUAY/urgJuPfA_7s/%C3%B8G0229_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;先看左圖，《魔戒》和《哈利波特》在意料之中，但出現《項塔蘭》倒是一個驚喜，代表圖書館應該有定時更新書目，而且還是挑選過的；右邊的數位密碼也是新書，但比較難能的是竟然有《好兵帥克歷險記》，這部書絕版許久，可不容易見到，一般坊間的好兵帥克，也多半是閹割版或兒少版，我前陣子才因為片尋不著這本書，特地向博客來買了簡體全譯本，沒想到在這個地方看到它，心裡一陣悸動。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEZYR5_wI/AAAAAAAAUAc/Z1miJ0S8jkE/s1600-h/%C3%B8G0230%5B2%5D.jpg"&gt;&lt;img title="相片0230" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0230" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEaLcN7GI/AAAAAAAAUAg/cyzW0ZwujxM/%C3%B8G0230_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TLEEbXW_QXI/AAAAAAAAUAk/CCnoVmSTIQE/s1600-h/%C3%B8G0231%5B2%5D.jpg"&gt;&lt;img title="相片0231" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0231" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEcMBzT_I/AAAAAAAAUAo/2xk9R21FuMs/%C3%B8G0231_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;左邊這套大書名作坊，應該是圖書館的必藏書單之ㄧ。裏面有許多經典書目，如卡爾維諾的大多數著作，當初便是由這一系列所介紹進來；再看看右邊這套志文的新潮世界名著，圖書館不收藏這套幾乎等同半殘，比較難能的是這邊所收的還是硬皮典藏版，看得口水有點流出來了（哈），雖然都是早年的翻譯著作，語句上可能現代人比較不容易接受與吸收，這時候可以挑選其中一些名譯家，如宋碧雲等，他們的譯作可是歷久彌新，越咀嚼越見滋味！&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEdmmgcpI/AAAAAAAAUAs/UwN1pcj2h8k/s1600-h/%C3%B8G0232%5B2%5D.jpg"&gt;&lt;img title="相片0232" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0232" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEec8B0VI/AAAAAAAAUAw/NBdTtJCLxfI/%C3%B8G0232_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TLEEgPA0KAI/AAAAAAAAUA0/oQQSTVEvAHc/s1600-h/%C3%B8G0234%5B2%5D.jpg"&gt;&lt;img title="相片0234" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0234" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEgse9FnI/AAAAAAAAUA4/AFJXr7JSksM/%C3%B8G0234_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;當然除了純文學以外，還是有一些類型文學可以端出來饗宴鄉民。如右邊的《大唐雙龍傳》，這套黃易的名作在武俠界可是響叮噹，但能收全的圖書館卻少見，可惜沒找著尋秦記，否則便能組成黃易雙璧，艷絕全縣了；右邊則是經典的二月河系列，《康熙皇帝》和《雍正皇帝》，尤其後者，那可是經典中的經典，家中也收了一套，我大概看了四五遍不止，每一次翻閱都有新發現和新體悟，類型小說能寫到這個程度，真得很不容易。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEiNXmRoI/AAAAAAAAUA8/Jd5xGZyFdXo/s1600-h/%C3%B8G0235%5B2%5D.jpg"&gt;&lt;img title="相片0235" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0235" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEjAdLbjI/AAAAAAAAUBA/knkNmroSzhs/%C3%B8G0235_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEj2vuR2I/AAAAAAAAUBE/owAh4zCh99c/s1600-h/%C3%B8G0237%5B2%5D.jpg"&gt;&lt;img title="相片0237" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0237" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEkS3ldLI/AAAAAAAAUBI/znaNTTexpz4/%C3%B8G0237_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;這邊的《大衛考勃菲爾》可不是那個大魔術師，而是狄更斯的著作，舊譯為《塊肉餘生錄》，眾多評論家，包括狄更斯自己，都深深以為這本書是狄更斯的生涯代表作。說到這邊不免牢騷幾句，狄更斯，何等的小說大家，但時至今日，國內譯作卻依然那幾本，我不相信他的書會沒市場，好吧，就算賣不了幾個錢，能出版狄更斯的著作，已經是極大的榮幸了，理應是搶著出版，但事實上卻……唉，希望國內出版社能多點使命感，不要讓大陸笑話我們。&lt;/p&gt;&lt;p&gt;左邊那套不提也罷，大家都知道。而中間這套聯經版的《追憶似水年華》，難能的好書，可惜我沒找到同為聯經出版的《尤里西斯》，圖書館若能同時收藏這兩套，那大概便圓滿了。右邊也是難得一見的《德川家康》全集，不是口袋書那套，這是典藏版，讓我對線西圖書館的好印象又添增一筆。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEElyi-ZeI/AAAAAAAAUBM/8oR5RjAEzo8/s1600-h/%C3%B8G0238%5B5%5D.jpg"&gt;&lt;img title="相片0238" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0238" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEmbrYvRI/AAAAAAAAUBU/hc8iIDxSiBM/%C3%B8G0238_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TLEEn5aUCHI/AAAAAAAAUBY/WpuJSnV6588/s1600-h/%C3%B8G0240%5B2%5D.jpg"&gt;&lt;img title="相片0240" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0240" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEoWS1P3I/AAAAAAAAUBc/DpH4npzcJAM/%C3%B8G0240_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;《雨果的秘密》起來厚，讓人望而生怯，但實際卻是一本有趣的插畫書。書庫外開闢一塊作為新書櫥窗，還算有心，當然新書品質不一，但我們不該挑剔到這份上，有新書就該偷笑了，您說是吧？&lt;/p&gt;&lt;p&gt;好，線西圖書館的紀錄大致至此，簡單逛過後，發現它麻雀雖小，但五臟俱全，作為一個鄉鎮的文化中心，已算稱職。孩子們就算不讀經典文學，一些武俠、歷史小說也夠他們消磨整個寒暑假了。&lt;/p&gt;&lt;p&gt;最後，貼兩張沿途拍下的有趣照片。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TLEEp-qXjkI/AAAAAAAAUBg/SlhlW4y4L5w/s1600-h/%C3%B8G0221%5B2%5D.jpg"&gt;&lt;img title="相片0221" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0221" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TLEEqsEe0ZI/AAAAAAAAUBk/NFwC7SJiShM/%C3%B8G0221_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEroGjzgI/AAAAAAAAUBo/Xu5r_H_d-GQ/s1600-h/%C3%B8G0242%5B2%5D.jpg"&gt;&lt;img title="相片0242" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="211" alt="相片0242" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TLEEsEnRlCI/AAAAAAAAUBs/EfOu8e_Mufo/%C3%B8G0242_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;這便是彰化風情的鄉村一角，謝謝收看！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-5375688081752604085?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/5375688081752604085/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/10/library-of-shianshi.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5375688081752604085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5375688081752604085'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/10/library-of-shianshi.html' title='[圖記]線西圖書館'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TLEQ7suHmyI/AAAAAAAAUCQ/S5xfZrUAoJo/s72-c/507_p01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-2168713404638992778</id><published>2010-09-12T18:50:00.001+08:00</published><updated>2010-09-12T18:50:49.842+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>Monty Python and the Holy Grail (1975)</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TIywbB26WqI/AAAAAAAAT_U/ze_Cb9rUSok/s1600-h/Los_Caballeros_De_La_Mesa_Cuadrada_Y_Sus_Locos_Seguidores-Caratula%5B12%5D.jpg"&gt;&lt;img title="Los_Caballeros_De_La_Mesa_Cuadrada_Y_Sus_Locos_Seguidores-Caratula" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="403" alt="Los_Caballeros_De_La_Mesa_Cuadrada_Y_Sus_Locos_Seguidores-Caratula" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TIywcUgRX0I/AAAAAAAAT_Y/TXFq238o2hA/Los_Caballeros_De_La_Mesa_Cuadrada_Y_Sus_Locos_Seguidores-Caratula_thumb%5B10%5D.jpg?imgmax=800" width="573" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;過去以為，Edgar Wright是英國影壇極其稀有、前不見古人，後不見來者、橫空出世的喜劇奇才，但看過這片之後才發現，原來早在七零年代，已有Terry Gilliam這麼一位後現代喜劇的先行者，僅以單單一部電影，便足以在喜劇名人堂中留下大名了。 &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;過去也以為，Terry Gilliam最好的電影是《Brazil》(1985)這部怪作，影史少見如此熱情奔放又怪誕異常的科幻片，它一點都不正統，一點都不正經，但在每一位專業影評人選出的最佳科幻電影名單中，前五名內卻必然會看到它的名字，可見它在人們心中的地位，是何等崇高而不可動搖。而在看過這部Terry Gilliam的處女作之後，我才猛然發現，原來Terry Gilliam的生涯作品中，並不只有《Brazil》和《12 Monkeys》(1995)可以堂堂納入經典史冊，《Monty Python and the Holy Grail》不只經典，怪誕和熱情也遠超《Brazil》——它完全有與後者一較長短的本錢！ &lt;/p&gt;  &lt;p&gt;本片揉合喜劇、歌舞、動畫等等類型，以多樣的後設手法呈現出來，在《Monty Python and the Holy Grail》裏，不同幕的演員彼此叫囂是尋常事，甚至還未豋場的角色也加入搶鏡行列，渾身散發幟熱地表演慾望；幻想與現實則如混雜在一起的砂石和泥水一樣，你中有我、我中又有你；適時地添入動畫，更讓全片散發一股活潑氣息，不論是神之顯靈、地底魔獸和串場旁白輔助畫面，都克盡職責，百分之兩百發揮喜感與歡樂。附註一提，維基百科上說，Terry Gilliam的第一份工作就是負責製作卡通動畫，本片同時也是Terry Gilliam使用動畫素材最勤的一部作品，在之後，如是鋪陳已經少見，而這讓本片更顯珍貴；歌舞部份也相當精采，不像美國歌舞片強調舞蹈，它比較英式，屬輕歌劇的範疇，一些輕快且具地方特色的英格蘭小調，尤其討人喜歡，讓觀眾不知不覺地跟著哼起來。這部份，就不是Terry Gilliam所擅長的了，絕大多數應歸功於Monty Python團隊的深厚舞台實力。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TIyweLyaDbI/AAAAAAAAT_c/jswBdvEePr0/s1600-h/HolyGrail034%5B2%5D.jpg"&gt;&lt;img title="HolyGrail034" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="156" alt="HolyGrail034" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TIywe_ZLw3I/AAAAAAAAT_g/Amu7VM9d8Cs/HolyGrail034_thumb.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TIywggg3wzI/AAAAAAAAT_k/EK_uYmDuzfw/s1600-h/monty%20aloocinedotfr%5B3%5D.jpg"&gt;&lt;img title="monty aloocinedotfr" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="156" alt="monty aloocinedotfr" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TIywiAZyiVI/AAAAAAAAT_o/n3fC-Gd38wc/monty%20aloocinedotfr_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;實在很難把心中澎湃地觀後感受一一陳述，因為這部片不僅僅是一齣喜劇那麼簡單，它揉合許多前衛手法和技巧，全片就像一塊五花八門的大拼盤，或一個精心設計的萬花筒，既讓人目不轉睛又眼花撩亂，我唯一確定的，就是它的確給觀眾一個大大的滿足——那是吃撐後開始剔牙的滿足，也是徹徹底底被娛樂後的滿足。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-2168713404638992778?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/2168713404638992778/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/09/monty-python-and-holy-grail-1975.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/2168713404638992778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/2168713404638992778'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/09/monty-python-and-holy-grail-1975.html' title='Monty Python and the Holy Grail (1975)'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TIywcUgRX0I/AAAAAAAAT_Y/TXFq238o2hA/s72-c/Los_Caballeros_De_La_Mesa_Cuadrada_Y_Sus_Locos_Seguidores-Caratula_thumb%5B10%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-3905689407195860308</id><published>2010-06-30T23:56:00.014+08:00</published><updated>2010-07-02T14:12:21.358+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comic'/><title type='text'>痛並痛快著——《打鬼》</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TCto6_jbp7I/AAAAAAAAT7M/u3ZjrkRoJw4/s1600-h/MWSnap_031%202010-06-30%2C%2023_45_09%5B2%5D.jpg"&gt;&lt;img title="MWSnap_031 2010-06-30, 23_45_09" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="396" alt="MWSnap_031 2010-06-30, 23_45_09" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TCto75DaYeI/AAAAAAAAT7Q/0b6bo08vbb4/MWSnap_031%202010-06-30%2C%2023_45_09_thumb.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TCto9-QTfDI/AAAAAAAAT7U/Hyg_CE2RCjI/s1600-h/MWSnap_030%202010-06-30%2C%2023_44_20%5B3%5D.jpg"&gt;&lt;img title="MWSnap_030 2010-06-30, 23_44_20" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="396" alt="MWSnap_030 2010-06-30, 23_44_20" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TCto_t2g22I/AAAAAAAAT7Y/FHNoz_oNOEQ/MWSnap_030%202010-06-30%2C%2023_44_20_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;好，開門見山，這部《打鬼》（台譯：黃昏特攻隊）是近期最讓我印象深刻的漫畫，雖然在閱讀過程中並不總是愉悅的，甚至有點緊繃、有點糾心，但確實令人難以忘懷，不論是其中的人物、情節和場景，都在腦中久久徘徊不去。很久沒這種感覺了，所以在下面我會仔細討論它。 &lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;在介紹《打鬼》這部作品之前，先簡略介紹一下作者押切蓮介。押切蓮介是新一代的鬼怪作家，成名作是2003年至2009年在《週刊ヤングマガジン》上連載，全十六卷的《でろでろ》。他以多元的創意和古靈精怪著稱，任何被做濫的靈異題材到了他手中，都能被賦予新的靈魂，和新的惡趣味，可說是高橋葉介以降，頭一個可以把鬼怪故事說得生動又搞笑的能手。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TCtpAjjb9iI/AAAAAAAAT7c/H9qrIpAYMvc/s1600-h/Yuuyami%20Tokkoutai_008%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_008" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="313" alt="Yuuyami Tokkoutai_008" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TCtpBdZIQoI/AAAAAAAAT7g/vrZ-s_nj2ck/Yuuyami%20Tokkoutai_008_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;押切蓮介風格強烈，但缺點卻也顯而易見——他筆下的鬼故事嚇不了人。 &lt;/p&gt;&lt;p&gt;押切蓮介早期作品中的鬼魅個個均是插科打渾的丑角，極盡辦法只為了讓讀者開心。他比高橋葉介更懂得黑色幽默，也更善於營造喜劇氣氛，因而無可避免地犧牲了鬼怪故事應有的陰森和寒氣。高橋葉介同樣嚇不了人，但他的輕鬆和嚴肅作品卻同等迷人，這是因為他很清楚兩者之間的分際，該輕鬆時輕鬆，該嚴肅時嚴肅，轉換適切，而氣氛拿捏更是一絕。早期的押切蓮介還未能達到這種境界，但他慢慢意識到，靈異喜劇有其侷限，若要讓往後的創作更為開闊，就必須學會轉換風格。 &lt;/p&gt;&lt;p&gt;於是經過一番試驗和努力，押切蓮介在2007年1月在《少年シリウス》上開始連載《打鬼》；四個月之後，在《ホラーM》上推出《三角草的春天》，這兩部都可視為押切蓮介的轉型之作。《打鬼》請容我稍後再談，先說說後面這部《三角草的春天》。 &lt;/p&gt;&lt;p&gt;《三角草的春天》連載於《ホラーM》，這是本重口味的靈異漫畫雜誌，以《疆屍屋麗子》成名的三家本礼就是旗下的招牌作家。押切蓮介初次在這部雜誌上連載作品，有新的編輯和新的環境，讓他創作出這部廻異於過去的異色作品。拿早期的《でろでろ》和《三角草的春天》做比較，風格轉換之劇烈，簡直判若兩人，除了畫風外，無法讓人聯想這是同個漫畫家的作品。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TCtpCOAtJyI/AAAAAAAAT7k/MEF_gdikmhc/s1600-h/Yuuyami%20Tokkoutai_011%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_011" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="226" alt="Yuuyami Tokkoutai_011" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TCtpC1Zck5I/AAAAAAAAT7o/SCsEoRh2GVc/Yuuyami%20Tokkoutai_011_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;《三角草的春天》裏頭沒有鬼怪，沒有靈異，卻比押切蓮介過去任何一部作品都要嚇人。他收起擅長的喜劇營造，開場就是一片慘澹，而後更一步步墜入血腥與獵奇的深淵，將一個溫馨小村落硬生生化為人間煉獄。《三角草的春天》悲到一個極致，我完全不推薦它，但無可否認，它很明確地讓人感受到恐懼，而讓讀者恐懼，正是押切蓮介此次創作的目的，因為這是他所夢寐以求的。 &lt;/p&gt;&lt;p&gt;在《三角草的春天》的後記中，押切蓮介提及這是他初次這麼劇烈地轉變風格，很感謝編輯先生的大力協助，也感嘆道，原來描繪普通人是如此困難。這邊很有意思，因為押切蓮介向來都是以創作輕鬆的鬼怪故事為主，這回要他畫一篇沒有鬼怪沒有笑容的沉重故事，當然是費盡心思，但也意外地開發出押切蓮介另一方面的才華——他創作出來的病態人格並不怎麼真實，卻深具感染力，讀者雖然都知道這僅僅是個故事，卻依然毛骨悚然，冷到背脊裡去。 &lt;/p&gt;&lt;p&gt;也就是說，押切蓮介沒辦法像多數靈異作家一樣，讓讀者對魑魅魍魎﻿產生恐懼，所以他只好師法他類異色作家，墊腳尖藏身於獵奇森林的邊緣處，以扭曲、病態的人性來嚇人，成果極為豐碩，也使押切蓮介的鬼才之名，又更加響亮了。 &lt;/p&gt;&lt;p&gt;本文的重點《打鬼》，同樣是一部深刻描繪人性之醜惡與病態的作品，不過口味較《三角草的春天》稍稍淡了點，一來是因為刊登平台《少年シリウス》是本少年漫畫月刊，本身就不允許過度的血腥或情色鏡頭；二來則是因為連載當初還未接受《ホラーM》編輯的震撼式洗禮，所以直至第一集結束，仍維持押切蓮介一貫的輕靈異風格，不過從第二集開始，已經脫胎換骨的押切蓮介鐵了心策動大規模政變，劇情急轉直下，氣氛也越顯沉重和詭異。首本漫畫與後面幾卷的轉變是如此地明顯、如此地劇烈，實屬罕見。基本上，我們可以把《打鬼》劃為兩部，第一集是首部曲，也就是如作者所稱，是「可愛女高校生在學園的奮鬥」；而後面幾集則進展到二部曲，副標題也變為「可愛女高校生在黑首島所受的鬼畜凌辱」。 &lt;/p&gt;&lt;p&gt;鬼畜凌辱？是的，這完全是陳述事實，沒有刻意誇張或製造聳動，甚至我們可以說，《打鬼》的核心內涵，正是「凌辱」與「痛楚」。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TCtpDj58LpI/AAAAAAAAT7s/OKllojf_R1Y/s1600-h/Yuuyami%20Tokkoutai_012%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_012" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="209" alt="Yuuyami Tokkoutai_012" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TCtpEWev-0I/AAAAAAAAT7w/nrTvOEOiYKg/Yuuyami%20Tokkoutai_012_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;《打鬼》的女主角花岡彌依，姬山高校二年級生，一般被稱為花岡隊長，是位道行深厚的靈能力者，除魔方式是把靈力集中於手腳，然後重重地打在鬼魅身上，使之產生極度痛楚，寧願消散也不願繼續纏留於人世間。而花岡隊長又兼修道術與體術，簡直是《學校怪談》主角九段九鬼子與《無敵看板娘》主角鬼丸美輝的完美綜合體。對於多數惡靈而言，花岡隊長是他們的惡夢，是位手段兇殘的女暴君，鮮少有不懼怕她的。也因此，鬼怪在《打鬼》中所扮演的角色，甚至比以往都來得卑微，被當作裝飾品、木樁和沙袋，專門提供給花岡隊長練拳和發洩之用。 &lt;/p&gt;&lt;p&gt;既然一般鬼怪奈何不了主角一行人，那便只好把對抗層級提升到邪神的層次。 &lt;/p&gt;&lt;p&gt;到了第二集，慢慢進展到故事主線，一個最終必須打倒的地方邪神隨之浮現——祂的名是亂髮神，旗下有數百上千的信眾；祂特別庇護黑首島上的鐵之一家，而鐵家回饋的方式，就是進行各式各樣的活人獻祭。由於亂髮神雙眼和嘴巴都被針線縫死，看不到也說不出，心中有百般鬱悶，所以祂格外喜歡看人受苦，尤其是因肉體極度痛楚而產生的絕望，更讓祂覺得甜美異常。 &lt;/p&gt;&lt;p&gt;亂髮神乃一有著實權和實能的地方神祇，祂以其神力讓鐵家繁榮，而鐵家又間接支撐著整個黑首島。與《怪物王女》中的南久阿和《美國眾神》裏北方小村的無明神祇一樣，都守護著地方，盡力不使其凋零。而祂們也都有著原始的食慾，需要定期的活人獻祭來滋養身心。其中的差異在於，亂髮神無需自個動手，祂下面已經有一個忠心耿耿的鐵家，隨時為祂補充新鮮且肉質鮮美的祭祀材料。 &lt;/p&gt;&lt;p&gt;鐵家為了彰顯亂髮神的威能，甚至特別開闢了一處機關，名為煉獄，專門用來為祭品們進行「洗禮」。所謂的洗禮，就是再祭品正是奉獻給亂髮神之前，需經過一番慘無人道的肉體折磨。那種痛楚，必須催逼至人類所能忍受之最極限。虔誠的鐵家人稱施洗是一種藝術，因為要盡力讓祭品痛苦，卻又不能讓他們痛苦至死，那是一種非常微妙的拿捏，所以為了成為一個合格的施洗者，他們時時練習著。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TCtpGvslplI/AAAAAAAAT78/VZKhCIl6S5Y/s1600-h/Yuuyami%20Tokkoutai_024%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_024" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="220" alt="Yuuyami Tokkoutai_024" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TCtpHGwELZI/AAAAAAAAT8A/qr72NxowGDU/Yuuyami%20Tokkoutai_024_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;鐵家人說，在煉獄裏，無謂的東西很多，而死亡是最廉價的一種。 &lt;/p&gt;&lt;p&gt;有沒有覺著這句話很熟悉？沒錯，《養鬼吃人》（Hellraiser）系列作品裏也有出現過類似的話，不禁令人想比較一下亂髮神和後者的主神列维坦（Leviathan）。 &lt;/p&gt;&lt;p&gt;亂髮神因為本身肉體受苦，所以祂也渴望底下卑微的人類同樣受苦，至少奉獻給牠的祭品，都要經過極端折磨，進而產生絕望，對祂來說，這就是最甘甜的食糧；而列维坦本身是否受苦，沒人曉得，甚至祂有無實體都是個問號，不過祂要求信眾受苦，並不是嫉妒或憤恨等膚淺心理。而是有其理論根基。列维坦要求絕對的秩序，祂本身就是秩序的化身。而要求軟弱無常的人類提高秩序性，施加肉體痛苦便是其中的一條捷徑。而且痛苦是恆常的、不變的，與列维坦的秩序美學相符，所以祂理所當然把痛苦視為地獄的根本教義。 &lt;/p&gt;&lt;p&gt;亂髮神只要求信眾提供祭品，不強迫他們也將痛苦施加在自己身上；而列维坦則一視同仁，祭品與修士同享痛楚，所以信奉列维坦的修士也稱為痛苦修士，他們經過極度痛苦折磨後，理解痛苦的真諦，於是昇華為痛苦修士，畢生與痛苦相伴，隨時隨地感受痛苦、體驗痛苦，並找機會把這份「福音」傳播給地上的異教徒。 &lt;/p&gt;&lt;p&gt;亂髮神是一地方神祇，庇護範圍只侷限於黑首島內，猶如鄉下的流氓地痞，只能在小地方作威作福；而列维坦則貴為地獄之王，在人類所無法觸及的高等位界，揮軍與混沌勢力作戰。祂就像一名軍閥，一名勢力龐大且講究絕對秩序的軍閥。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TCtpFPS5NPI/AAAAAAAAT70/0id6VoDloEw/s1600-h/Yuuyami%20Tokkoutai_006%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_006" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="193" alt="Yuuyami Tokkoutai_006" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TCtpF2vpRXI/AAAAAAAAT74/w9TTl-0w90U/Yuuyami%20Tokkoutai_006_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;一一比較下來，我們發現亂髮神不論就神力或理念，都跟列维坦不在同一個高度。亂髮神畢竟只是個人類死後轉生的地方邪神，仍無法超脫慾念和感情，所以祂麾下的信眾也比較熱情，眼神幟熱，裏頭充滿癲狂的情緒。 &lt;/p&gt;&lt;p&gt;或許也是因為如此，讓《打鬼》裏的鐵家比《Hellraiser》裏的痛苦修士還來得恐怖。因為你無法用理智判斷一個狂熱信徒會幹出何等喪盡天良、人神共憤之事。 &lt;/p&gt;&lt;p&gt;押切蓮介再次讓讀者害怕了，《打鬼》裏有鬼怪，但讓人感到懼怕的卻不是鬼怪，而是那群喪心病狂的鐵家人。 &lt;/p&gt;&lt;p&gt;所幸我們的花岡隊長並不感到畏懼，她依然繼續那一副大模斯樣的態度，不管來者是人或鬼，只要心存不善，二話不說就是一頓痛打。打得讀者心中的鬱悶也一掃而空，這是何等痛快！一人單挑整支小隊，以至於整個家族，時而露一手空手劈竹、運勁拔樁，還很應景地身著黑色功夫裝，足蹬黑色功夫鞋。要說這是一位年僅十七歲的小姑娘，有人會信麼？我看她不止是一個靈能力者，也是一個念能力者，而且位居強化系的頂峰。 &lt;/p&gt;&lt;p&gt;所以說到底，《打鬼》骨子裡還是一部少年漫畫，它偶爾讓人感到絕望，但總是一閃而過，就像《彼岸島》裏的「椅子」段落，只佔整體篇幅的極小比例。它沒有任何血腥和情色畫面，比起畫面鋪張，押切蓮介更善於內心戲，走心理層面，這點跟《彼岸島》有根本性的差異。它沒有打怪昇級，花岡隊長一開始等級就破表了，蹂躪對手是常態，沒有艱辛獲勝這回事，所以讀者無須為她擔心，只需期待敵人會被打成何種豬頭模樣。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TCtpIxLNTLI/AAAAAAAAT8E/bZQxuv1XeB4/s1600-h/Yuuyami%20Tokkoutai_002%5B3%5D.jpg"&gt;&lt;img title="Yuuyami Tokkoutai_002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="630" alt="Yuuyami Tokkoutai_002" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TCtpKt59nMI/AAAAAAAAT8I/fLaugmHu0AQ/Yuuyami%20Tokkoutai_002_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;雖然主角一行人總是有驚無險，但故事中人們所受的磨難卻也是貨真價實的，這些祭品用自己的殘缺肉體，為鐵家人做了最詳實的記載，也為他們下了無言的判決——鐵之一家必須敗亡，而鐵家人也必須被狠狠痛打！ &lt;/p&gt;&lt;p&gt;執行人選無須多說，除了可愛女高校生花岡隊長外，還有其他人有這個資格和能力嗎？何況她早已丟下勝利宣言了： &lt;/p&gt;&lt;p&gt;&lt;strong&gt;「我要把你們崇拜的神‧‧‧‧‧‧亂髮神的鼻樑打斷，弄碎祂的下顎，把祂的骨頭全部打成粉碎。然後把祂化成微塵，送回地獄！」&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;「打碎鐵家的私慾，為你們的野蠻行為劃上休止符！」&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;所以就讓我們抱持同理心，但無須太過緊張，且繼續追隨花岡隊長的腳步，收看這齣現代版的桃太郎之鬼島打鬼紀實。 &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-3905689407195860308?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/3905689407195860308/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/yuuyami-tokkoutai-by-oshikiri-rensuke.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/3905689407195860308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/3905689407195860308'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/yuuyami-tokkoutai-by-oshikiri-rensuke.html' title='痛並痛快著——《打鬼》'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_bi6B4jS4CJw/TCto75DaYeI/AAAAAAAAT7Q/0b6bo08vbb4/s72-c/MWSnap_031%202010-06-30%2C%2023_45_09_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-5476289740860630071</id><published>2010-06-30T09:21:00.004+08:00</published><updated>2010-06-30T09:24:30.300+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>GTK+ &amp;&amp; Glade2.6簡易實作</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TCqcI-7iM1I/AAAAAAAAT7E/ZbNpRvbh8ao/s1600-h/MWSnap_029%202010-06-30%2C%2008_59_50%5B8%5D.jpg"&gt;&lt;img title="MWSnap_029 2010-06-30, 08_59_50" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="492" alt="MWSnap_029 2010-06-30, 08_59_50" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TCqcJ5XeuuI/AAAAAAAAT7I/3oRfWC_P3Jc/MWSnap_029%202010-06-30%2C%2008_59_50_thumb%5B6%5D.jpg?imgmax=800" width="553" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;本來Glade2.12用得順手，但換電腦後想下載來用，卻在網路上遍尋不著，而Glade3又只提供介面而沒有幫忙輸出制式程式碼，不太方便。所以又繼續埋頭找，但最終也只找到Glade2.6版的安裝檔，不甚滿意，但還能接受。&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;下載點&lt;/strong&gt;&lt;/u&gt;：&lt;a title="http://sourceforge.net/projects/gladewin32/files/" href="http://sourceforge.net/projects/gladewin32/files/"&gt;http://sourceforge.net/projects/gladewin32/files/&lt;/a&gt;&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;這個版本沒有輸出Dev C++的專案檔，所以便拿了先前Glade2.12輸出的專案檔作為替代，程式碼的配置幾乎都相同，需要修改的部份不多。因為config.h的檔案位置不同，所以要在main.c中加入&lt;u&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;#include &amp;quot;..\config.h&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/u&gt;，這樣便能順利編譯了。&lt;/p&gt;&lt;p&gt;順手寫了一個計算金額的簡單小程式作為測試，因為看起來很醜，就不PO出來丟臉了，只丟出檔案，作為自己以後的參考用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;完整程式碼+執行檔&lt;/u&gt;&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;&lt;a title="http://popodragon.myweb.hinet.net/Program/GTK_simpleComputer_beta.rar" href="http://popodragon.myweb.hinet.net/Program/GTK_simpleComputer_beta.rar"&gt;http://popodragon.myweb.hinet.net/Program/GTK_simpleComputer_beta.rar&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-5476289740860630071?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/5476289740860630071/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/glade26.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5476289740860630071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5476289740860630071'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/glade26.html' title='GTK+ &amp;&amp; Glade2.6簡易實作'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_bi6B4jS4CJw/TCqcJ5XeuuI/AAAAAAAAT7I/3oRfWC_P3Jc/s72-c/MWSnap_029%202010-06-30%2C%2008_59_50_thumb%5B6%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-3610659674256676801</id><published>2010-06-20T10:45:00.018+08:00</published><updated>2010-06-22T21:01:29.699+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>聊聊山姆雷米和劉鎮偉</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TB2AfemeDFI/AAAAAAAAT6U/BXpQ6a9Z8ig/s1600-h/operation_pink_squad_2_poster_01%5B3%5D.jpg"&gt;&lt;img title="operation_pink_squad_2_poster_01" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="414" alt="operation_pink_squad_2_poster_01" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TB2AgndwIdI/AAAAAAAAT6Y/VXShMLa2eyU/operation_pink_squad_2_poster_01_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TB2Ahn2PpYI/AAAAAAAAT6c/e-rnHdd1Lsc/s1600-h/crimewave%5B3%5D.jpg"&gt;&lt;img title="crimewave" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="414" alt="crimewave" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TB2Ail50AMI/AAAAAAAAT6g/hriIY11WATc/crimewave_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;1987年，在美國影壇和香港影壇都有部看似惡俗低劣，但卻值得記上一筆的電影問世，前者是山姆雷米（Sam Raimi）所導演的《鬼玩人》（Evil Dead II），後者則是劉鎮偉的初出茅廬之作，《猛鬼差館》。 &lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;這兩部電影敘述的都是鬼故事，一個西洋鬼，一個東洋鬼；兩者也同是低成本製作，劇本有失流暢，不盡人意，但這些細節缺憾並不足以影響整體評價，只因這兩位才華橫溢的新銳導演，在恐怖電影中大玩黑色幽默，他們紀錄劇中角色的驚懼、荒誕與歇斯底里處。尤其喜歡在最驚慌、最危急的時刻，投下一枚驚天笑彈，讓全場的氣氛為之一變。觀眾本來秉住呼吸，神經繃得緊緊，卻突然被炸得不知所措，神經隨之崩盤，只好與劇中人物一樣，擠出扭曲怪狀的慘笑。 &lt;/p&gt;&lt;p&gt;這樣的觀影體驗，是八零年代港片的拿手好戲，當時正逢香港鬼片全盛時期，林正英這位僵尸道長，名氣可是響噹噹。而在鬼片中添入詼諧色彩，乃當年港片的特產，其他國家，尤其是歐美地區，幾乎找不到這樣的電影。直到1987年《鬼玩人》問世，才正式為驚懼喜劇此一CULT味十足的類型電影揭開序幕。 &lt;/p&gt;&lt;p&gt;《鬼玩人》固然經典，但若談起山姆雷米的歷年作品，我個人還是比較偏愛比《鬼玩人》早一年拍攝，與科恩兄弟合作的低成本黑色喜劇傑作，《XYZ謀殺案》（Crimewave）。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TB2AkVbNS8I/AAAAAAAAT6k/WwZUvsULvj0/s1600-h/3359436760_b5a6c68b41_b%5B4%5D.jpg"&gt;&lt;img title="3359436760_b5a6c68b41_b" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="3359436760_b5a6c68b41_b" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TB2AlY5XxHI/AAAAAAAAT6o/aJZ8sCXxdkA/3359436760_b5a6c68b41_b_thumb%5B2%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TB2AmwqwosI/AAAAAAAAT6s/JI7RdcRQtJ4/s1600-h/evil%20dead%202%5B5%5D.jpg"&gt;&lt;img title="evil dead 2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="evil dead 2" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TB2AnuBW2JI/AAAAAAAAT6w/BOGK9Baz9k0/evil%20dead%202_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;這部電影拍攝手法新穎，充滿實驗性，玩性極重，即便以今日眼光來看，一樣充滿創意與驚喜。人物的造型與表演都故意刻板化、卡通化；而運用音效之頻繁與多變，更是達到一種前所未見的水平；《屍變》（The Evil Dead）中受人稱道，邪惡又詭異的快速走鏡，到了《XYZ謀殺案》，走鏡風格無異，但添入活潑滑稽的音樂，使得整體氣氛大為扭轉，宛如一個走路跌跌撞撞的醉翁，讓識者會心一笑。 &lt;/p&gt;&lt;p&gt;故事背景與敘事刻意諧仿過去的黑色電影，進行一種名為類型轉化的電影細部工程，讓人直覺這是一部黑色電影，卻又不是黑色電影。是的，難以定義，它比《威探闖通關》（Who Framed Roger Rabbit）更黑色、更有趣，甚至更卡通。也讓人聯想起尚皮耶居內（Jean-Pierre Jeunet）的《黑店狂想曲》（Delicatessen），這些八零末到九零初的異色另類電影，總是閃爍著主流電影所沒有的耀目光芒，看似胡鬧，看似隨性而為，實質裡卻蘊含大量的創意與技法，讓人越看越入迷。 &lt;/p&gt;&lt;p&gt;但人都是善變的，我們很難將《THX 1138》時期的喬治魯卡斯和《星際大戰》時期的喬治魯卡斯連結在一起；同樣，《屍變》、《XYZ謀殺案》時期的山姆雷米，與《蜘蛛人》時期的山姆雷米，期間轉變之劇烈，讓人完全摸不著頭緒，不曉得巨變是如何發生的。 &lt;/p&gt;&lt;p&gt;山姆雷米是否樂於轉變，我們不得而知，但至少，如今的他已經擺脫小眾，擠身票房導演之列。從下方的生涯作品表，我們可以看到山姆雷米的創作演進：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="576" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;         &lt;p align="center"&gt;[年份]&lt;/p&gt;&lt;/td&gt;        &lt;td valign="top" width="112"&gt;         &lt;p align="center"&gt;[中文片名]&lt;/p&gt;&lt;/td&gt;        &lt;td valign="top" width="242"&gt;         &lt;p align="center"&gt;[原片名]&lt;/p&gt;&lt;/td&gt;        &lt;td valign="top" width="69"&gt;         &lt;p align="center"&gt;[預算] &lt;/p&gt;&lt;/td&gt;        &lt;td valign="top" width="102"&gt;         &lt;p align="center"&gt;[北美票房]&lt;/p&gt;&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1981&lt;/td&gt;        &lt;td valign="top" width="112"&gt;屍變&lt;/td&gt;        &lt;td valign="top" width="242"&gt;The Evil Dead&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$375,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$2,400,000&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1986&lt;/td&gt;        &lt;td valign="top" width="112"&gt;XYZ謀殺案&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Crimewave&lt;/td&gt;        &lt;td valign="top" width="69"&gt;缺&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$5,101&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1987&lt;/td&gt;        &lt;td valign="top" width="112"&gt;鬼玩人&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Evil Dead II&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$3,500,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$5,923,044&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1990&lt;/td&gt;        &lt;td valign="top" width="112"&gt;魔俠震天雷&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Darkman&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$16,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$32,942,739&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1993&lt;/td&gt;        &lt;td valign="top" width="112"&gt;魔誡英豪&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Army of Darkness&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$11,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$11,502,976&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1995&lt;/td&gt;        &lt;td valign="top" width="112"&gt;致命的快感&lt;/td&gt;        &lt;td valign="top" width="242"&gt;The Quick and the Dead&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$32,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$18,552,460&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1998&lt;/td&gt;        &lt;td valign="top" width="112"&gt;絕地計劃&lt;/td&gt;        &lt;td valign="top" width="242"&gt;A Simple Plan&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$17,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$16,311,763&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;1999&lt;/td&gt;        &lt;td valign="top" width="112"&gt;往日柔情&lt;/td&gt;        &lt;td valign="top" width="242"&gt;For Love of the Game&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$50,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$35,188,640&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;2000&lt;/td&gt;        &lt;td valign="top" width="112"&gt;靈異大逆轉&lt;/td&gt;        &lt;td valign="top" width="242"&gt;The Gift&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$10,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$12,008,642&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;2002&lt;/td&gt;        &lt;td valign="top" width="112"&gt;蜘蛛人&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Spider-Man&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$139,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$403,706,375&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;2004&lt;/td&gt;        &lt;td valign="top" width="112"&gt;蜘蛛人2&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Spider-Man 2&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$200,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$373,524,485&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;2007&lt;/td&gt;        &lt;td valign="top" width="112"&gt;蜘蛛人3&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Spider-Man 3&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$258,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$336,530,303&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td valign="top" width="49"&gt;2009&lt;/td&gt;        &lt;td valign="top" width="112"&gt;地獄魔咒&lt;/td&gt;        &lt;td valign="top" width="242"&gt;Drag Me to Hell&lt;/td&gt;        &lt;td valign="top" width="69"&gt;$30,000,000&lt;/td&gt;        &lt;td valign="top" width="102"&gt;$42,100,625&lt;/td&gt;     &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;資料來源：&lt;font color="#004080"&gt;The Numbers&amp;#160; &lt;/font&gt;&amp;#160;&lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.the-numbers.com"&gt;&lt;em&gt;&lt;strong&gt;http://www.the-numbers.com&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;《屍變》的預算僅僅三十七萬美金，而票房卻達到兩百四十萬美金，投資報酬率相當驚人；但創意更豐的《XYZ謀殺案》卻慘遭滑鐵盧，票房只有可憐的五千美金，與1970年的《THX 1138》票房數字一模一樣，可謂同病相憐；之後跌跌撞撞，少賺多賠，直到推出《蜘蛛人》，才讓山姆雷米嚐到甜美的收益果實。 &lt;/p&gt;&lt;p&gt;以山姆雷米拍攝《蜘蛛人》的功績，接下來繼續接拍大成本電影，絲毫都不是問題。只不過他是個念舊之人，功成名就之後，仍不忘當年捉襟見肘、克難拍攝鬼片的美好時光，於是零九年，他又再次推出恐怖類型電影，睽違二十二年之久。這是一次高調的復歸，亦或只是玩性之作？ &lt;/p&gt;&lt;p&gt;我們看下去就知道了。 &lt;/p&gt;&lt;p&gt;再回頭來談談與山姆雷米同是八零年代竄起的電影人，也同樣有才華有熱情的香港導演，劉鎮偉。他與山姆雷米雖說都是拍攝小成本恐怖電影出身，但劉鎮偉比山姆雷米幸運，因為他物色到周星馳這塊璞玉，雕琢之後，便能大放異彩，慢慢磨合，調適出彼此最佳的合作方式，終於獲得觀眾肯定，1990年《賭聖》奪得當年港澳票房冠軍寶座。短短三年不到，劉鎮偉已躍升為票房導演，比起山姆雷米在好萊塢浮浮沉沉，打滾十餘年仍不得其門而入，實在好過太多太多。 &lt;/p&gt;&lt;p&gt;當然，劉鎮偉對於市場，有更多的奉承與妥協，但這並不影響他本身的創造力與獨特幽默感。他的笑料是港式的、是傳統的，但又有別於傳統，傳統中見新穎，獨創性極高。看看劉鎮偉一手拍攝的《西遊記第壹佰零壹回之月光寶盒》、《西遊記大結局之仙履奇緣》、《回魂夜》和《射雕英雄傳之東成西就》等等，無一不是讓影迷們津津樂道的經典傑作。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TB2AoyMupqI/AAAAAAAAT60/699YaYE0unA/s1600-h/284764afcbd0d6d40b0e7c7fb7ee75e1%5B3%5D.jpg"&gt;&lt;img title="284764afcbd0d6d40b0e7c7fb7ee75e1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="210" alt="284764afcbd0d6d40b0e7c7fb7ee75e1" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TB2AprNnv9I/AAAAAAAAT64/zkvYr6e3wfM/284764afcbd0d6d40b0e7c7fb7ee75e1_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TB2AqPpt8HI/AAAAAAAAT68/LAmOity5jCY/s1600-h/4629932_1219399433_264%5B3%5D.jpg"&gt;&lt;img title="4629932_1219399433_264" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="210" alt="4629932_1219399433_264" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TB2Aq3xcd9I/AAAAAAAAT7A/evjvbqXVTVQ/4629932_1219399433_264_thumb%5B1%5D.jpg?imgmax=800" width="279" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;而這其中，我最喜歡的作品是1989年的《猛鬼大廈》，劇情極其怪誕，人物個個裝瘋賣傻，盡顯高超的喜劇功力，明明超現實又不合理，卻總能帶出一種莫名的渲染力，讓觀眾一會緊張兮兮，一會又爆笑出來，噴得滿地都是。本片在劉鎮偉歷年作品中的特色是黃色段子極多，而且貫穿全片，從《猛鬼差館》的「警察打鬼」到本片的「鬼姦人」，不愧是樓南光，屢屢有奇遇，真羨煞那些超自然狂現象狂熱份子。而這次他所飾演的主角，一開始擔心太太與上司外遇，因為一些爆笑的因素，誤解越來越深，而後誤會解開後，又被鬼追著跑，之後又搞什麼童子雞，笑料不斷。樓南光是硬底子的喜劇演員，面容變化豐富，過去總以為他表演略過浮誇，但在《猛鬼大廈》中，他的浮誇演技卻正好契合劇中的氛圍。的確有獨挑大樑的資格，而其他重要配角，諸如吳君如、成奎安和胡楓等人，也都善盡職責，為本片添增不少笑鬧與活力，個個俱是不可或缺的角色。而曹查理、張敏等人的點綴，也讓本片更添豐富色彩。 &lt;/p&gt;&lt;p&gt;《猛鬼大廈》很亂，劇情亂、場景亂、人物亂，甚至鬼與神也亂七八糟，但劉鎮偉就是有辦法在這一團亂中抽絲剝繭，擷取他所想要的東西，呈現在觀眾面前，讓觀眾看得盡興，從中獲得樂趣。這是頂級的娛樂電影；而劉鎮偉，也是頂級的娛樂導演。 &lt;/p&gt;&lt;p&gt;山姆雷米和劉鎮偉，同是八零年代冒出頭的電影人，都有他們獨特的幽默、堅持與作品特色。這兩位影壇才子之後又會創作出什麼樣的精采電影呢？我正殷殷期待著。 &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-3610659674256676801?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/3610659674256676801/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/sam-raimi-and-jeffrey-lau.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/3610659674256676801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/3610659674256676801'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/sam-raimi-and-jeffrey-lau.html' title='聊聊山姆雷米和劉鎮偉'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_bi6B4jS4CJw/TB2AgndwIdI/AAAAAAAAT6Y/VXShMLa2eyU/s72-c/operation_pink_squad_2_poster_01_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-6438311753037512221</id><published>2010-06-19T00:35:00.004+08:00</published><updated>2010-07-06T09:01:45.011+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>製作Qt Runtime安裝檔</title><content type='html'>&lt;p&gt;官方沒有提供Qt runtime，或許是因為Qt每個版本的dll檔都略有差異，使用上一個版本的dll檔，可能會讓程式產生部分錯誤，所以才乾脆讓開發者自己想辦法。 &lt;/p&gt;&lt;p&gt;在未安裝Qt開發環境的電腦中執行Qt程式其實不難，辦法有三個： &lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;一，使用靜態編譯，優點是程式跑得快，而且攜帶方便。缺點是需要先將整個函式庫重新做靜態編譯，耗時耗工，而靜態編譯的速度也叫人難以苟同，所以這個選項就先跳過。 &lt;/p&gt;&lt;p&gt;二，將Qt程式與其所需的dll檔一併打包起來，讓Qt程式在資料夾內自取自足。優點是直覺，且可攜性高。但缺點是每發行一次都要夾帶dll檔，增加不少程式的重量。而不同的Qt程式之間也無法共用dll，形成一種浪費。 &lt;/p&gt;&lt;p&gt;三，讓使用者先安裝Qt runtime，建立環境，如此可直接發行單一的Qt程式檔，無須夾帶dll。優點是輕巧，缺點是增加使用者的麻煩（大忌！）。 &lt;/p&gt;&lt;p&gt;因為我只是偶爾想傳程式給別人看看，所以不必考慮使用者的麻煩與否，對我而言，最重要的還是程式的實質大小，一種相當直覺的想法——程式當然是能縮則縮、越小越好——所以在這邊我選擇使用第三種解決辦法。 &lt;/p&gt;&lt;p&gt;只要倚賴工具，製作安裝檔其實一點都不難。以下便以Inno Setup這個便捷的安奘檔製作工具為例，一步一步實作Qt runtime的安裝程式。 &lt;/p&gt;&lt;p&gt;1.下載並安裝Inno Setup。&lt;a href="http://www.softking.com.tw/soft/clickcount.asp?fid3=19499"&gt;http://www.softking.com.tw/soft/clickcount.asp?fid3=19499&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2.開啟Inno Setup Compiler，File-&amp;gt;New 進入Script Wizard模式：&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;歡迎畫面，按next。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TBuf7bXcZlI/AAAAAAAAT48/7fkbzjo_Y9g/s1600-h/InnoSetup_001%5B4%5D.jpg"&gt;&lt;img title="InnoSetup_001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_001" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TBuf8siARKI/AAAAAAAAT5A/M46APceaa6o/InnoSetup_001_thumb%5B2%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;可以輸入自己程式的名稱、版本、公司和網址。隨便輸入即可。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TBuf9Zv4zrI/AAAAAAAAT5E/PRaCsqY_-nQ/s1600-h/InnoSetup_002%5B3%5D.jpg"&gt;&lt;img title="InnoSetup_002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_002" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TBuf-9bhd1I/AAAAAAAAT5M/wG08ZuL9Uy8/InnoSetup_002_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;記得將&lt;strong&gt;&lt;u&gt;Allow user to change the application folder&lt;/u&gt;&lt;/strong&gt;前面框框的打勾取消，否則被修改安裝路徑後，環境變數那邊的設定就無效了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TBuf_mqdgdI/AAAAAAAAT5Q/MvTtZlpgPyo/s1600-h/InnoSetup_003%5B3%5D.jpg"&gt;&lt;img title="InnoSetup_003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_003" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TBugAb-keuI/AAAAAAAAT5U/4gwTr1d6PIg/InnoSetup_003_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;這邊也要將&lt;strong&gt;&lt;u&gt;Allow user to start the application after Setup has finished&lt;/u&gt;&lt;/strong&gt;前面框框的打勾取消，因為Qt runtime只是單純裝入dll檔，執行那個預設程式並沒有意義。&lt;/p&gt;&lt;p&gt;接著加入所有必須的dll，以4.3.3版為例，共有以下十四個檔案：&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugA6qjnoI/AAAAAAAAT5Y/oG2oPW7p6GU/s1600-h/MWSnap_029%5B3%5D.jpg"&gt;&lt;img title="MWSnap_029" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="266" alt="MWSnap_029" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugBkMIDfI/AAAAAAAAT5c/CAuiKMQ_BBA/MWSnap_029_thumb%5B1%5D.jpg?imgmax=800" width="307" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TBugCXBr2LI/AAAAAAAAT5g/uB3-3UzOkoo/s1600-h/InnoSetup_004%5B9%5D.jpg"&gt;&lt;img title="InnoSetup_004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_004" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TBugEjkWVgI/AAAAAAAAT5k/b6ayX9qREzw/InnoSetup_004_thumb%5B7%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;打上程式集中的資料夾名稱，並把&lt;strong&gt;&lt;u&gt;Allow user to create a desktop icon&lt;/u&gt;&lt;/strong&gt;前面的打勾取消，因為與前面一樣，沒有意義。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TBugFSCaewI/AAAAAAAAT5o/X4XlbtWRkuI/s1600-h/InnoSetup_005%5B5%5D.jpg"&gt;&lt;img title="InnoSetup_005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_005" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TBugGu3D3LI/AAAAAAAAT5w/mtQDW4FE0yM/InnoSetup_005_thumb%5B3%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;加入說明文件，看有沒有這個需要吧。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugHa5B3lI/AAAAAAAAT50/dPzirvawVXc/s1600-h/InnoSetup_006%5B3%5D.jpg"&gt;&lt;img title="InnoSetup_006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_006" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugH7rL6_I/AAAAAAAAT54/GzTKGUMGVek/InnoSetup_006_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;多語系選項，我沒試過中文，因為安裝過程只是簡單地按Next而已，對多數人而言應該不難才是。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TBugIubqxhI/AAAAAAAAT58/mL0nPtjCDGY/s1600-h/InnoSetup_007%5B3%5D.jpg"&gt;&lt;img title="InnoSetup_007" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_007" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TBugJWdcOfI/AAAAAAAAT6A/X6QeswVhZaE/InnoSetup_007_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;選擇安裝檔的名稱、圖示與輸出路徑，依個人喜好增添。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugKNr-cNI/AAAAAAAAT6E/SxI8VLFvihA/s1600-h/InnoSetup_008%5B10%5D.jpg"&gt;&lt;img title="InnoSetup_008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_008" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugK4lbHpI/AAAAAAAAT6I/b656-Hdrh_A/InnoSetup_008_thumb%5B4%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;OK，流程跑完了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TBugLkFgreI/AAAAAAAAT6M/2f78c7Ah0tE/s1600-h/InnoSetup_010%5B3%5D.jpg"&gt;&lt;img title="InnoSetup_010" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="InnoSetup_010" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TBugMtAB-tI/AAAAAAAAT6Q/9xwsySbTQQQ/InnoSetup_010_thumb%5B1%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;3.程式回到主畫面，會看到整篇密密麻麻的程式碼，先別急著編譯，在[Setup]與[Languages]之間加入下面這段環境變數的設定：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;[Registry]        &lt;br /&gt;Root: HKLM; Subkey: &amp;quot;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&amp;quot;; ValueType: string; ValueName: &amp;quot;Path&amp;quot;; ValueData: &amp;quot;{olddata};C:\Program Files\Qt 4.3.3 runtime&amp;quot;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;接著我們要在程式集中的資料夾加入反安裝捷徑，將&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;[Icons]        &lt;br /&gt;Name: &amp;quot;{group}\Qt runtime&amp;quot;; Filename: &amp;quot;{app}\MyProg.exe&amp;quot;&lt;/strong&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;改成：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;[Icons]        &lt;br /&gt;Name: &amp;quot;{group}\{cm:UninstallProgram,Qt 4.3.3 runtime}&amp;quot;; Filename: &amp;quot;{uninstallexe}&amp;quot;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;4.點選上頭的綠色圖示（run），靜候程式編譯，完成後到選定的輸出資料夾找找看，可以看到一個安裝程式檔，忙到這邊，大功告成！&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: teal;"&gt;Qt 4.3.3 Runtime安裝檔：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://skyblade.myweb.hinet.net/QT/Qt_4_3_3_runtime.exe"&gt;http://skyblade.myweb.hinet.net/QT/Qt_4_3_3_runtime.exe&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-6438311753037512221?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/6438311753037512221/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-runtime-setup.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6438311753037512221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6438311753037512221'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-runtime-setup.html' title='製作Qt Runtime安裝檔'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_bi6B4jS4CJw/TBuf8siARKI/AAAAAAAAT5A/M46APceaa6o/s72-c/InnoSetup_001_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-686689871156204479</id><published>2010-06-14T16:21:00.006+08:00</published><updated>2010-08-05T08:43:21.932+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>Qt習作之簡易圖像瀏覽器 v0.1</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TBXme5-gZbI/AAAAAAAAT40/6KcwpIVEy6k/s1600-h/Image.jpg"&gt;&lt;img title="怒犯天條 (Dogma, 1999)" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="347" alt="怒犯天條 (Dogma, 1999)" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TBXmgGmGdcI/AAAAAAAAT44/9yIDr1wyR8o/Image.jpg?imgmax=800" width="572" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;應該算是上一篇顯示圖片練習的延伸，透過這次實作，更進一步了解Qt的事件處理方式。不像GTK+每個事件只能傳遞一個指標，Qt可以透過Class的data member來傳遞資料，要多少有多少，而不用像GTK+總要費勁把全部要傳的資料都塞在一個struct裏，再迂迴地套指標來使用。&lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:e323d97b-d84a-4d05-92fe-e8d631c640a4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;不知道理解上有沒有錯誤，我一樣把資料傳給singal/slot函式的data member，一開始都正常，都後來資料越加越多，就逐漸出現問題，可以成功編譯，但編譯出來的程式檔執行中會出錯，有時候刪掉一個data member可以正確執行，有時候則否，讓人毫無頭緒，完全找不出問題所在。&lt;/p&gt;&lt;p&gt;或許我的部分實作方式並不符合Qt的理念，所以到最後只有在Dev C++中編譯的程式檔可以正確執行，正規qmake編譯出來的則沒辦法打開圖片，還未顯示就出現錯誤訊息並強制關閉，真的有點讓人頭痛。&lt;/p&gt;&lt;p&gt;再者，程式執行所耗用的記憶體量並不低，開啟一張小圖片就要十幾mb，而尺寸大的圖片則要二十幾mb，甚至還可能達到三十mb。或許Qt會有一些針對圖片優化的函式，之後再找找看。&lt;/p&gt;&lt;p&gt;原本還想加入QScrollArea，讓過大的圖片可用捲軸方式呈現，但實作過程卻不斷受挫，不知怎麼搞的，當圖片開啟時總會出錯；還有不知如何把scrollArea內部的圖片尺寸反應出來，使得視窗大小無法跟著調整。種種問題接踵而至，最後只好暫且放棄這個打算。往後等認識更深入後，一定要把這個問題徹底解決了，以解今日之恨。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;main.cpp：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="note"&gt;/* 圖片瀏覽器 v0.1&lt;br /&gt; &lt;br /&gt;　功能：1.可開啟圖片。&lt;br /&gt;  　　　2.可讀取圖片資訊，檔名、路徑、尺寸和檔案大小。  &lt;br /&gt;  　　　3.可用+-鍵縮放視窗中的圖片尺寸，並顯示縮放後的比例數值。&lt;br /&gt;  　　　4.可用左右方向鍵對目錄中的圖片進行循序瀏覽。&lt;br /&gt;  　　　5.可用滑鼠滾輪對目錄中的圖片進行循序瀏覽。 &lt;br /&gt;  　　　6.可顯示目前圖片在目錄中的排序，與目錄下圖片總數。 &lt;br /&gt;  　　　7.可按滑鼠(左中右鍵均可)將視窗修正為最佳大小。 &lt;br /&gt;　　　　   &lt;br /&gt;　缺點：1.圖片過大會超出螢幕，無法以捲軸式呈現。 &lt;br /&gt;　　　　2.程式開啟大型圖檔所佔的記憶體過於龐大，可達30mb以上。 &lt;br /&gt;　　　　3.以cmd批次檔編譯出來的程式檔執行中會產生錯誤， &lt;br /&gt;　　　　　唯有在Dev C++中編譯的程式檔才能正確運行。&lt;br /&gt;   　　　 &lt;br /&gt;&lt;br /&gt;　日期：2010.6.14 &lt;br /&gt;*/&lt;/span&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QApplication&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QBitmap&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QPushButton&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QVBoxLayout&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;penPicEvent.h&amp;quot;&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;QString toUnicode( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*strText )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使之可以顯示中文（big5轉unicode）&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;QString::fromLocal8Bit( strText ) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main( &lt;span class="reservedWord"&gt;int &lt;/span&gt;argc, &lt;span class="reservedWord"&gt;char &lt;/span&gt;*argv[] )&lt;br /&gt;{&lt;br /&gt;    QApplication app( argc, argv ) ;&lt;br /&gt;&lt;br /&gt;    PainterWidget *window = &lt;span class="reservedWord"&gt;new &lt;/span&gt;PainterWidget;&lt;br /&gt;    window-&amp;gt;setWindowTitle( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片顯示小程式&amp;quot;&lt;/span&gt; ) );&lt;br /&gt;   &lt;br /&gt;    QLabel *labelText1 = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QLabel( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片路徑 : &amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;    QLabel *labelText2 = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QLabel( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片資訊 : &amp;quot;&lt;/span&gt; ) ) ; &lt;br /&gt;    QLabel *labelImage = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QLabel( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;br /&gt;    QPushButton *btn = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QPushButton( toUnicode( &lt;span class="quot"&gt;&amp;quot;開&lt;b&gt;&lt;/b&gt;啟檔案&amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;    &lt;br /&gt;  &lt;br /&gt;    QVBoxLayout *vBoxLayout = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QVBoxLayout ;&lt;br /&gt;    window-&amp;gt;setLayout( vBoxLayout ) ;&lt;br /&gt;&lt;br /&gt;    vBoxLayout-&amp;gt;addWidget( btn );&lt;br /&gt;    vBoxLayout-&amp;gt;addWidget( labelText1 ) ;&lt;br /&gt;    vBoxLayout-&amp;gt;addWidget( labelText2 ) ;&lt;br /&gt;    vBoxLayout-&amp;gt;addWidget( labelImage ) ;&lt;br /&gt;    &lt;br /&gt;    ButtonClicked bc ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;Signal與Slot的類別&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    bc.setWidget( window ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;用來修改window視窗大小與標題&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    QDir dir( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ; &lt;br /&gt;    bc.setDir( &amp;amp;dir ) ; &lt;br /&gt;      &lt;br /&gt;    QFileInfoList list ;&lt;br /&gt;    bc.setList( &amp;amp;list ) ;&lt;br /&gt;    &lt;br /&gt;    QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator iter ;&lt;br /&gt;    bc.setIter( &amp;amp;iter ) ;&lt;br /&gt;       &lt;br /&gt;    QSize size( 0, 0 ) ; &lt;br /&gt;    bc.setSize( &amp;amp;size ) ; &lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使用於事件函式 &lt;br /&gt;&lt;/span&gt;    window-&amp;gt;setLabelText1( labelText1 ) ;&lt;br /&gt;    window-&amp;gt;setLabelText2( labelText2 ) ;&lt;br /&gt;    window-&amp;gt;setLabelImage( labelImage ) ;&lt;br /&gt;    window-&amp;gt;setDir( &amp;amp;dir ) ;&lt;br /&gt;    window-&amp;gt;setList( &amp;amp;list ) ;&lt;br /&gt;    window-&amp;gt;setIter( &amp;amp;iter ) ;&lt;br /&gt;    window-&amp;gt;setSize( &amp;amp;size ) ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將btn-&amp;gt;clicked()的訊號送往bc.clicked()&lt;br /&gt;&lt;/span&gt;    QObject::connect( btn, SIGNAL( clicked() ), &amp;amp;bc, SLOT( clicked() ) ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將bc.fileNameChanged()的訊號送往labelText1.setText()&lt;br /&gt;&lt;/span&gt;    QObject::connect( &amp;amp;bc, SIGNAL( fileNameChanged( QString ) ),&lt;br /&gt;                        labelText1, SLOT( setText( QString ) ) ) ;&lt;br /&gt;                     &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將bc.fileInfoChanged()的訊號送往labelText2.setText()                    &lt;br /&gt;&lt;/span&gt;    QObject::connect( &amp;amp;bc, SIGNAL( fileInfoChanged( QString ) ),&lt;br /&gt;                        labelText2, SLOT( setText( QString ) ) ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將bc.pixmapChanged()的訊號送往labelImage.setPixmap()&lt;br /&gt;&lt;/span&gt;    QObject::connect( &amp;amp;bc, SIGNAL( pixmapChanged( QPixmap ) ),&lt;br /&gt;                        labelImage, SLOT( setPixmap( QPixmap ) ) ) ;&lt;br /&gt;&lt;br /&gt;    window-&amp;gt;resize( 200, 100 );&lt;br /&gt;    window-&amp;gt;show();&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;app.exec();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;OpenPicEvent.h：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;ndef&lt;/span&gt; OPEN_PIC_EVENT_H&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; OPEN_PIC_EVENT_H&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QMouseEvent&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QKeyEvent&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;PainterWidget : &lt;span class="reservedWord"&gt;public &lt;/span&gt;QWidget {&lt;br /&gt;    &lt;br /&gt;&lt;span class="reservedWord"&gt;public:&lt;/span&gt;&lt;br /&gt;    PainterWidget() : m_labelText1( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;), &lt;br /&gt;                      m_labelText2( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_labelImage( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_dir( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_list( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_iter( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_pic( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ),&lt;br /&gt;                      m_size( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;) {}&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setLabelText1( QLabel *label ) { m_labelText1 = label ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setLabelText2( QLabel *label ) { m_labelText2 = label ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setLabelImage( QLabel *label ) { m_labelImage = label ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setDir( QDir *dir ) { m_dir = dir ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setList( QFileInfoList *list ) { m_list = list ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setIter( QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator *iter ) { m_iter = iter ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setSize( QSize *size ) { m_size = size ; }&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;draw( QString &amp;amp;path, bool sizeChanged ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;繪出主要畫面 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;&lt;span class="reservedWord"&gt;protected:&lt;/span&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;mousePressEvent( QMouseEvent *event ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;keyPressEvent( QKeyEvent *event ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;wheelEvent( QWheelEvent *event ) ;&lt;br /&gt;    &lt;br /&gt;&lt;span class="reservedWord"&gt;private:&lt;/span&gt;&lt;br /&gt;    QLabel *m_labelText1 ;&lt;br /&gt;    QLabel *m_labelText2 ;&lt;br /&gt;    QLabel *m_labelImage ;&lt;br /&gt;    QDir *m_dir ;&lt;br /&gt;    QFileInfoList *m_list ;&lt;br /&gt;    QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator *m_iter ;&lt;br /&gt;    QPixmap m_pic ;&lt;br /&gt;    QSize *m_size ;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;OpenPicEvent.cpp：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;penPicEvent.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;PainterWidget::mousePressEvent( QMouseEvent *event ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;按滑鼠左、中或右鍵可將視窗調整至最佳尺寸 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    QSize size = this-&amp;gt;sizeHint() ; &lt;br /&gt;    this-&amp;gt;resize( size.width()+10, size.height()+50 ) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;PainterWidget::wheelEvent( QWheelEvent *event ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;以滑鼠滾輪穿梭瀏覽目錄下的圖片 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    bool imageChanged = &lt;span class="reservedWord"&gt;false &lt;/span&gt;;&lt;br /&gt;    QString path = m_dir-&amp;gt;path() + &lt;span class="quot"&gt;&amp;quot;/&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;delta() EQU -120) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;滾輪下推&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( (*m_iter) != m_list-&amp;gt;begin() ) {&lt;br /&gt;            -- (*m_iter) ;&lt;br /&gt;            &lt;br /&gt;            imageChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;delta() EQU 120 ) {  &lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( (*m_iter)+1 != m_list-&amp;gt;end() ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;滾輪上推 &lt;br /&gt;&lt;/span&gt;            ++ (*m_iter) ;&lt;br /&gt;            &lt;br /&gt;            imageChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( imageChanged )&lt;br /&gt;        draw( path, &lt;span class="reservedWord"&gt;false &lt;/span&gt;) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;PainterWidget::keyPressEvent( QKeyEvent *event ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;以鍵盤的左右鍵控制目前視窗中讀取的圖片 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    bool imageChanged = &lt;span class="reservedWord"&gt;false &lt;/span&gt;;&lt;br /&gt;    bool sizeChanged = &lt;span class="reservedWord"&gt;false &lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    QString path = m_dir-&amp;gt;path() + &lt;span class="quot"&gt;&amp;quot;/&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;key() EQU Qt::Key_Right) {&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( (*m_iter) != m_list-&amp;gt;begin() ) {&lt;br /&gt;            -- (*m_iter) ;&lt;br /&gt;            &lt;br /&gt;            imageChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;key() EQU Qt::Key_Left ) {&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( (*m_iter)+1 != m_list-&amp;gt;end() ) {&lt;br /&gt;            ++ (*m_iter) ;&lt;br /&gt;            &lt;br /&gt;            imageChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;key() EQU Qt::Key_Plus ) {&lt;br /&gt;        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;每按加號一次，放大圖片到原本的1.1倍 &lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        QString path = m_dir-&amp;gt;path() + &lt;span class="quot"&gt;&amp;quot;/&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; + (*m_iter)-&amp;gt;fileName() ;&lt;br /&gt;        &lt;br /&gt;        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;更新圖片內容 &lt;br /&gt;&lt;/span&gt;        m_pic.load( path ) ;&lt;br /&gt;        &lt;br /&gt;        m_size-&amp;gt;setHeight( (int)( m_size-&amp;gt;height()*1.1 ) );&lt;br /&gt;        m_size-&amp;gt;setWidth( (int)( m_size-&amp;gt;width()*1.1 ) ) ;&lt;br /&gt;        &lt;br /&gt;        sizeChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;    } &lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( event-&amp;gt;key() EQU Qt::Key_Minus ) {&lt;br /&gt;        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;每按減號一次，縮小圖片到原本的0.9倍&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        QString path = m_dir-&amp;gt;path() + &lt;span class="quot"&gt;&amp;quot;/&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; + (*m_iter)-&amp;gt;fileName() ;&lt;br /&gt;         &lt;br /&gt;        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;更新圖片內容 &lt;br /&gt;&lt;/span&gt;        m_pic.load( path ) ;&lt;br /&gt;        &lt;br /&gt;        m_size-&amp;gt;setHeight( (int)( m_size-&amp;gt;height()*0.9 ) ) ;&lt;br /&gt;        m_size-&amp;gt;setWidth( (int)( m_size-&amp;gt;width()*0.9 ) ) ;&lt;br /&gt;        &lt;br /&gt;        sizeChanged = &lt;span class="reservedWord"&gt;true &lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( imageChanged || sizeChanged ) {&lt;br /&gt;        &lt;br /&gt;        draw( path, sizeChanged ) ;        &lt;br /&gt;           &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;PainterWidget::draw( QString &amp;amp;path, bool sizeChanged )&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;double &lt;/span&gt;ratio =  m_size-&amp;gt;width() / (double) m_pic.size().width() ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;percent = (int)( ratio * 100 ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;若非改變大小，則百分比固定為100% &lt;br /&gt;&lt;/span&gt;    percent = sizeChanged ? percent : 100 ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;更新圖片路徑 &lt;br /&gt;&lt;/span&gt;    path += (*m_iter)-&amp;gt;fileName() ;&lt;br /&gt;    m_labelText1-&amp;gt;setText( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;center&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;font color=blue&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;        path +&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;/font&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;更新圖片內容 &lt;br /&gt;&lt;/span&gt;    m_pic.load( path ) ;&lt;br /&gt;&lt;br /&gt;    QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator iter = (*m_iter) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = m_list-&amp;gt;count() ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;no = 0 ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;找出目前開啟圖片的排序位置 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( iter != m_list-&amp;gt;end() ) {&lt;br /&gt;        ++ iter ;&lt;br /&gt;        ++ no ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;顯示圖片在目錄中的次序與目錄裡的圖片總數 &lt;br /&gt;&lt;/span&gt;    QString order = &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;[ &amp;quot;&lt;/span&gt; +&lt;br /&gt;        QString::number( no ) +&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;/ &amp;quot;&lt;/span&gt; +&lt;br /&gt;        QString::number( count ) +&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;] &amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !sizeChanged ) &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;只要顯示原始圖片即可 &lt;br /&gt;&lt;/span&gt;        m_labelImage-&amp;gt;setPixmap( m_pic ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;須重新設定大小 &lt;br /&gt;&lt;/span&gt;        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使用Qt::SmoothTransformation讓縮放後的圖片去鋸齒化，比較平滑一點 &lt;br /&gt;&lt;/span&gt;        m_pic = m_pic.scaled( *m_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ;    &lt;br /&gt;        m_labelImage-&amp;gt;setPixmap( m_pic ) ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;更新圖片資訊 &lt;br /&gt;&lt;/span&gt;    QFile srcFile( path ) ; &lt;br /&gt;    QString strFileInfo = order + &lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;( &amp;quot;&lt;/span&gt; +&lt;br /&gt;        QString::number( percent ) + &lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt; ) &amp;quot;&lt;/span&gt; +&lt;br /&gt;        toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片尺寸 :  長度:&amp;quot;&lt;/span&gt; ) + &lt;br /&gt;        QString::number( m_pic.height() ) + &lt;br /&gt;        toUnicode( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt; ,  寬度:&amp;quot;&lt;/span&gt; ) +&lt;br /&gt;        QString::number( m_pic.width() ) +&lt;br /&gt;        toUnicode( &lt;span class="quot"&gt;&amp;quot;　&lt;b&gt;&lt;/b&gt;　　檔案大小:&amp;quot;&lt;/span&gt; ) +&lt;br /&gt;        QString::number( srcFile.size()/1024 ) + &lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;kb&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;    m_labelText2-&amp;gt;setText( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;center&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;font color=green&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;        strFileInfo +&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;/font&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;紀錄改變後的大小 &lt;br /&gt;&lt;/span&gt;    m_size-&amp;gt;scale( m_pic.size().width(), m_pic.size().height(), Qt::IgnoreAspectRatio ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;修正為建議的視窗大小（不靈敏，須等下一次才會生效）    &lt;br /&gt;&lt;/span&gt;    this-&amp;gt;resize( this-&amp;gt;sizeHint().width(), this-&amp;gt;sizeHint().height() ) ; &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;ButtonClicked.h：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;ndef&lt;/span&gt; BUTTON_CLICKED_H&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; BUTTON_CLICKED_H&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; EQU ==&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QObject&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QString&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QFileDialog&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QWidget&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QDir&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QFileInfo&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QLabel&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QSize&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;QString toUnicode( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*strText ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;big5編碼轉為unicode&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;ButtonClicked : &lt;span class="reservedWord"&gt;public &lt;/span&gt;QObject {&lt;br /&gt;    Q_OBJECT&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;public:&lt;/span&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;成員初始列（member initialization list），效率高於傳統賦值 &lt;br /&gt;&lt;/span&gt;    ButtonClicked() : m_fileName( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ), &lt;br /&gt;                      m_widget( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;), &lt;br /&gt;                      m_dir( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_list( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;), &lt;br /&gt;                      m_iter( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;),&lt;br /&gt;                      m_size( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;)&lt;br /&gt;                      { }&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;public &lt;/span&gt;slots:&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;clicked();&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setWidget( QWidget *widget ) { m_widget = widget ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setDir( QDir *dir ) { m_dir = dir ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setList( QFileInfoList *list ) { m_list = list ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setIter( QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator *iter ) { m_iter = iter ; }&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setSize( QSize *size ) { m_size = size ; }&lt;br /&gt;    &lt;br /&gt;signals:&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;fileNameChanged( QString fileName ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回新的檔案名稱&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;fileInfoChanged( QString fileName ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回新的檔案資訊  &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;pixmapChanged( QPixmap pic ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回新的圖片檔 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;&lt;span class="reservedWord"&gt;private:&lt;/span&gt;&lt;br /&gt;    QString m_fileName ;&lt;br /&gt;    QWidget *m_widget ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;主視窗 &lt;br /&gt;&lt;/span&gt;    QDir *m_dir ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目前檔案的目錄 &lt;br /&gt;&lt;/span&gt;    QFileInfoList *m_list ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目錄下所有限定格式的檔案資料 &lt;br /&gt;&lt;/span&gt;    QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator *m_iter ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;m_list的迭代器&lt;br /&gt;&lt;/span&gt;    QSize *m_size ;    &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;ButtonClicked.cpp：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::clicked() {&lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;跳出開啟檔案視窗 &lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目錄以m_fileName作為參數，作用是可以保存上一次的讀取目錄。 &lt;br /&gt;&lt;/span&gt;    m_fileName = QFileDialog::getOpenFileName( 0, &lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;pen Image&amp;quot;&lt;/span&gt;,&lt;br /&gt;                    m_fileName, &lt;span class="quot"&gt;&amp;quot;I&lt;b&gt;&lt;/b&gt;mage Files (*.png *.xpm *.jpg *.bmp) &amp;quot;&lt;/span&gt;) ;&lt;br /&gt;     &lt;br /&gt;    QFileInfo fileInfo( m_fileName ) ;&lt;br /&gt;    &lt;br /&gt;    m_dir-&amp;gt;setPath( fileInfo.dir().path() ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;取得不含檔案名稱的目錄字串 &lt;br /&gt;&lt;/span&gt;           &lt;br /&gt;    QPixmap pic( m_fileName ) ;&lt;br /&gt;    QFile srcFile( m_fileName ) ; &lt;br /&gt;     &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;隨圖片大小而改變視窗大小，但不知為何無法及時反應，需等下一次開檔才能重設大小&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使用update(), repaint(), hide()+show(), showMinimized()+showNormal()都沒有用...&lt;br /&gt;&lt;/span&gt;    m_widget-&amp;gt;resize( m_widget-&amp;gt;sizeHint().width(), m_widget-&amp;gt;sizeHint().height() ) ;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    QString strFileInfo( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( m_fileName.isEmpty() )&lt;br /&gt;        m_widget-&amp;gt;setWindowTitle( toUnicode( &lt;span class="quot"&gt;&amp;quot;沒&lt;b&gt;&lt;/b&gt;有開啟圖片&amp;quot;&lt;/span&gt; ) ); &lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;        strFileInfo = toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片尺寸 :  長度:&amp;quot;&lt;/span&gt; ) + &lt;br /&gt;                      QString::number( pic.height() ) + &lt;br /&gt;                      toUnicode( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt; ,  寬度:&amp;quot;&lt;/span&gt; ) +&lt;br /&gt;                      QString::number( pic.width() ) +&lt;br /&gt;                      toUnicode( &lt;span class="quot"&gt;&amp;quot;　&lt;b&gt;&lt;/b&gt;　　檔案大小:&amp;quot;&lt;/span&gt; ) +&lt;br /&gt;                      QString::number( srcFile.size()/1024 ) + &lt;br /&gt;                      &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;kb&amp;quot;&lt;/span&gt; ;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    m_dir-&amp;gt;setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ) ;&lt;br /&gt;    m_dir-&amp;gt;setSorting( QDir::Name | QDir::Reversed ) ; &lt;br /&gt;     &lt;br /&gt;    QStringList filters ;&lt;br /&gt;    filters &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;*&lt;b&gt;&lt;/b&gt;.jpg&amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;*&lt;b&gt;&lt;/b&gt;.png&amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;*&lt;b&gt;&lt;/b&gt;.bmp&amp;quot;&lt;/span&gt; ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;限定三種格式的圖片 &lt;br /&gt;&lt;/span&gt;    m_dir-&amp;gt;setNameFilters( filters ) ;&lt;br /&gt;    &lt;br /&gt;    (*m_list) = m_dir-&amp;gt;entryInfoList() ;&lt;br /&gt;      &lt;br /&gt;    (*m_iter) = m_list-&amp;gt;begin() ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = m_list-&amp;gt;count() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目錄下圖片總數 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;no = 0 ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;所選圖片在目錄下的排序位置 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;找出目前開啟圖片的排序位置 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( (*m_iter) != m_list-&amp;gt;end() ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( fileInfo.fileName() EQU (*m_iter)-&amp;gt;fileName() )&lt;br /&gt;           &lt;span class="reservedWord"&gt; break&lt;/span&gt; ;&lt;br /&gt;            &lt;br /&gt;        ++ (*m_iter);&lt;br /&gt;        ++ no ;&lt;br /&gt;    }&lt;br /&gt;    no = count - no ;&lt;br /&gt;    &lt;br /&gt;    QString order = &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;[ &amp;quot;&lt;/span&gt; +&lt;br /&gt;                    QString::number( no ) +&lt;br /&gt;                    &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;/ &amp;quot;&lt;/span&gt; +&lt;br /&gt;                    QString::number( count ) +&lt;br /&gt;                    &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;] &amp;quot;&lt;/span&gt; ;&lt;br /&gt;     &lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回尺寸資訊  &lt;br /&gt;&lt;/span&gt;    m_size-&amp;gt;scale( pic.size().width(), pic.size().height(), Qt::IgnoreAspectRatio ) ;&lt;br /&gt;                &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;Qt的label認得html標籤，可直接使用於字串當中。 &lt;br /&gt;&lt;/span&gt;    emit fileNameChanged( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;center&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;font color=blue&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;                          m_fileName +&lt;br /&gt;                          &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;/font&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    emit fileInfoChanged( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;center&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;font color=green&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;                          order + &lt;br /&gt;                          &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;( 100% ) &amp;quot;&lt;/span&gt; + &lt;br /&gt;                          strFileInfo +&lt;br /&gt;                          &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;/font&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;&lt;/span&gt; ) ; &lt;br /&gt;    emit pixmapChanged( pic ) ;&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#004040"&gt;moc_ButtonClicked.cpp：（由編譯器自己生成的代碼）&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="note"&gt;/****************************************************************************&lt;br /&gt;** Meta object code from reading C++ file &lt;span class="quot"&gt;&amp;#039;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;#039;&lt;/span&gt;&lt;br /&gt;**&lt;br /&gt;** Created: Mon Jun 14 10:24:20 2010&lt;br /&gt;**      by: The Qt Meta Object Compiler version 59 (Qt 4.3.3)&lt;br /&gt;**&lt;br /&gt;** WARNING! All changes made in&lt;span class="reservedWord"&gt; this &lt;/span&gt;file will be lost!&lt;br /&gt;*****************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#if&lt;/span&gt; !defined(Q_MOC_OUTPUT_REVISION)&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;he header file &lt;span class="quot"&gt;&amp;#039;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;#039;&lt;/span&gt; doesn&amp;#039;t include &amp;lt;QObject&amp;gt;.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#elif&lt;/span&gt; Q_MOC_OUTPUT_REVISION != 59&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;his file was generated using the moc from 4.3.3. It&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;c&lt;b&gt;&lt;/b&gt;annot be used with the include files from this version of Qt.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;(&lt;b&gt;&lt;/b&gt;The moc has changed too much.)&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;u&lt;span class="reservedWord"&gt;int &lt;/span&gt;&lt;/span&gt;qt_meta_data_ButtonClicked[] = {&lt;br /&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;content:&lt;br /&gt;&lt;/span&gt;       1,       &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;revision&lt;br /&gt;&lt;/span&gt;       0,       &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;classname&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;classinfo&lt;br /&gt;&lt;/span&gt;       9,   10, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;methods&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;properties&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// enums/sets&lt;br /&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;signals: signature, parameters, type, tag, flags&lt;br /&gt;&lt;/span&gt;      24,   15,   14,   14, 0x05,&lt;br /&gt;      49,   15,   14,   14, 0x05,&lt;br /&gt;      78,   74,   14,   14, 0x05,&lt;br /&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;slots: signature, parameters, type, tag, flags&lt;br /&gt;&lt;/span&gt;     101,   14,   14,   14, 0x0a,&lt;br /&gt;     118,  111,   14,   14, 0x0a,&lt;br /&gt;     142,  138,   14,   14, 0x0a,&lt;br /&gt;     161,  156,   14,   14, 0x0a,&lt;br /&gt;     190,  185,   14,   14, 0x0a,&lt;br /&gt;     235,  230,   14,   14, 0x0a,&lt;br /&gt;&lt;br /&gt;       0        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;eod&lt;br /&gt;&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;qt_meta_stringdata_ButtonClicked[] = {&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked\0\0fileName\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;f&lt;b&gt;&lt;/b&gt;ileNameChanged(QString)\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;f&lt;b&gt;&lt;/b&gt;ileInfoChanged(QString)\0pic\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;ixmapChanged(QPixmap)\0clicked()\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;w&lt;b&gt;&lt;/b&gt;idget\0setWidget(QWidget*)\0dir\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;s&lt;b&gt;&lt;/b&gt;etDir(QDir*)\0list\0setList(QFileInfoList*)\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;i&lt;b&gt;&lt;/b&gt;ter\0setIter(QFileInfoList::const_iterator*)\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;s&lt;b&gt;&lt;/b&gt;ize\0setSize(QSize*)\0&amp;quot;&lt;/span&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; QMetaObject ButtonClicked::staticMetaObject = {&lt;br /&gt;    { &amp;amp;QObject::staticMetaObject, qt_meta_stringdata_ButtonClicked,&lt;br /&gt;      qt_meta_data_ButtonClicked, 0 }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; QMetaObject *ButtonClicked::metaObject() &lt;span class="reservedWord"&gt;const&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;&amp;amp;staticMetaObject;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;*ButtonClicked::qt_metacast(&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*_clname)&lt;br /&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(!_clname) &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(!strcmp(_clname, qt_meta_stringdata_ButtonClicked))&lt;br /&gt; &lt;span class="reservedWord"&gt;return &lt;/span&gt;static_cast&amp;lt;void*&amp;gt;(&lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt; ButtonClicked*&amp;gt;(this));&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;QObject::qt_metacast(_clname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;ButtonClicked::qt_metacall(QMetaObject::Call _c, &lt;span class="reservedWord"&gt;int &lt;/span&gt;_id, &lt;span class="reservedWord"&gt;void &lt;/span&gt;**_a)&lt;br /&gt;{&lt;br /&gt;    _id = QObject::qt_metacall(_c, _id, _a);&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(_id &amp;lt; 0)&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;_id;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(_c == QMetaObject::InvokeMetaMethod) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;switch &lt;/span&gt;(_id) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;0: fileNameChanged((*reinterpret_cast&amp;lt; QString(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;1: fileInfoChanged((*reinterpret_cast&amp;lt; QString(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;2: pixmapChanged((*reinterpret_cast&amp;lt; QPixmap(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;3: clicked();&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;4: setWidget((*reinterpret_cast&amp;lt; QWidget*(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;5: setDir((*reinterpret_cast&amp;lt; QDir*(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;6: setList((*reinterpret_cast&amp;lt; QFileInfoList*(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;7: setIter((*reinterpret_cast&amp;lt; QFileInfoList::&lt;span class="reservedWord"&gt;const&lt;/span&gt;_iterator*(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;8: setSize((*reinterpret_cast&amp;lt; QSize*(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        _id -= 9;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;_id;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;SIGNAL 0&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::fileNameChanged(QString _t1)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;*_a[] = { 0, &lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt;void*&amp;gt;(reinterpret_cast&amp;lt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; void*&amp;gt;(&amp;amp;_t1)) };&lt;br /&gt;    QMetaObject::activate(this, &amp;amp;staticMetaObject, 0, _a);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;SIGNAL 1&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::fileInfoChanged(QString _t1)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;*_a[] = { 0, &lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt;void*&amp;gt;(reinterpret_cast&amp;lt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; void*&amp;gt;(&amp;amp;_t1)) };&lt;br /&gt;    QMetaObject::activate(this, &amp;amp;staticMetaObject, 1, _a);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;SIGNAL 2&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::pixmapChanged(QPixmap _t1)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;*_a[] = { 0, &lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt;void*&amp;gt;(reinterpret_cast&amp;lt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; void*&amp;gt;(&amp;amp;_t1)) };&lt;br /&gt;    QMetaObject::activate(this, &amp;amp;staticMetaObject, 2, _a);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: teal;"&gt;完整程式碼+執行檔：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://popodragon.myweb.hinet.net/Program/Qt_imageViewer_v_0_1.rar"&gt;http://popodragon.myweb.hinet.net/Program/Qt_imageViewer_v_0_1.rar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-686689871156204479?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/686689871156204479/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-image-viewer-v01.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/686689871156204479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/686689871156204479'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-image-viewer-v01.html' title='Qt習作之簡易圖像瀏覽器 v0.1'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_bi6B4jS4CJw/TBXmgGmGdcI/AAAAAAAAT44/9yIDr1wyR8o/s72-c/Image.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-9119732753032480090</id><published>2010-06-13T02:32:00.014+08:00</published><updated>2010-08-05T08:45:20.624+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>Qt習作之圖片顯示</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TBPtvRSpZ1I/AAAAAAAAT4s/H5QQadyzi1w/s1600-h/Image.jpg"&gt;&lt;img title="押切蓮介__黃昏特攻隊" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="583" alt="押切蓮介__黃昏特攻隊" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TBPtwTxzX4I/AAAAAAAAT4w/S5ewaqK51FU/Image.jpg?imgmax=800" width="595" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;照例，練習GUI Framework都先從顯示圖片開始著手。&lt;/p&gt;&lt;p&gt;稍微碰了一下Qt，感覺上很多細節都很人性化，譬如說不用指定window，一個label或一個pushButton都可以自己形成視窗，所以一個最簡單的Hello World可以只有短短四行程式碼，的確正如廣告說的，需要輸入的程式碼變少了。&lt;/p&gt;&lt;p&gt;所編繹出來的檔案大小也夠精練，小程式都可控制在100k以內，與GTK+相比不遑多讓，執行速度更比GTK+快上許多，兼具精簡與效能，難怪會成為目前GUI Framework中的大熱門，名氣得來一點都不僥倖。&lt;/p&gt;&lt;p&gt;目前對Qt的印象非常良好，以後就專門拿它來練習C++。&lt;/p&gt;&lt;p&gt;若真的要挑剔，那大概只能說Qt的Signal/Slot機制並沒有那麼直覺，其中Signal的程式碼還需要qmake生成才能順利編譯。相比於GTK+簡單明瞭的callback函式，實在複雜許多。當然這只是一時的感想，之後若更進一步認識，或許就會改變看法了。&lt;/p&gt;&lt;p&gt;這支小程式實作過程中，參考了&lt;a title="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/Qt4Gossip.html" href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/Qt4Gossip.html"&gt;&lt;/a&gt;&lt;a href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/Qt4Gossip.html"&gt;Qt4學習筆記&lt;/a&gt;&lt;/a&gt;其中的幾個範例程式，真的得說，這個教學網站對我幫助很大，若沒有它，恐怕沒辦法這個快理出頭緒來，感謝哪。&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:a1fe1f6b-082e-488e-bc73-27e26acac241" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;More...&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;&lt;u&gt;main.cpp：&lt;/u&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;圖片顯示小程式 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QApplication&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QBitmap&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QLabel&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QPushButton&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QVBoxLayout&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;QString toUnicode( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*strText )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使之可以顯示中文（big5轉unicode） &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;QString::fromLocal8Bit( strText ) ;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main( &lt;span class="reservedWord"&gt;int &lt;/span&gt;argc, &lt;span class="reservedWord"&gt;char &lt;/span&gt;*argv[] ) &lt;br /&gt;{&lt;br /&gt;    QApplication app(argc, argv);&lt;br /&gt;     &lt;br /&gt;    QWidget *window = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QWidget;&lt;br /&gt;    window-&amp;gt;setWindowTitle( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片顯示小程式&amp;quot;&lt;/span&gt; ) );&lt;br /&gt;    &lt;br /&gt;    QLabel *labelText = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QLabel( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片地址&amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;    QLabel *labelImage = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QLabel( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    &lt;br /&gt;    QPushButton *btn = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QPushButton( toUnicode( &lt;span class="quot"&gt;&amp;quot;開&lt;b&gt;&lt;/b&gt;啟檔案&amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;     &lt;br /&gt;    QVBoxLayout *vBoxLayout = &lt;span class="reservedWord"&gt;new &lt;/span&gt;QVBoxLayout;&lt;br /&gt;    window-&amp;gt;setLayout(vBoxLayout);&lt;br /&gt;    &lt;br /&gt;    vBoxLayout-&amp;gt;addWidget(btn);&lt;br /&gt;    vBoxLayout-&amp;gt;addWidget(labelText);   &lt;br /&gt;    vBoxLayout-&amp;gt;addWidget(labelImage);&lt;br /&gt;         &lt;br /&gt;    ButtonClicked bc ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;Signal與Slot的類別 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    bc.setWidget( window ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;用來修改window視窗大小與標題 &lt;br /&gt;&lt;/span&gt; &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將btn-&amp;gt;clicked()的訊號送往bc.clicked() &lt;br /&gt;&lt;/span&gt;    QObject::connect( btn, SIGNAL( clicked() ), &amp;amp;bc, SLOT( clicked() ) ) ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將bc.fileNameChanged()的訊號送往label.setText() &lt;br /&gt;&lt;/span&gt;    QObject::connect( &amp;amp;bc, SIGNAL( fileNameChanged( QString ) ), &lt;br /&gt;                        labelText, SLOT( setText( QString ) ) ) ;&lt;br /&gt;                        &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;將bc.pixmapChanged()的訊號送往labelImage.setPixmap() &lt;br /&gt;&lt;/span&gt;    QObject::connect( &amp;amp;bc, SIGNAL( pixmapChanged( QPixmap ) ), &lt;br /&gt;                        labelImage, SLOT( setPixmap( QPixmap ) ) ) ;&lt;br /&gt;    &lt;br /&gt;    window-&amp;gt;resize( 200, 100 );&lt;br /&gt;    window-&amp;gt;show();&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;app.exec();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#0000a0"&gt;ButtonClicked.h：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;ndef&lt;/span&gt; BUTTON_CLICKED_H&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; BUTTON_CLICKED_H&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QObject&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QString&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QFileDialog&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;QWidget&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;QString toUnicode( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*strText ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;big5編碼轉為unicode&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;ButtonClicked : &lt;span class="reservedWord"&gt;public &lt;/span&gt;QObject {&lt;br /&gt;    Q_OBJECT&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;成員初始列（member initialization list），效率高於傳統賦值 &lt;br /&gt;&lt;/span&gt;    ButtonClicked() : m_fileName( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ), m_widget( &lt;span class="reservedWord"&gt;NULL &lt;/span&gt;) { }&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;public &lt;/span&gt;slots:&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;clicked();&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;setWidget( QWidget *widget ) { m_widget = widget ; }&lt;br /&gt;&lt;br /&gt;signals:&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;fileNameChanged( QString fileName ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回新的檔案名稱 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;pixmapChanged( QPixmap pic ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;傳回新的圖片檔 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;private:&lt;br /&gt;    QString m_fileName ;&lt;br /&gt;    QWidget *m_widget ;&lt;br /&gt;    &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#0000a0"&gt;ButtonClicked.cpp：&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; overflow-y:hidden; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::clicked() {&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;跳出開啟檔案視窗 &lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;目錄以m_fileName作為參數，作用是可以保存上一次的讀取目錄。 &lt;br /&gt;&lt;/span&gt;    m_fileName = QFileDialog::getOpenFileName( 0, &lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;pen Image&amp;quot;&lt;/span&gt;,&lt;br /&gt;               m_fileName, &lt;span class="quot"&gt;&amp;quot;I&lt;b&gt;&lt;/b&gt;mage Files (*.png *.xpm *.jpg *.bmp) &amp;quot;&lt;/span&gt;) ;&lt;br /&gt;    &lt;br /&gt;    QPixmap pic( m_fileName ) ;&lt;br /&gt;     &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;隨圖片大小而改變視窗大小，但不知為何無法及時反應，需等下一次開檔才能重設大小&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;使用update(), repaint(), hide()+show(), showMinimized()+showNormal()都沒有用...&lt;br /&gt;&lt;/span&gt;    m_widget-&amp;gt;resize( pic.width(), pic.height()+50 ) ;  &lt;br /&gt;    m_widget-&amp;gt;setWindowTitle( toUnicode( &lt;span class="quot"&gt;&amp;quot;圖&lt;b&gt;&lt;/b&gt;片尺寸 :  長度:&amp;quot;&lt;/span&gt; ) + &lt;br /&gt;                              QString::number( pic.height() ) + &lt;br /&gt;                              toUnicode( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt; ,  寬度:&amp;quot;&lt;/span&gt; ) +&lt;br /&gt;                              QString::number( pic.width() )   );&lt;br /&gt;                &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;Qt的label認得html標籤，可直接使用於字串當中。 &lt;br /&gt;&lt;/span&gt;    emit fileNameChanged( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;font color=blue&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;                          m_fileName +&lt;br /&gt;                          &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;lt;/font&amp;gt;&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    emit pixmapChanged( pic ) ;&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#0000a0"&gt;moc_ButtonClicked.cpp：（由編譯器自己生成的程式碼）&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;!--程式碼開始--&gt;&lt;div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="codeStyle" style="width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center ; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre class="codeStyle" style="width:540px; overflow-y:hidden; "&gt;&lt;span class="note"&gt;/****************************************************************************&lt;br /&gt;** Meta object code from reading C++ file &lt;span class="quot"&gt;&amp;#039;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;#039;&lt;/span&gt;&lt;br /&gt;**&lt;br /&gt;** Created: Sun Jun 13 00:28:56 2010&lt;br /&gt;**      by: The Qt Meta Object Compiler version 59 (Qt 4.3.3)&lt;br /&gt;**&lt;br /&gt;** WARNING! All changes made in&lt;span class="reservedWord"&gt; this &lt;/span&gt;file will be lost!&lt;br /&gt;*****************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#if&lt;/span&gt; !defined(Q_MOC_OUTPUT_REVISION)&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;he header file &lt;span class="quot"&gt;&amp;#039;B&lt;b&gt;&lt;/b&gt;uttonClicked.h&amp;#039;&lt;/span&gt; doesn&amp;#039;t include &amp;lt;QObject&amp;gt;.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#elif&lt;/span&gt; Q_MOC_OUTPUT_REVISION != 59&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;his file was generated using the moc from 4.3.3. It&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;c&lt;b&gt;&lt;/b&gt;annot be used with the include files from this version of Qt.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#error&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;(&lt;b&gt;&lt;/b&gt;The moc has changed too much.)&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;u&lt;span class="reservedWord"&gt;int &lt;/span&gt;&lt;/span&gt;qt_meta_data_ButtonClicked[] = {&lt;br /&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;content:&lt;br /&gt;&lt;/span&gt;       1,       &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;revision&lt;br /&gt;&lt;/span&gt;       0,       &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;classname&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;classinfo&lt;br /&gt;&lt;/span&gt;       3,   10, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;methods&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;properties&lt;br /&gt;&lt;/span&gt;       0,    0, &lt;span class="note"&gt;// enums/sets&lt;br /&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;signals: signature, parameters, type, tag, flags&lt;br /&gt;&lt;/span&gt;      24,   15,   14,   14, 0x05,&lt;br /&gt;      53,   49,   14,   14, 0x05,&lt;br /&gt;&lt;br /&gt; &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;slots: signature, parameters, type, tag, flags&lt;br /&gt;&lt;/span&gt;      76,   14,   14,   14, 0x0a,&lt;br /&gt;&lt;br /&gt;       0        &lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;eod&lt;br /&gt;&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;qt_meta_stringdata_ButtonClicked[] = {&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;uttonClicked\0\0fileName\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;f&lt;b&gt;&lt;/b&gt;ileNameChanged(QString)\0pic\0&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;ixmapChanged(QPixmap)\0clicked()\0&amp;quot;&lt;/span&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; QMetaObject ButtonClicked::staticMetaObject = {&lt;br /&gt;    { &amp;amp;QObject::staticMetaObject, qt_meta_stringdata_ButtonClicked,&lt;br /&gt;      qt_meta_data_ButtonClicked, 0 }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; QMetaObject *ButtonClicked::metaObject() &lt;span class="reservedWord"&gt;const&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;&amp;amp;staticMetaObject;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;*ButtonClicked::qt_metacast(&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*_clname)&lt;br /&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(!_clname) &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(!strcmp(_clname, qt_meta_stringdata_ButtonClicked))&lt;br /&gt;	&lt;span class="reservedWord"&gt;return &lt;/span&gt;static_cast&amp;lt;void*&amp;gt;(&lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt; ButtonClicked*&amp;gt;(this));&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;QObject::qt_metacast(_clname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;ButtonClicked::qt_metacall(QMetaObject::Call _c, &lt;span class="reservedWord"&gt;int &lt;/span&gt;_id, &lt;span class="reservedWord"&gt;void &lt;/span&gt;**_a)&lt;br /&gt;{&lt;br /&gt;    _id = QObject::qt_metacall(_c, _id, _a);&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(_id &amp;lt; 0)&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;_id;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(_c == QMetaObject::InvokeMetaMethod) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;switch &lt;/span&gt;(_id) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;0: fileNameChanged((*reinterpret_cast&amp;lt; QString(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;1: pixmapChanged((*reinterpret_cast&amp;lt; QPixmap(*)&amp;gt;(_a[1])));&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;2: clicked();&lt;span class="reservedWord"&gt; break&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        _id -= 3;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;_id;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;SIGNAL 0&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::fileNameChanged(QString _t1)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;*_a[] = { 0, &lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt;void*&amp;gt;(reinterpret_cast&amp;lt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; void*&amp;gt;(&amp;amp;_t1)) };&lt;br /&gt;    QMetaObject::activate(this, &amp;amp;staticMetaObject, 0, _a);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/B&gt;SIGNAL 1&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;ButtonClicked::pixmapChanged(QPixmap _t1)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;*_a[] = { 0, &lt;span class="reservedWord"&gt;const&lt;/span&gt;_cast&amp;lt;void*&amp;gt;(reinterpret_cast&amp;lt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; void*&amp;gt;(&amp;amp;_t1)) };&lt;br /&gt;    QMetaObject::activate(this, &amp;amp;staticMetaObject, 1, _a);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;!--程式碼結束--&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-9119732753032480090?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/9119732753032480090/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-show-image.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/9119732753032480090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/9119732753032480090'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt-show-image.html' title='Qt習作之圖片顯示'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_bi6B4jS4CJw/TBPtwTxzX4I/AAAAAAAAT4w/S5ewaqK51FU/s72-c/Image.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-4225839382722071647</id><published>2010-06-11T18:13:00.014+08:00</published><updated>2010-07-06T16:38:47.276+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>建立Qt4 + Dev C++的開發環境</title><content type='html'>&lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TBIMKykvUqI/AAAAAAAAT4U/BEWYh6ieAww/s1600-h/QT-4.61%5B2%5D.jpg"&gt;&lt;img title="QT-4.61" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="250" alt="QT-4.61" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TBIMLnkaybI/AAAAAAAAT4Y/AMxxKW8e9uA/QT-4.61_thumb%5B2%5D.jpg?imgmax=800" width="500" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;&lt;u&gt;執行環境：&lt;/u&gt;&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;安裝Qt runtime（檔名：qt-runtime-4.x.x-full-setup.exe），安裝完即可執行。 &lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;開發環境：          &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;1.請至&lt;a title="http://ftp3.ie.freebsd.org/pub/trolltech/pub/qt/source/ " href="http://ftp3.ie.freebsd.org/pub/trolltech/pub/qt/source/&amp;nbsp;"&gt;http://ftp3.ie.freebsd.org/pub/trolltech/pub/qt/source/ &lt;/a&gt; 下載適合版本（檔名：qt-win-opensource-4.x.x-mingw.exe）並安裝。     &lt;br /&gt;PS：我的版本是4.3.3，安裝目錄為D:\Qt\4.3.3，若與我的版本或目錄不同，需修改以下相關參數內容。 &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:c73af9f1-40e3-4730-bf8b-fe5f2cf9eff6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;2. 在我的電腦按右鍵-&amp;gt;內容-&amp;gt;進階-&amp;gt;環境變數 &lt;/p&gt;&lt;p&gt;編輯PATH，增加如下的變數值：    &lt;br /&gt;&lt;strong&gt;D:\Qt\4.3.3\bin;D:\Dev-Cpp\bin;D:\Dev-Cpp\mingw32\bin;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;新增QMAKESPEC變數，變數值如下：    &lt;br /&gt;&lt;strong&gt;win32-g++&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;新增變數QTDIR，變數值如下：    &lt;br /&gt;&lt;strong&gt;D:\Qt\4.3.3&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;3.至Dev C++的模板目錄（例如D:\Dev-Cpp\Templates）底下，新增如下兩個檔案： &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#800040"&gt;QT4.template：&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[Template]      &lt;br /&gt;ver=1       &lt;br /&gt;Name=QT4 Application       &lt;br /&gt;Description=This is a QT4 Application project.       &lt;br /&gt;Catagory=GUI &lt;/p&gt;&lt;p&gt;[Unit0]      &lt;br /&gt;CppName=main.cpp       &lt;br /&gt;Cpp=Qt4_helloWorld.txt &lt;/p&gt;&lt;p&gt;[Project]      &lt;br /&gt;UnitCount=1       &lt;br /&gt;Type=0       &lt;br /&gt;IsCpp=1       &lt;br /&gt;Compiler=       &lt;br /&gt;CppCompiler=-DWIN32_@@__@@__@@_       &lt;br /&gt;Linker=D:/Qt/4.3.3/lib/libQt3Support4.a_@@_D:/Qt/4.3.3/lib/libQtAssistantClient4.a_@@_D:/Qt/4.3.3/lib/libQtCore4.a_@@_D:/Qt/4.3.3/lib/libQtDesigner4.a_@@_D:/Qt/4.3.3/lib/libQtDesignerComponents4.a_@@_D:/Qt/4.3.3/lib/libQtGui4.a_@@_D:/Qt/4.3.3/lib/libqtmain.a_@@_D:/Qt/4.3.3/lib/libQtNetwork4.a_@@_D:/Qt/4.3.3/lib/libQtOpenGL4.a_@@_D:/Qt/4.3.3/lib/libQtSql4.a_@@_D:/Qt/4.3.3/lib/libQtXml4.a_@@_      &lt;br /&gt;Includes=D:/Qt/4.3.3/include;D:/Qt/4.3.3/include/Qt;D:/Qt/4.3.3/include/Qt3Support;D:/Qt/4.3.3/include/QtAssistant;D:/Qt/4.3.3/include/QtCore;D:/Qt/4.3.3/include/QtDesigner;D:/Qt/4.3.3/include/QtGui;D:/Qt/4.3.3/include/QtDBus;D:/Qt/4.3.3/include/QtMotif;D:/Qt/4.3.3/include/QtNetwork;D:/Qt/4.3.3/include/QtSvg;D:/Qt/4.3.3/include/QtOpenGL;D:/Qt/4.3.3/include/QtSql;D:/Qt/4.3.3/include/QtTest;D:/Qt/4.3.3/include/QtUiTools;D:/Qt/4.3.3/include/QtXml      &lt;br /&gt;Libs=D:/Qt/4.3.4/lib       &lt;br /&gt;CompilerSettings=1000001000000000000000       &lt;br /&gt;CompilerSet=2       &lt;br /&gt;IncludeVersionInfo=0       &lt;br /&gt;SupportXPThemes=0       &lt;br /&gt;Name=QT Application project       &lt;br /&gt;MakeIncludes=QT_UIMake.mak       &lt;br /&gt;UseCustomMakefile=1       &lt;br /&gt;CustomMakefile=Makefile.Release &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#800040"&gt;QT4_helloWorld.txt：&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;#include &amp;lt;QApplication&amp;gt;      &lt;br /&gt;#include &amp;lt;QPushButton&amp;gt; &lt;/p&gt;&lt;p&gt;int main(int argc, char *argv[])      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; QApplication app(argc, argv); &lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; QPushButton hello(&amp;quot;Hello world!&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; hello.resize(100, 30); &lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; hello.show();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return app.exec();       &lt;br /&gt;} &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;4.開啟Dev C++，工具-&amp;gt;編譯器選項-&amp;gt;目錄 &lt;/p&gt;&lt;p&gt;二進位檔新增D:\Qt\4.3.3\bin    &lt;br /&gt;函式庫新增D:\Qt\4.3.3\lib     &lt;br /&gt;C++引入檔新增D:\Qt\4.3.3\include &lt;/p&gt;&lt;p&gt;5.開啟Dev C++，開新檔案-&amp;gt;專案-&amp;gt;GUI-&amp;gt;QT4 Application，即可開始編寫Qt4程式！&lt;/p&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;另外須提醒的是，Dev C++所編譯出來的Qt程式檔雖然已經是release版本，但似乎沒有經過最佳化，檔案大小仍有往下壓縮的空間。&lt;br /&gt;&lt;br /&gt;以最簡單的Hello World為例，Dev C++編譯出的程式大小為100k，但純以qmake編譯卻只有25k，足足差了四倍。&lt;br /&gt;&lt;br /&gt;所以在程式確定撰寫完畢後，建議可以透過以下的cmd批次檔進行最終編譯，以取得最精簡的程式大小。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #674ea7;"&gt;&lt;b&gt;qmake.cmd：&lt;/b&gt;&lt;/div&gt;&lt;blockquote&gt;@echo off&lt;br /&gt;&lt;br /&gt;set QTDIR=D:\Qt\4.3.3&lt;br /&gt;set PATH=D:\Qt\4.3.3\bin;D:\Dev-Cpp\bin;%SystemRoot%\tmp;%path%&lt;br /&gt;set QMAKESPEC=win32-g++&lt;br /&gt;&lt;br /&gt;if exist release del release\*.* /q&lt;br /&gt;if exist debug del debug\*.* /q&lt;br /&gt;&lt;br /&gt;qmake -project&lt;br /&gt;qmake&lt;br /&gt;make release&lt;/blockquote&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;b style="background-color: black;"&gt;&lt;span style="background-color: black; color: white;"&gt;Dev C++編譯後若出現[Linker error] undefined reference to vtable for ...&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;基本上，只要有用到Q_OBJECT這個巨集，都難逃此一窘境。原本Qt的qmake會生成一個moc_xxx.cpp檔，並自動連結起來，使之可以正確編譯；但Dev C++卻沒有這種機制，所以辛苦點，需要手動加入。以下提供兩種解決方案。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="background-color: #b4a7d6;"&gt;&lt;span style="background-color: #674ea7; color: #eeeeee;"&gt;解決方案一：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;1.直接使用上面提及的cmd批次檔，與程式碼放在同個資料夾內點兩下執行。&lt;br /&gt;&lt;br /&gt;2.打開目錄下新生成的release資料夾，將moc_xxx.cpp複製到原本程式碼的目錄下。&lt;br /&gt;&lt;br /&gt;3.將moc_xxx.cpp加入Dev C++專案，將#include "../xxx.h"改為#include "xxx.h"，最後重新編譯即可。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="background-color: #b4a7d6;"&gt;&lt;span style="background-color: #674ea7; color: #eeeeee;"&gt;解決方案二： &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;1.開始-&amp;gt;程式集-&amp;gt;Qt by Trolltech v4.3.3（opensource）-&amp;gt;執行Qt 4.3.3 Command Prompt&lt;br /&gt;&lt;br /&gt;2.會開啟一個cmd視窗，以cd指令進入自己的程式碼目錄。&lt;br /&gt;&lt;br /&gt;3.moc xxx.h&lt;br /&gt;&lt;br /&gt;4.在cmd視窗中按右鍵-&amp;gt;全選-&amp;gt;按CTRL+C。&lt;br /&gt;&lt;br /&gt;5.在Dev C++的專案中新開檔案，取名為moc_xxx.cpp，將之前的複製內容貼上，並儲存。&lt;br /&gt;&lt;br /&gt;6.OK，可以正確編譯了。&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;b style="background-color: black;"&gt;&lt;span style="background-color: black; color: white;"&gt;使用Qt Designer設計介面&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.以Qt Designer設計好界面，存成.ui檔。&lt;br /&gt;&lt;br /&gt;2.開啟Qt 4.3.3 Command Prompt，進入專案路徑，輸入以下指令：&lt;br /&gt;&lt;b&gt;uic  -o  輸出的檔名.h  設計好的介面檔.ui&lt;/b&gt;&lt;br /&gt;ex. uic -o form_1.h form_1.ui&lt;br /&gt;&lt;br /&gt;3.專案加入生成的.h檔，並使用該.h檔中的class建構程式，例如：&lt;br /&gt;&lt;pre&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;    QApplication app(argc, argv);&lt;br /&gt;    Ui_Dialog ui;&lt;br /&gt;    QDialog Dialog;&lt;br /&gt;    ui.setupUi(&amp;Dialog);&lt;br /&gt;    Dialog.show();&lt;br /&gt;    return app.exec();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-4225839382722071647?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/4225839382722071647/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt4-development-with-dev-c.html#comment-form' title='6 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4225839382722071647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4225839382722071647'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/qt4-development-with-dev-c.html' title='建立Qt4 + Dev C++的開發環境'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TBIMLnkaybI/AAAAAAAAT4Y/AMxxKW8e9uA/s72-c/QT-4.61_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-6262499130959254694</id><published>2010-06-11T07:37:00.005+08:00</published><updated>2010-06-11T20:01:14.240+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>四皇？四寇？</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TBGQOW_wn4I/AAAAAAAAT38/HWhSYwKVEzE/s1600-h/Water_Margin_001%5B4%5D.jpg"&gt;&lt;img title="Water_Margin_001" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="269" alt="Water_Margin_001" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TBGQPKmp-eI/AAAAAAAAT4A/CIm7nPF_Zao/Water_Margin_001_thumb%5B2%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;最近在看胡適的書，恰好看到胡適所作的《水滸傳考證》，裡面內容很有意思，指出金聖嘆眉批的缺點，說他有過時的八股選家氣，也有迂腐的理學先生氣，更過度詮釋本文，顛弄作者的原意，這些部分都不足取。所以他建議一般讀者初次碰《水滸傳》，應該先從未標註金聖嘆眉批，且加入新式標點符號的版本開始看起。直接從原文去感受水滸傳的魅力。 &lt;/p&gt;&lt;p&gt;而後他更蒐集許多《水滸傳》相關史料，開始胡適最擅長也最熱衷的考據工作。 &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:e86f131d-a75f-49b8-8fb2-9288f942d1d2" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;及時雨宋江乃一歷史人物，在《宋史》里現蹤數次： &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;「淮南盜宋江等犯淮陽軍，遣將討捕，又犯京東、河北，入楚、海州界，命知州張叔夜招降之。」（宋史二十二） &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;「宋江寇京東，蒙上書言：『江以三十六人橫行齊、魏，官軍數萬無敢抗者，其才必過人。今青溪盜起，不若赦江，使討方臘以自贖。』帝曰：『蒙居外不忘君，忠臣也。』命知東平府，未赴而卒，年六十八。贈開府儀同三司，諡文穆。」（宋史三百五十一） &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;「宋江起河朔，轉略十郡，官軍莫敢嬰其鋒。聲言將至，叔夜使間者覘所向，賊徑趨海瀕 ，劫鉅舟十餘，載擄獲。於是募死士得千人，設伏近城，而出輕兵距海，誘之戰。先匿 壯卒海旁，伺兵合，舉火焚其舟。賊聞之，皆無鬥志，伏兵乘之，擒其副賊，江乃降。」（宋史三百五十三） &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;也就是說根據史實，宋江一干人等原為三十六人，後來民間慢慢流傳，才演變成水滸傳中的百零八人。 &lt;/p&gt;&lt;p&gt;「江以三十六人橫行齊、魏，官軍數萬無敢抗者」、「宋江起河朔，轉略十郡，官軍莫敢嬰其鋒。」，從這幾段敘述，我們可以看到宋江等人在當時是何等威風，以一敵萬，完全不把官府放在眼裡。是之後遭大軍圍剿，才降服於朝廷。 &lt;/p&gt;&lt;p&gt;而後的民間野史《宣和遺事》，更把此三十六人均冠上稱號：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;「宋江見官兵已退，走出廟來，拜謝玄女娘娘；則見香案上一聲響喨，打一看時，有一卷文書在上。宋江纔展開看了，認得是個天書；又寫著三十六個姓名，又題著四句道，詩曰：&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;       &lt;br /&gt;破國因山木，兵刀用水工；        &lt;br /&gt;一朝充將領，海內聳威風。&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;       &lt;br /&gt;宋江讀了，口中不說，心下思量：『這四句分明是說了我裡姓名。』又把開天書一卷，仔細觀覷，見有三十六將的姓名。那三十六人道個甚底？&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;       &lt;br /&gt;&lt;strong&gt;智多星吳加亮 玉麒麟盧進義         &lt;br /&gt;青面獸楊志 混江龍李海          &lt;br /&gt;九紋龍史進 入雲龍公孤勝          &lt;br /&gt;浪裡百跳張順 霹靂火秦明          &lt;br /&gt;活閻羅阮小七 立地太歲阮小五          &lt;br /&gt;短命二郎阮進 大刀關必勝          &lt;br /&gt;豹子頭林沖 黑旋風李逵          &lt;br /&gt;小旋風柴進 金鎗手徐寧          &lt;br /&gt;撲天鵰李應 赤髮鬼劉唐          &lt;br /&gt;一撞直董平 插翅虎雷橫          &lt;br /&gt;美髯公朱同 神行太保戴宗          &lt;br /&gt;賽關索王雄 病尉遲孫立          &lt;br /&gt;小李廣花榮 沒羽箭張青          &lt;br /&gt;沒遮攔穆橫 浪子燕青          &lt;br /&gt;花和尚魯智深 行者武松          &lt;br /&gt;鐵鞭呼延綽 急先鋒索超          &lt;br /&gt;命二郎石秀 火舡工張岑          &lt;br /&gt;摸著雲杜千 鐵天王晁蓋&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;         &lt;br /&gt;&lt;/strong&gt; 宋江看了人名，未後有一行字寫道：『天書付天罡院三十六員猛將，使呼保義宋江為帥，廣行忠義，殄滅奸邪。」宋江看了姓名：『見梁山濼上見有二十四人，和俺共二十五人了。』」（宣和遺事第二章 亨集）&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/TBGQRhtjgcI/AAAAAAAAT4E/kStaoQRVb1k/s1600-h/Water_Margin_002%5B4%5D.jpg"&gt;&lt;img title="Water_Margin_002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="457" alt="Water_Margin_002" src="http://lh6.ggpht.com/_bi6B4jS4CJw/TBGQTEN4-cI/AAAAAAAAT4I/e8Tcigra84U/Water_Margin_002_thumb%5B2%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;之後胡適又考證坊間流傳的《續水滸傳》，又名《征四寇》。他說四寇之名來源甚早，首次出現於《宣和遺事》： &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;「宋江統率三十六將，往朝東嶽，賽取金爐心願。朝廷無其奈何，只得出榜招諭宋江等。有那元帥姓張名叔夜的，是世代將門之子，前來招誘宋江和那三十六人歸順宋朝，各受武功大誥敕，分注諸路巡檢使去也。因此三路之寇，悉得平定。後遣宋江收方臘有功，封節度使。」（宣和遺事第二章 亨集）&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;根據《宣和遺事》，宋江等三十六將威猛無比，朝廷無其奈何，只好使出招降手段，讓他們從人人得而誅之的山賊，轉變為正義的化身，一腳踏入官府門第，為朝廷賣命，更與昔日同行反目，接連討伐三路之寇和方臘，即四寇——&lt;strong&gt;遼、田虎、王慶、方臘&lt;/strong&gt;。 &lt;/p&gt;&lt;p&gt;宋江的生平固然深富傳奇性，但這並非歷史上頭一樁由黑洗白的案例，但卻因為後來民間渲染，與水滸傳的推波助瀾之下，成為今天我們最熟悉的歷史故事。 &lt;/p&gt;&lt;p&gt;這同時也讓人聯想到這幾年最火熱的漫畫作品《ONE PIECE》，與《水滸傳》多有雷同，七武海接受世界政府的招降，放棄海賊身分，晉升官府，與諸位將軍平起平坐，這難道不像宋江等三十六員的翻版嗎？後來出現的四皇，威震一方，各有各的龐大勢力，這不正是官方語言中的四寇？而後政府為了抵禦白鬍子進攻，夥同七武海聯合峙敵，這與宋朝當年「以賊人對抗賊人」的策略又有何差別呢？ &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TBGQUppV0yI/AAAAAAAAT4M/a5X7-Ga24t0/s1600-h/Water_Margin_003%5B4%5D.jpg"&gt;&lt;img title="Water_Margin_003" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="411" alt="Water_Margin_003" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TBGQVQO5grI/AAAAAAAAT4Q/v5Tu1pTjkxg/Water_Margin_003_thumb%5B2%5D.jpg?imgmax=800" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;所以或許我們可以說，《ONE PIECE》就是一部類水滸傳故事。差別只在於據點從山頭換成海洋，稱號也從山寇變為海賊。其餘故事流程和主要人物性格方面並無多少差異，大致上可以用《宣和遺事》中，天書的末八字來概括——&lt;strong&gt;&lt;font color="#ff0000"&gt;廣行忠義，殄滅奸邪！&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-6262499130959254694?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/6262499130959254694/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/textual-research-of-water-margin-by-hu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6262499130959254694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/6262499130959254694'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/textual-research-of-water-margin-by-hu.html' title='四皇？四寇？'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TBGQPKmp-eI/AAAAAAAAT4A/CIm7nPF_Zao/s72-c/Water_Margin_001_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-4406152957118803921</id><published>2010-06-09T19:58:00.010+08:00</published><updated>2010-08-05T08:47:51.423+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>兩則關於C指標的小常識</title><content type='html'>對於指標一直是模模糊糊，剛翻書看到這兩段，釐清我之前一些錯誤觀念，趕緊抄錄起來，並順手寫個簡單範例作為應証。&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;    &lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center ; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; ; overflow-y:hidden;height:auto; "&gt;&lt;span class="note"&gt;/*　＊＊＊＊　兩則關於指標的小常識　＊＊＊＊　*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;using &lt;/span&gt;&lt;span class="reservedWord"&gt;namespace &lt;/span&gt;std ;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main()&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;─────────────────────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;───────　　第一則　　───────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;──────　　　　　　　　　──────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;──────　　指標和陣列　　──────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;─────────────────────&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;num[3][5] = { 1, 2, 3, 4, 5,&lt;br /&gt;                      6, 7, 8, 9, 10,&lt;br /&gt;                      11, 12, 13, 14, 15 } ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;1.num[i][j]和*(*(num + i ) + j )同義&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;2.*(*(num+1))和 *(*num+1)意義不同&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;  *(*(num+1))等同num[1]，即 {6,7,8,9,10}（指向6）&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;  *(*num+1)則等同num[0][1]，即 {2}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i, j ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;for &lt;/span&gt;( i = 0 ; i &amp;lt; 3 ; i ++ ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;for &lt;/span&gt;( j = 0 ; j &amp;lt; 5 ; j ++ ) {&lt;br /&gt;            &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;以 - 隔開，印出相同的兩數字。&lt;br /&gt;&lt;/span&gt;            cout &amp;lt;&amp;lt; num[i][j] &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;- &amp;quot;&lt;/span&gt; ;&lt;br /&gt;            cout &amp;lt;&amp;lt; *(*(num + i ) + j ) &amp;lt;&amp;lt; &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;t&amp;quot;&lt;/span&gt; ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;\t等於tab&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;        cout &amp;lt;&amp;lt; endl ;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;─────────────────────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;───────　　第二則　　───────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;──────　　　　　　　　　──────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;──────　　指標和字串　　──────&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;─────────────────────&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;str1和str2同樣指向字串的第一個字元，差別在於&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;str1可當左值（可修改），而str2的值則固定不可改。&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str1 = &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;his is string 1.&amp;quot;&lt;/span&gt; ;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;變數指標&lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;str2[] = &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;his is string 2.&amp;quot;&lt;/span&gt; ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;常數指標&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;while &lt;/span&gt;( *str1 )&lt;br /&gt;        cout &amp;lt;&amp;lt; *str1++ ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;印出：This is string 1.&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*pc ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;for &lt;/span&gt;( pc = str2 ; *pc ; pc ++ )&lt;br /&gt;        cout &amp;lt;&amp;lt; *pc ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;印出：This is string 2.&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0 ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-4406152957118803921?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/4406152957118803921/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/about-c-pointer.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4406152957118803921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4406152957118803921'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/about-c-pointer.html' title='兩則關於C指標的小常識'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-1558832843008065227</id><published>2010-06-09T09:21:00.014+08:00</published><updated>2010-06-11T07:07:14.598+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>《憨第德》各翻譯版本</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TA73D_VvqMI/AAAAAAAAT3s/b83Ywfpx7VA/s1600-h/candide%5B3%5D.jpg"&gt;&lt;img title="candide" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="422" alt="candide" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TA73EQ5lnMI/AAAAAAAAT3w/EwsFTk7zqi4/candide_thumb%5B1%5D.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TA73GZn4SyI/AAAAAAAAT30/jYdePb7DqUs/s1600-h/candide_comic%5B3%5D.jpg"&gt;&lt;img title="candide_comic" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="422" alt="candide_comic" src="http://lh4.ggpht.com/_bi6B4jS4CJw/TA73HSUQGOI/AAAAAAAAT34/OfrXDZ97m-Q/candide_comic_thumb%5B1%5D.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;憨第德是一本哲理小說，乃伏爾泰的傳世名作。雖說是經典文學作品，問世至今也已過兩百多年，但難得的是一點都不枯燥，它既是睿智與狡黠的結晶，同時還相當平易近人，字裡行間，瀰漫著輕挑又厚重的喜劇色彩，很難不叫人喜歡。 &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:36a2ccd7-729f-4783-8aae-b3c4bfa670fd" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;而這樣的一本小書，國內目前共有四種翻譯版本。原著為法文創作，但國內各翻譯版本所憑依的版本卻各不相同，有的翻譯自英文，有的翻譯自日文，而被翻譯的英文版本又各有所宗，導致各版本的憨第德在細節處都有所差異。也因為所憑依的版本不同，所以我們不能據此評價翻譯優劣，但稍做比較還是可行的。 &lt;/p&gt;&lt;p&gt;以下就舉我最喜歡的一個小段落，憨第德遭逢變故後，流落他鄉時巧遇昔日的恩師潘格羅斯，遂問起昔日愛人克妮岡蒂，聽到她過世的消息，一時太過震驚而暈死過去，緩緩醒來後才急忙追問，展開如下的對話： &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font color="#004040"&gt;&lt;strong&gt;憨第德 志文 1976 譯者：方瑜、映萩&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;「克妮岡蒂死了！這最好的世界會變成什麼樣子了！她究竟是怎麼死的？當然，眼睜睜看著我被長筒馬靴踢出她父親的大廈，她一定很難過。」 &lt;/p&gt;&lt;p&gt;「不，」潘格羅斯說，「她是被保加利亞軍人強暴之後殺死的，就像一個窮人家女孩的遭遇一樣。我的主人想要保護她，他們就打破了他的頭，男爵夫人被砍成碎片，我那可憐的學生呵，遭遇的命運和他妹妹沒有什麼差別。至於房子，現在那裡只有一堆堆石頭，沒有一所穀倉、一隻羊、一隻鴨子，連一棵樹也沒剩下。不過，我們已經充分地報過仇了，因為阿巴爾斯人在附近一處保加利亞貴族的產業領地內做了同樣的事。」&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#004040"&gt;&lt;strong&gt;&lt;em&gt;憨第德 遠景 1980 譯者：孟祥森&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font color="#004040"&gt;&lt;strong&gt;&lt;em&gt;憨第德 桂冠圖書 1994 譯者：孟祥森&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;——克妮岡蒂，死了！啊，一切世界中最好的世界，現在你變成了什麼樣子？但是她怎麼死的？不是因為看到我從她高貴的父親那優美的城堡中被踢出來，憂傷而死的吧！ &lt;/p&gt;&lt;p&gt;——一點也不是，潘格羅斯說；她被保加利亞士兵強姦到人類忍受力的絕對極限以後，刺破了肚子而死；男爵想保衛女兒，被他們打爛了頭，又把男爵夫人剁成肉醬，把我那可憐的學生也和他妹妹一樣對待。至於那城堡，沒有一塊石頭留在另一塊石頭上，沒有一塊屋頂未塌，沒剩一隻羊，一隻鴨，一棵樹；但我們也報了仇。因為阿巴爾人對附近一塊屬於保加利亞貴人的邑地也做了完完全全一樣的事。 &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;註1.保加利亞，Bulgars，伏爾泰選這個名稱來代表弗德烈大帝的普魯士軍隊，因為她想用這個名稱來暗示弗德烈大帝跟他的士兵都有雞姦的行為。因為Bulgar這個字跟法文Bougre，英文Bugger都相近，而後兩者都是雞姦之意。 &lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;註2.雖然原文沒有明顯諷喻指摘，但這邊的確意指克妮岡蒂的哥哥遭雞姦。 &lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#004040"&gt;老實人（收錄於《伏爾泰哲理美文集》） 臺灣先智 2002 譯者：李瑜青&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;他睜開眼叫道：「居內貢死了！啊，最美好的世界到哪裡去了？她害什麼病死的？莫非因為看到我被她令尊大人一邊踢，一邊趕出了美麗的宮堡嗎？」 &lt;/p&gt;&lt;p&gt;幫葛羅斯答道：「不是的；保加利亞兵先把她蹂躏得不像樣了，又一刀戳進她肚子；男爵上前救護，被亂兵砍了腦袋；男爵夫人被人分屍，割作幾塊；我可憐的學生和她妹妹的遭遇完全一樣；宮堡變了平地，連一所穀倉、一頭羊、一隻鴨子、一棵樹都不留了；可是人家代我們報了仇，阿伐爾人對近邊一個保加利亞男爵的府第，也如法炮製。」 &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#004040"&gt;憨第德 格林文化 2007 譯者：李桂蜜&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;「克妮岡蒂死了！她是生什麼病死掉的？是不是因為看到我被一腳踢出她父親美麗的城堡傷心致死？」 &lt;/p&gt;&lt;p&gt;「不是，」潘博士說，「保加利亞的士兵在盡情蹂躏她之後，將她開膛剖肚；男爵老爺想要保護她，結果頭被砍下來；男爵夫人遭到分屍；我可憐的學生，遭遇跟他妹妹一模一樣。至於城堡，如今只剩一堆石子，什麼都沒了。不過我們也報了仇，因為阿巴爾人在附近一處保加利亞爵爺的領地，做了同樣的事。」 &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;裡面我最喜歡的是遠流（桂冠）出版，由孟祥森翻譯的版本。前後反差巨大，而且描述仔細，「強姦到人類忍受力的絕對極限」這一句放在別處或許會叫人黯然，但放在這裡卻有種特別的喜感；註釋也很到位，諷喻處都有詳加解釋，讓讀者更能領會伏爾泰行文的旨趣與古靈精怪。 &lt;/p&gt;&lt;p&gt;綜合比較起來，我個人偏愛遠流版（桂冠版），總覺得比較貼近原著，而且樂趣多多；臺灣先智版文字靈動，有韻律感，雖然偏大陸用語，而且註釋極少，但在這幾個版本中依然算文筆較佳的；格林文化版勝在有插畫，一邊讀文，一邊瀏覽插圖，別有一番滋味，也是推薦。志文版就比較中庸，沒特別突出之處，但它卻是這幾版中最容易尋著的，各鄉鎮圖書館大概都有收藏，若沒有其他版本，還是可以讀讀志文版，聊勝於無。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-1558832843008065227?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/1558832843008065227/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/candide-by-voltaire-1759.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/1558832843008065227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/1558832843008065227'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/candide-by-voltaire-1759.html' title='《憨第德》各翻譯版本'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_bi6B4jS4CJw/TA73EQ5lnMI/AAAAAAAAT3w/EwsFTk7zqi4/s72-c/candide_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-478054713416165020</id><published>2010-06-07T09:49:00.005+08:00</published><updated>2010-06-09T12:27:46.580+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>流浪地球</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_bi6B4jS4CJw/TAxPt0-gK6I/AAAAAAAAT3c/uHcvUaZGZJE/s1600-h/stray_01%5B4%5D.jpg"&gt;&lt;img title="stray_01" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="409" alt="stray_01" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TAxPuhTAtdI/AAAAAAAAT3g/rVeE-6QVkLs/stray_01_thumb%5B2%5D.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/TAxPvb4bX_I/AAAAAAAAT3k/_J3ZlPsIK68/s1600-h/stray_02%5B3%5D.jpg"&gt;&lt;img title="stray_02" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="409" alt="stray_02" src="http://lh3.ggpht.com/_bi6B4jS4CJw/TAxPvycT4jI/AAAAAAAAT3o/WPJ_SU_1lN4/stray_02_thumb%5B1%5D.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;一部劇情充滿漏洞的電影，可以靠著幾位演員揮去頹勢，撐起一番嶄新的局面；而一本細節禁不起推敲的小說，同樣可以靠著作家的如花妙筆來感動讀者。 &lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;演員之所以能救活一部電影，靠的是扎實演技；作家之所以能升格一本小說，靠的則是磅礡筆力。 &lt;/p&gt;&lt;p&gt;流浪地球的作者劉慈欣小姐，正是這麼一位有能力讓作品起死回生的人物。她的文字平易卻帶有韻律感，一種渾然天成的詩意，不故做深沉，不填塞華美詞藻。卻總能予人感動。搭配起磅礡又滄桑的故事背景描繪，有如一根重捶，輕輕地敲在讀者的胸口，看似緩和、溫柔，卻帶給讀者無比震撼，進而與故事中主角的爺爺一般，發出由衷地深深長嘆：「啊，地球，我的流浪地球啊……」 &lt;/p&gt;&lt;p&gt;《流浪地球》的中篇里這麼寫著，「很有意思的是，地球上所有的宗教在一夜之間消失得無影無蹤，人們現在終於明白，就算真有上帝，他也是個王八蛋。」但我們知道，無論發生如何重大的事，宗教都不可能消失，因為宗教是人類智力的副產物，有智力（或者說，有限的智力），便有宗教，這是無可避免的。它一路伴隨著人類文明，走過戰爭、飢荒、瘟疫和天災，直至今日，宗教依然屹立不搖。它躲身於人們生活困頓處，也棲息在荒淫做樂的人子之城。每個地方都可以發現它的蹤影。 &lt;/p&gt;&lt;p&gt;但可別誤會了，人們不是念舊，只因宗教太有用、太萬用了。它既能關懷現世，又可期待來生；既能安撫受剝削者的不滿情緒，又可讓剝削者心甘情願吐出白花花的鈔票；既能讓社會底層安於現狀，又可讓社會頂層擴展權力，呼風喚雨！猶如一把無所不能的千層瑞士刀，刀鋒上還閃著七彩的神聖光芒，令人不敢逼視，一個恍神，它瞬間砍在關鍵處，事情就這麼迎刃而解。 &lt;/p&gt;&lt;p&gt;試問，如此美妙又萬用的「工具」，有可能因為某個變故而一夕消失無蹤嗎？別忘了，它一向是擁抱變故、熱愛困境，任何人類所遭逢的挫折，只會讓它壯大。更別提基督教義中的末日審判，與小說中的現狀極為契合，基督徒哪裡會覺得受挫，他們只會興奮、狂喜，因為俗史將結束，而屬靈屬神的聖史將隆重展開，慶賀都來不及了，怎麼有時間掉眼淚或哀聲嘆氣呢？尤其那些千禧年前論（Premillennialism）的信徒，更會欣喜若狂，一面高倡福音，一面引領期盼基督再臨，與接下來至高幸福的千年統治。&lt;/p&gt;&lt;p&gt;所以劉慈欣如此假設，在我個人看來，恩，有欠考慮。 &lt;/p&gt;&lt;p&gt;當然，這也可能是她的刻意設計。我們可以看到在下篇叛軍慷慨激昂的繳辭中，又再次提及上帝。並藉上帝之名予以討伐。神，復歸了，但伴隨而來卻是非理性的狂熱與法西斯幽魂，這是何等滑稽和可悲的事！ &lt;/p&gt;&lt;p&gt;或許這就是劉慈欣的宗教觀——宗教，不善之物也，與非理性、爭端和罪惡是表兄弟、親上親。 &lt;/p&gt;&lt;p&gt;這是一種觀念偏差嗎？或許是，或許不是，因為沒有人有能力或資格做出定論——如果真的有某個高乎萬物之上的神，那麼一切對於神的判斷，不論批評或讚揚，都是種沒必要且無意義的妄論。 &lt;/p&gt;&lt;p&gt;所以就讓實用主義進行到底吧！信或不信，只是一種關乎利益和實用上的選擇，劉慈欣不信，沒關係，至少她小說寫得好，能感動人；對宗教不求甚解，犧牲些許合理性，創造更縹緲的詩意空間，這筆交易並沒有吃虧，也絲毫沒有折損「科幻詩人」的美名。 &lt;/p&gt;&lt;p&gt;而我想，這樣真的就夠了。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-478054713416165020?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/478054713416165020/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/wondering-earth.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/478054713416165020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/478054713416165020'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/wondering-earth.html' title='流浪地球'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/TAxPuhTAtdI/AAAAAAAAT3g/rVeE-6QVkLs/s72-c/stray_01_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-7337047066340045456</id><published>2010-06-03T11:37:00.014+08:00</published><updated>2010-12-29T20:41:36.031+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>圖片檔名流水號格式化小程式</title><content type='html'>&lt;p&gt;只是一支兩百行左右的小程式，沒什麼技術含量。主要用於漫畫圖檔，因為有時候檔名若沒做好格式化，看圖軟體便會判斷失誤，像是4.jpg會排列在39.jpg和40.jpg之間。有點麻煩，之前我的辦法是用批次檔，不過每次都要稍作修改，所以乾脆寫個萬用型。雖然還沒研究怎麼操作unicode檔名，但處理起一般的檔名應該都沒問題。&lt;/p&gt;&lt;p&gt;程式以純C撰寫，主要是因為考量到編譯後的實品大小。以C-free編譯後只占5Kb（核心也是gcc，但不曉得是使用哪些參數，總是能編譯出最迷你的程式檔），而以正規gcc編譯加上icon圖示資源檔也只占18Kb，比之隨便include個C++頭文件便一兩百kb，要精簡多了。&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr&gt;&lt;br /&gt;&lt;!--程式碼開始--&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center; "&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; "&gt;&lt;span class="note"&gt;/*&lt;br /&gt;圖片更名小程式&lt;br /&gt;&lt;br /&gt;編譯環境：Dev C++ 4.9 (C-free無法編譯)&lt;br /&gt;&lt;br /&gt;功能：將圖片流水編號名稱格式化&lt;br /&gt;&lt;br /&gt;例如：adf4.jpg -&amp;gt; adf004.jpg&lt;br /&gt;      dd05.jpg -&amp;gt; dd005.jpg&lt;br /&gt;      ck(11).jpg -&amp;gt; ck(011).jpg&lt;br /&gt;&lt;br /&gt;侷限：對非BIG5編碼的檔案名稱無效，如日文或簡體字&lt;br /&gt;&lt;br /&gt;update: 2010.12.29 &lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;shlobj.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#include&lt;/span&gt; &lt;span class="define"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;//#define DEBUG // 印出處理過程&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; EQU ==&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; TRUE 1&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; FALSE 0&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; STR_LEN 100&lt;br /&gt;&lt;span class="define"&gt;#define&lt;/span&gt; STR_LEN_S 30&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;    &lt;span class="define"&gt;#define&lt;/span&gt; PRINT(str1, str2) printf(str1); printf(&lt;span class="quot"&gt;&amp;quot;[&lt;b&gt;&lt;/b&gt;%s]&amp;quot;&lt;/span&gt;, (str2))&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getDotPos ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*name )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;取得逗點位置&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;dotPos = -1 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i ;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( i = 0 ; name[i] ; i ++ )&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( name[i] EQU &lt;span class="quot"&gt;&amp;#039;.&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; )&lt;br /&gt;            dotPos = i ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;dotPos ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;getLastNumPos ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*name )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;取得後面數來第一個數字的位置&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;dotPos = -1 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i ;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( i = 0 ; name[i] ; i ++ )&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( name[i] &amp;lt;= &lt;span class="quot"&gt;&amp;#039;9&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; &amp;amp;&amp;amp; name[i] &amp;gt;= &lt;span class="quot"&gt;&amp;#039;0&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; )&lt;br /&gt;            dotPos = i ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;dotPos ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;isPicExtName ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*extName )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;是否為圖片的副檔名，是傳回1,  否傳回0&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*picExtName[20] = {&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;j&lt;b&gt;&lt;/b&gt;pg&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;J&lt;b&gt;&lt;/b&gt;PG&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;b&lt;b&gt;&lt;/b&gt;mp&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;B&lt;b&gt;&lt;/b&gt;MP&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;g&lt;b&gt;&lt;/b&gt;if&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;G&lt;b&gt;&lt;/b&gt;IF&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;ng&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;NG&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;j&lt;b&gt;&lt;/b&gt;peg&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;J&lt;b&gt;&lt;/b&gt;PEG&amp;quot;&lt;/span&gt;,&lt;br /&gt;&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;sd&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;SD&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;ix&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;IX&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;t&lt;b&gt;&lt;/b&gt;if&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;T&lt;b&gt;&lt;/b&gt;IF&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;cx&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;CX&amp;quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span class="quot"&gt;&amp;quot;p&lt;b&gt;&lt;/b&gt;cd&amp;quot;&lt;/span&gt;, &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;CD&amp;quot;&lt;/span&gt;&lt;br /&gt;    } ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;isPic = FALSE ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i ;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( i = 0 ; i &amp;lt; 20 ; i ++ ) {&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( strcmp ( extName, picExtName[i] ) EQU 0 ){&lt;br /&gt;            isPic = TRUE ;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;            printf ( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;[ 副檔名: %s ] &amp;quot;&lt;/span&gt;, picExtName[i] ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;isPic ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char* getExtName ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*name )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;取得副檔名&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*extName = ( char* ) malloc ( STR_LEN_S*sizeof ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;) ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;dotPos = getDotPos ( name ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = dotPos+1 ;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( ; name[i] ; i ++ )&lt;br /&gt;        extName[count++] = name[i] ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;extName ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char* getLastNStr ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str, &lt;span class="reservedWord"&gt;int &lt;/span&gt;n )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;取得str中從n開始數的字串&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*newStr = ( char* ) malloc ( STR_LEN_S*sizeof ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;) ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;count = 0 ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;length = strlen( str );&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( ; n &amp;lt;= length ; n ++ )&lt;br /&gt;        newStr[count++] = str[n] ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;newStr ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;isNum ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;c )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;是否為數字&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( c &amp;gt;= &lt;span class="quot"&gt;&amp;#039;0&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; &amp;amp;&amp;amp; c &amp;lt;= &lt;span class="quot"&gt;&amp;#039;9&lt;b&gt;&lt;/b&gt;&amp;#039;&lt;/span&gt; )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;TRUE ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;FALSE ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;isPic ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*name )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;檢查此檔案是否為圖片&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i, j = 0 ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;dotPos = getDotPos ( name ) ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;extName[STR_LEN] = {0} ;&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; for &lt;/span&gt;( i = dotPos+1 ; i &amp;amp;&amp;amp; name[i] ; i ++ ) {&lt;br /&gt;        extName[j++] = name[i] ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( isPicExtName ( extName ) )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;TRUE ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;FALSE ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;handlePicName ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*oldName, &lt;span class="reservedWord"&gt;char &lt;/span&gt;*newName )&lt;br /&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;處理圖片檔案名稱&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;ex:  gh1.jpg -&amp;gt; gh001.jpg&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;ex: cd59.jpg -&amp;gt; cd059.jpg&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;dotPos = getDotPos ( oldName ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;numStr[6] = {0} ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;lastNumPos = getLastNumPos ( oldName ) ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*lastNstr = getLastNStr( oldName, lastNumPos+1 );&lt;br /&gt;     &lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;( !isNum ( oldName[lastNumPos-1] ) ) { &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;ex. abc7.jpg&lt;br /&gt;&lt;/span&gt;            numStr[0] = oldName[lastNumPos] ;&lt;br /&gt;&lt;br /&gt;            strncpy ( newName, oldName, lastNumPos ) ;&lt;br /&gt;            strcat ( newName, &lt;span class="quot"&gt;&amp;quot;0&lt;b&gt;&lt;/b&gt;0&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;            strcat ( newName, numStr) ;&lt;br /&gt;            strcat ( newName, lastNstr ) ;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;span class="reservedWord"&gt; if &lt;/span&gt;( !isNum ( oldName[lastNumPos-2] ) ) {  &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;ex. def33.jpg&lt;br /&gt;&lt;/span&gt;            numStr[0] = oldName[lastNumPos-1] ;&lt;br /&gt;            numStr[1] = oldName[lastNumPos] ;&lt;br /&gt;&lt;br /&gt;            strncpy ( newName, oldName, lastNumPos-1 ) ;&lt;br /&gt;            strcat ( newName, &lt;span class="quot"&gt;&amp;quot;0&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;            strcat ( newName, numStr ) ;&lt;br /&gt;            strcat ( newName, lastNstr ) ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    free ( lastNstr );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;main (){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;path[MAX_PATH+1];&lt;br /&gt;    WIN32_FIND_DATA fd;&lt;br /&gt;    HANDLE hFind;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*newName = ( char* ) malloc ( STR_LEN*sizeof ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;) ) ;&lt;br /&gt;&lt;br /&gt;    strcpy ( path, &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ; &lt;span class="note"&gt;// &lt;B&gt;&lt;/B&gt;執行檔現在的目錄&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="reservedWord"&gt; if &lt;/span&gt;(1){&lt;br /&gt;        lstrcat ( path, &lt;span class="quot"&gt;&amp;quot;*&lt;b&gt;&lt;/b&gt;.*&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;        hFind = FindFirstFile ( path, &amp;amp;fd );&lt;br /&gt;        path[lstrlen(path)-3]=0;&lt;br /&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;do &lt;/span&gt;{&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;            printf ( &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n%s%s&amp;quot;&lt;/span&gt;, path,fd.cFileName ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;           &lt;span class="reservedWord"&gt; if &lt;/span&gt;( isPic ( fd.cFileName ) ) {&lt;br /&gt;                memset ( newName, &lt;span class="quot"&gt;&amp;#039;\&lt;b&gt;&lt;/b&gt;0&amp;#039;&lt;/span&gt;, STR_LEN*sizeof ( &lt;span class="reservedWord"&gt;char &lt;/span&gt;) ) ;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;                printf ( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;這是圖片！ &amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;                handlePicName ( fd.cFileName, newName ) ;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;               &lt;span class="reservedWord"&gt; if &lt;/span&gt;( newName[0] )&lt;br /&gt;                    printf ( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;[ 新檔名: %s ]&amp;quot;&lt;/span&gt;, newName ) ;&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;                    printf ( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;[ 檔名不變 ]&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;ndef&lt;/span&gt; DEBUG&lt;br /&gt;                rename ( fd.cFileName, newName ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } &lt;span class="reservedWord"&gt;while &lt;/span&gt;( FindNextFile(hFind,&amp;amp;fd ) );&lt;br /&gt;&lt;br /&gt;       &lt;span class="reservedWord"&gt; if &lt;/span&gt;( hFind != INVALID_HANDLE_VALUE )&lt;br /&gt;             FindClose ( hFind ) ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    free ( newName ) ;&lt;br /&gt;&lt;br /&gt;&lt;span class="define"&gt;&lt;span class="define"&gt;#if&lt;/span&gt;def&lt;/span&gt; DEBUG&lt;br /&gt;    printf ( &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;n&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    system ( &lt;span class="quot"&gt;&amp;quot;P&lt;b&gt;&lt;/b&gt;AUSE&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;&lt;span class="define"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;!--程式碼結束--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-7337047066340045456?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/7337047066340045456/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/06/rename-image.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7337047066340045456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/7337047066340045456'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/06/rename-image.html' title='圖片檔名流水號格式化小程式'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-5109236429034289110</id><published>2010-05-29T08:29:00.014+08:00</published><updated>2010-08-05T08:47:20.854+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>wxWidget實作之圖片顯示</title><content type='html'>&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/TABf6Sk4DBI/AAAAAAAAT3U/OSGhHfbZLqA/s1600-h/wxWidget_show_image%5B5%5D.jpg"&gt;&lt;img alt="wxWidget_show_image" border="0" height="284" src="http://lh5.ggpht.com/_bi6B4jS4CJw/TABf7eh_q2I/AAAAAAAAT3Y/gIqbpAOSC6E/wxWidget_show_image_thumb%5B3%5D.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="wxWidget_show_image" width="577" /&gt;&lt;/a&gt; &lt;br /&gt;稍微碰了一下wxWidget，感覺它在設計menu或一些系統內建元件上比較方便，譬如說menu可以直接以文字定義快捷鍵，而無須另寫event；狀態列也可以直接對應元件操作而做出個別不同的輔助說明。&lt;br /&gt;&lt;br /&gt;wxWidget編譯出來的是原生(Native)程式，不知道是不是因為這個緣故，使得它在繪圖上的設定幾乎與Windows API一樣難搞。雖然圖片已經更換，但畫面仍未改變，除非縮下再放大，或拖曳一個視窗在它前面晃過，才能顯示出來。實在不夠直覺，而我目前也還未想到方法可以徹底解決這個問題。麻煩，還是再回頭玩GTK+好了。&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;wxWidgetsApp.cpp：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;pre class="codeStyle" style="background-color: lightslategrey; color: white; float: left; height: auot; text-align: center; width: 30px;; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float: left; width: 540px;; overflow-y:hidden;"&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;"w&lt;b&gt;&lt;/b&gt;xWidgetsApp.h"&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;"w&lt;b&gt;&lt;/b&gt;xWidgetsFrame.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IMPLEMENT_APP(wxWidgetsApp) &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;   &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;============================================================================&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;implementation &lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;============================================================================&lt;br /&gt;&lt;/span&gt;wxWidgetsApp::wxWidgetsApp()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;wxWidgetsApp::~wxWidgetsApp()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;bool wxWidgetsApp::OnInit()&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;    wxInitAllImageHandlers() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;初始化所有的image handlers.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    wxImage image;&lt;br /&gt; wxWidgetsFrame *frame = &lt;span class="reservedWord"&gt;new &lt;/span&gt;wxWidgetsFrame( wxBitmap(image), _(&lt;span class="quot"&gt;"圖&lt;b&gt;&lt;/b&gt;片顯示測試程式"&lt;/span&gt;),&lt;br /&gt;                               wxPoint(50, 50), wxSize(400, 300));&lt;br /&gt;&lt;br /&gt; frame-&amp;gt;Show(TRUE);&lt;br /&gt; SetTopWindow(frame);&lt;br /&gt;&lt;br /&gt; &lt;span class="reservedWord"&gt;return &lt;/span&gt;TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float: left; width: 540px;; overflow-y:hidden;"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;wxWidgetsApp.h：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="background-color: lightslategrey; color: white; float: left; height: auot; text-align: center; width: 30px;; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float: left; width: 540px;; overflow-y:hidden;"&gt;&lt;span class="reservedWord"&gt;#ifndef&lt;/span&gt; __WXWIDGETSAPP_H&lt;br /&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;__WXWIDGETSAPP_H&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/wx.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;wxWidgetsApp : &lt;span class="reservedWord"&gt;public &lt;/span&gt;wxApp&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    wxWidgetsApp();&lt;br /&gt;    virtual ~wxWidgetsApp();&lt;br /&gt;    virtual bool OnInit();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;DECLARE_APP(wxWidgetsApp)&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#endif&lt;/span&gt; &lt;span class="note"&gt;//_&lt;b&gt;&lt;/b&gt;_WXWIDGETSAPP_H&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;b&gt;wxWidgetsFrame.cpp：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="background-color: lightslategrey; color: white; float: left; height: auot; text-align: center; width: 30px;; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float: left; width: 540px;; overflow-y:hidden;"&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;"w&lt;b&gt;&lt;/b&gt;xWidgetsApp.h"&lt;/span&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;"w&lt;b&gt;&lt;/b&gt;xWidgetsFrame.h"&lt;/span&gt;  &lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// constants&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; &lt;br /&gt;{ &lt;br /&gt; ID_MENU_QUIT = 1, &lt;br /&gt; ID_MENU_ABOUT = 2,&lt;br /&gt; ID_MENU_OPEN = 3&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IMPLEMENT_CLASS(wxWidgetsFrame, wxFrame)&lt;br /&gt;&lt;br /&gt;BEGIN_EVENT_TABLE(wxWidgetsFrame, wxFrame)&lt;br /&gt; EVT_MENU(wxID_EXIT,  wxWidgetsFrame::OnQuit)&lt;br /&gt; EVT_MENU(wxID_ABOUT,  wxWidgetsFrame::OnAbout)&lt;br /&gt; EVT_MENU(wxID_OPEN,  wxWidgetsFrame::OnNewFrame)&lt;br /&gt; EVT_PAINT(wxWidgetsFrame::OnPaint)&lt;br /&gt;END_EVENT_TABLE()&lt;br /&gt;&lt;br /&gt;BEGIN_EVENT_TABLE(MyImageFrame, wxFrame)&lt;br /&gt;    EVT_ERASE_BACKGROUND(MyImageFrame::OnEraseBackground)&lt;br /&gt;    EVT_PAINT(MyImageFrame::OnPaint)&lt;br /&gt;    EVT_LEFT_DCLICK(MyImageFrame::OnSave)&lt;br /&gt;END_EVENT_TABLE()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;main frame&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;wxWidgetsFrame::wxWidgetsFrame(&lt;span class="reservedWord"&gt;const&lt;/span&gt; wxBitmap&amp;amp; bitmap, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxString&amp;amp; title, &lt;br /&gt;                               &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxPoint&amp;amp; pos, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxSize&amp;amp; size)&lt;br /&gt;: wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size )&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; wxMenu *fileMenu = &lt;span class="reservedWord"&gt;new &lt;/span&gt;wxMenu(_(&lt;span class="quot"&gt;"&lt;b&gt;&lt;/b&gt;"&lt;/span&gt;), wxMENU_TEAROFF);&lt;br /&gt; wxMenu *helpMenu = &lt;span class="reservedWord"&gt;new &lt;/span&gt;wxMenu(_(&lt;span class="quot"&gt;"&lt;b&gt;&lt;/b&gt;"&lt;/span&gt;), wxMENU_TEAROFF);&lt;br /&gt;&lt;br /&gt;    fileMenu-&amp;gt;Append(wxID_OPEN, _(&lt;span class="quot"&gt;"&amp;amp;&lt;b&gt;&lt;/b&gt;amp;開啟\tAlt-K"&lt;/span&gt;), _(&lt;span class="quot"&gt;"開&lt;b&gt;&lt;/b&gt;啟圖片"&lt;/span&gt;));&lt;br /&gt; fileMenu-&amp;gt;Append(wxID_EXIT, _(&lt;span class="quot"&gt;"&amp;amp;&lt;b&gt;&lt;/b&gt;amp;離開\tAlt-Y"&lt;/span&gt;), _(&lt;span class="quot"&gt;"離&lt;b&gt;&lt;/b&gt;開本程式"&lt;/span&gt;));&lt;br /&gt; helpMenu-&amp;gt;Append(wxID_ABOUT, _(&lt;span class="quot"&gt;"&amp;amp;&lt;b&gt;&lt;/b&gt;amp;關於\tAlt-Z"&lt;/span&gt;), _(&lt;span class="quot"&gt;"關&lt;b&gt;&lt;/b&gt;於本程式"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt; wxMenuBar *menuBar = &lt;span class="reservedWord"&gt;new &lt;/span&gt;wxMenuBar();&lt;br /&gt; menuBar-&amp;gt;Append(fileMenu, _(&lt;span class="quot"&gt;"&amp;amp;&lt;b&gt;&lt;/b&gt;amp;檔案"&lt;/span&gt;));&lt;br /&gt; menuBar-&amp;gt;Append(helpMenu, _(&lt;span class="quot"&gt;"&amp;amp;&lt;b&gt;&lt;/b&gt;amp;幫助"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt; SetMenuBar(menuBar);&lt;br /&gt; CreateStatusBar(2);&lt;br /&gt; SetStatusText(_(&lt;span class="quot"&gt;"狀&lt;b&gt;&lt;/b&gt;態列"&lt;/span&gt;));&lt;br /&gt; &lt;br /&gt; wxImage image;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;wxWidgetsFrame::~wxWidgetsFrame()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;wxWidgetsFrame::OnQuit(wxCommandEvent&amp;amp; event)&lt;br /&gt;{&lt;br /&gt; Close(TRUE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;wxWidgetsFrame::OnAbout(wxCommandEvent&amp;amp; event)&lt;br /&gt;{&lt;br /&gt; wxString msg;&lt;br /&gt; msg.Printf(_( &lt;span class="quot"&gt;"H&lt;b&gt;&lt;/b&gt;ello and welcome to %s"&lt;/span&gt; ),&lt;br /&gt;            wxVERSION_STRING);&lt;br /&gt; wxMessageBox(msg, _( &lt;span class="quot"&gt;"A&lt;b&gt;&lt;/b&gt;bout"&lt;/span&gt; ),&lt;br /&gt;              wxOK | wxICON_INFORMATION, this);&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;wxWidgetsFrame::OnNewFrame( wxCommandEvent &amp;amp;WXUNUSED(event) )&lt;br /&gt;{&lt;br /&gt;    wxString filename = wxFileSelector(_(&lt;span class="quot"&gt;"S&lt;b&gt;&lt;/b&gt;elect image file"&lt;/span&gt;));&lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( !filename )&lt;br /&gt;        return; &lt;br /&gt; &lt;br /&gt;    wxImage image;&lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( !image.LoadFile(filename) )&lt;br /&gt;    {&lt;br /&gt;        wxLogError(_T(&lt;span class="quot"&gt;"C&lt;b&gt;&lt;/b&gt;ouldn&lt;span class="quot"&gt;'t&lt;b&gt;&lt;/b&gt; load image from '&lt;/span&gt;%s'."&lt;/span&gt;), filename.c_str());&lt;br /&gt;&lt;br /&gt;        return;&lt;br /&gt;    } &lt;br /&gt;     &lt;br /&gt;    (&lt;span class="reservedWord"&gt;new &lt;/span&gt;MyImageFrame(this, wxBitmap(image), filename))-&amp;gt;Show(); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;另開圖片顯示視窗 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    m_bitmap = wxBitmap(image); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;儲存讀入的圖片資料    &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    SetClientSize(m_bitmap.GetWidth(), m_bitmap.GetHeight()); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;隨圖片大小改變視窗大小 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;wxWidgetsFrame::OnPaint(wxPaintEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;{&lt;br /&gt;         &lt;br /&gt;    wxPaintDC dc( &lt;span class="reservedWord"&gt;this &lt;/span&gt;);&lt;br /&gt;        &lt;br /&gt;    &lt;span class="note"&gt;//d&lt;b&gt;&lt;/b&gt;c.SetBackground(*wxGREY_BRUSH);&lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;//d&lt;b&gt;&lt;/b&gt;c.Clear() ;&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;    dc.DrawBitmap( m_bitmap, 0, 0, &lt;span class="reservedWord"&gt;false &lt;/span&gt;&lt;span class="note"&gt;/* use mask */&lt;/span&gt; ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;繪出圖片 &lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;image frame&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;MyImageFrame::MyImageFrame(wxFrame *parent, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxBitmap&amp;amp; bitmap, wxString filename)&lt;br /&gt;: wxFrame(parent, wxID_ANY, _(filename),&lt;br /&gt;                  wxDefaultPosition, wxDefaultSize,&lt;br /&gt;                  wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX),&lt;br /&gt;                  m_bitmap(bitmap)&lt;br /&gt;{ &lt;br /&gt;    SetClientSize(bitmap.GetWidth(), bitmap.GetHeight()); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;隨圖片大小變更視窗大小 &lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;MyImageFrame::OnEraseBackground(wxEraseEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;{&lt;br /&gt;    &lt;span class="note"&gt;// do nothing here to be able to see how transparent images are shown&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;MyImageFrame::OnPaint(wxPaintEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;{&lt;br /&gt;    wxPaintDC dc( &lt;span class="reservedWord"&gt;this &lt;/span&gt;);&lt;br /&gt;    dc.DrawBitmap( m_bitmap, 0, 0, &lt;span class="reservedWord"&gt;true &lt;/span&gt;&lt;span class="note"&gt;/* use mask */&lt;/span&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;MyImageFrame::OnSave(wxMouseEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: #d9ead3;"&gt;wxWidgetsFrame.h：&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="background-color: lightslategrey; color: white; float: left; height: auot; text-align: center; width: 30px;; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float: left; width: 540px;; overflow-y:hidden;"&gt;&lt;span class="reservedWord"&gt;#ifndef&lt;/span&gt; __WXWIDGETSFRAME_H&lt;br /&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;__WXWIDGETSFRAME_H&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/wx.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/wxprec.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/brush.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/image.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;wx/file.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;wxWidgetsFrame : &lt;span class="reservedWord"&gt;public &lt;/span&gt;wxFrame&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt; wxWidgetsFrame(&lt;span class="reservedWord"&gt;const&lt;/span&gt; wxBitmap&amp;amp; bitmap, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxString&amp;amp; title, &lt;br /&gt;                   &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxPoint&amp;amp; pos, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxSize&amp;amp; size);&lt;br /&gt; virtual ~wxWidgetsFrame();&lt;br /&gt;&lt;br /&gt; &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnQuit(wxCommandEvent&amp;amp; event);&lt;br /&gt; &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnAbout(wxCommandEvent&amp;amp; event);&lt;br /&gt; &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnNewFrame(wxCommandEvent&amp;amp; event);&lt;br /&gt; &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnPaint(wxPaintEvent&amp;amp; WXUNUSED(event));&lt;br /&gt; &lt;br /&gt; wxBitmap m_bitmap ;&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt; DECLARE_CLASS(wxWidgetsFrame)&lt;br /&gt;&lt;br /&gt; DECLARE_EVENT_TABLE()&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;class &lt;/span&gt;MyImageFrame : &lt;span class="reservedWord"&gt;public &lt;/span&gt;wxFrame&lt;br /&gt;{&lt;br /&gt;public: &lt;br /&gt;    MyImageFrame(wxFrame *parent, &lt;span class="reservedWord"&gt;const&lt;/span&gt; wxBitmap&amp;amp; bitmap, wxString filename);&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnEraseBackground(wxEraseEvent&amp;amp; WXUNUSED(event));&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnPaint(wxPaintEvent&amp;amp; WXUNUSED(event));&lt;br /&gt;    &lt;span class="reservedWord"&gt;void &lt;/span&gt;OnSave(wxMouseEvent&amp;amp; WXUNUSED(event));&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;    wxBitmap m_bitmap;&lt;br /&gt;&lt;br /&gt;    DECLARE_EVENT_TABLE()&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#endif&lt;/span&gt; &lt;span class="note"&gt;//_&lt;b&gt;&lt;/b&gt;_WXWIDGETSFRAME_H&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-5109236429034289110?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/5109236429034289110/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/05/wxwidget-show-image.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5109236429034289110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5109236429034289110'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/05/wxwidget-show-image.html' title='wxWidget實作之圖片顯示'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_bi6B4jS4CJw/TABf7eh_q2I/AAAAAAAAT3Y/gIqbpAOSC6E/s72-c/wxWidget_show_image_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-5320880141354303212</id><published>2010-05-27T09:37:00.000+08:00</published><updated>2010-05-29T09:37:49.686+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>建立wxWidget開發環境</title><content type='html'>&lt;p&gt;以Dev-C++作為開發平台，幾乎不用設定，只要先安裝以下幾個DevPak檔。版本不一樣沒關係，google都找得到可以下載的地方。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;imagelib-2.DevPak&lt;/li&gt;    &lt;li&gt;libjpeg-6b_4-1spec.DevPak&lt;/li&gt;    &lt;li&gt;libpng-1.2.8-1spec.DevPak&lt;/li&gt;    &lt;li&gt;libtiff-3.6.1_2-1spec.DevPak&lt;/li&gt;    &lt;li&gt;zlib-1.2.3-1spec.DevPak&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;DevPak檔安裝步驟：開啟Dev-C++ -&amp;gt;工具 -&amp;gt; Package Manager –&amp;gt; Install&amp;#160; -&amp;gt; 選擇DevPak檔。&lt;/p&gt;  &lt;p&gt;接著到&lt;a title="http://www.upcase.de/devpack.html" href="http://www.upcase.de/devpack.html"&gt;http://www.upcase.de/devpack.html&lt;/a&gt;，下載以下三個檔案：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;wxWidgets version 2.6.0 - DevPak (about 8.8 MB)&lt;/li&gt;    &lt;li&gt;wxWidgets ver. 2.6.0 - Contributions (about 1.6 MB)&lt;/li&gt;    &lt;li&gt;wxWidgets ver. 2.6.0 - Samples (about 2.0 MB)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;一併安裝了，便大功告成。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-5320880141354303212?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/5320880141354303212/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/05/build-wxwidget-development.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5320880141354303212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5320880141354303212'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/05/build-wxwidget-development.html' title='建立wxWidget開發環境'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-5741649993302853274</id><published>2010-05-24T20:22:00.001+08:00</published><updated>2010-05-24T20:22:26.345+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='note'/><title type='text'>[note]Cross-Platform GUI Programming with wxWidgets ( page 1~121 )</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_bi6B4jS4CJw/S_pvd7ZI71I/AAAAAAAAT28/6U6rOJEvYWk/s1600-h/ShowCover%5B2%5D.jpg"&gt;&lt;img title="ShowCover" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="370" alt="ShowCover" src="http://lh6.ggpht.com/_bi6B4jS4CJw/S_pve4ZcKNI/AAAAAAAAT3A/8HxqlvRPwZU/ShowCover_thumb%5B2%5D.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/S_pvfoiEukI/AAAAAAAAT3E/aKX_5aUJZJs/s1600-h/MWSnap218%202010-05-24%2C%2020_19_07%5B2%5D.jpg"&gt;&lt;img title="MWSnap218 2010-05-24, 20_19_07" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="370" alt="MWSnap218 2010-05-24, 20_19_07" src="http://lh5.ggpht.com/_bi6B4jS4CJw/S_pvgKN2NMI/AAAAAAAAT3I/XHhunaLnTu4/MWSnap218%202010-05-24%2C%2020_19_07_thumb.jpg?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:062fb4cd-0a1d-4c14-bd77-5d602540ede5" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;p38   &lt;br /&gt;One area where wxWidgets differs from many other frameworks,such as MFC or OWL,is its&amp;#160; multi-platform nature. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p43   &lt;br /&gt;Development occurs on two main branches:the °sstable°Rbranch,where only binary-compatible bug fixes are allowed,and the °sdevelopment°Rbranch (CVS head).So-called stable releases are even-numbered (for example,2.4.x) and development releases are odd-numbered (for example,2.5.x). &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p52   &lt;br /&gt;At the very least,your class should define an OnInit function that will be called when wxWidgets is ready to start running your code (equivalent to main or WinMain when writing a C or Win32 application). &lt;/p&gt;  &lt;p&gt;If the OnInit function returns true,wxWidgets starts the event loop that processes user input and runs event handlers as necessary.If the function returns false,wxWidgets will clean up its internal structures,and the application will terminate. &lt;/p&gt;  &lt;p&gt;wxT(), This macro is also known by the alias _T()“.There is no run-time performance penalty for using it.(You'll also see the underscore macro _() used to enclose strings,which tells wxWidgets to translate the string.See Chapter 16,&amp;quot;sWriting International Applications,&amp;quot; for more details.) &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p53   &lt;br /&gt;IMPLEMENT_APP(MyApp) &lt;/p&gt;  &lt;p&gt;Without specifying the class,wxWidgets would not know how to create a new application object.This macro also inserts code that checks that the application and library were compiled using the same build configuration,allowing wxWidgets to report accidental mismatches that might later cause a hard-to-debug run-time failure. &lt;/p&gt;  &lt;p&gt;Even if you don't use DECLARE_KPP,you can still use the variable wxTheKpp to call wxKpp functions. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;P55   &lt;br /&gt;In fact, Close() doesn't directly destroy the frame——it generates a wxEVT_CLOSE_WINDOW event, and the default handler for this event destroys the frame using wxWindow::Destroy. &lt;/p&gt;  &lt;p&gt;Note that OnExit() function is only called if OnInit returns true. &lt;/p&gt;  &lt;p&gt;p56   &lt;br /&gt;XPM files have valid C++ syntax and so can be included as shown previously; &lt;/p&gt;  &lt;p&gt;Within each label,a mnemonic letter is marked by a preceding ampersand,and an accelerator is preceded by the tab character (\t).A mnemonic is the letter a user presses to highlight a particular item when the menu is displayed. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p62   &lt;br /&gt;The wxWidgets event processing system is a more flexible mechanism than virtual functions,allowing us to avoid declaring all possible event handlers in a base class,which would be totally impractical as well as inefficient. &lt;/p&gt;  &lt;p&gt;All event handler functions have the same form——their return type is void they are not virtual, and they take a single event object argument. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p65   &lt;br /&gt;The wxWidgets event processing system implements something very close to virtual methods in normal C++,which means that it is possible to alter the behavior of a class by overriding its event handling functions. &lt;/p&gt;  &lt;p&gt;void MyTextCtrl::OnChar(wxKeyEvent&amp;amp; event)   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if ( wxIsalpha( event.keyCode() ) ) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Keycode is within range, so do normal processing.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; event.Skip() ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; else {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Illegal keystroke. We don't call event.Skip() so the    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // event is not processed anywhere else.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wxBell() ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p66   &lt;br /&gt;You might use DYNAMIC EVENT HANDLERS just because you are using a different language (such as Python) that can't use static event tables. &lt;/p&gt;  &lt;p&gt;There are two functions associated with dynamic event tables: wxEvtHandler::Connect and wxEvtHandler::Disconnect.Often,you won't need to call wxEvtHandler::Disconnect because the disconnection will happen when the window object is destroyed. &lt;/p&gt;  &lt;p&gt;Notice that this time, when we use dynamic event tables, we do not use the DECLARE_EVENT_TABLE macro. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p67   &lt;br /&gt;dynamic event tables example : &lt;/p&gt;  &lt;p&gt;frame-&amp;gt;Connect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wxCommandEventHandler( MyFrame::OnQuit) ); &lt;/p&gt;  &lt;p&gt;Window identifiers are integers,and are used to uniquely determine window identity in the event system. In fact,identifiers do not need to be unique across your entire application,just unique within a particular context,such as a frame and its children. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p79   &lt;br /&gt;wxButton* button = new wxButton(parent, wxID_OK) ; &lt;/p&gt;  &lt;p&gt;上面等同下面： &lt;/p&gt;  &lt;p&gt;wxButton* button = new wxButton ;   &lt;br /&gt;button -&amp;gt;Create(parent, wxID_OK) ; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p80   &lt;br /&gt;A window has a style and an extra style.    &lt;br /&gt;The &amp;quot;sextra style&amp;quot; accommodates value that cannot fit into the style value. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p84   &lt;br /&gt;Table 4-1 Basic Window Styles &lt;/p&gt;  &lt;p&gt;Table 4-2 Basic Extra Window Styles &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p85   &lt;br /&gt;Table 4-3 wxWindow Events &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p94   &lt;br /&gt;Table 4-4 wx3rame Styles &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p97   &lt;br /&gt;If you want to write a more unusual-looking consumer application,such as a clock or media player,you can set a non-rectangular region for the frame, and only that region will be displayed. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p98   &lt;br /&gt;a example of SetWindowShape() ; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p105   &lt;br /&gt;Table 4-8 wxDialog Styles &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p106   &lt;br /&gt;Table 4-9 wxDialog Extra Styles &lt;/p&gt;  &lt;p&gt;Table 4-10 wxDialog Events &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p111   &lt;br /&gt;Table 4-11 wxNotebook Styles &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;p114   &lt;br /&gt;There are no special styles for wxScrolledWindow, but usually you will supply wxVSCROLL | wxHSCROLL (the default style for wxScrolledWindow).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-5741649993302853274?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/5741649993302853274/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/05/notecross-platform-gui-programming-with.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5741649993302853274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/5741649993302853274'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/05/notecross-platform-gui-programming-with.html' title='[note]Cross-Platform GUI Programming with wxWidgets ( page 1~121 )'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_bi6B4jS4CJw/S_pve4ZcKNI/AAAAAAAAT3A/8HxqlvRPwZU/s72-c/ShowCover_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-4653182639974307906</id><published>2010-05-19T19:37:00.014+08:00</published><updated>2010-08-05T08:48:15.511+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>GTK實作之記事本 v1.0</title><content type='html'>&lt;a href="http://lh3.ggpht.com/_bi6B4jS4CJw/S_PTKm6dzpI/AAAAAAAAT14/yhEMzTxX94Y/s1600-h/notepad_2%5B6%5D.jpg"&gt;&lt;img alt="notepad_2" border="0" height="349" src="http://lh3.ggpht.com/_bi6B4jS4CJw/S_PTLQgKuSI/AAAAAAAAT18/rvndtnXYsYQ/notepad_2_thumb%5B4%5D.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="notepad_2" width="590" /&gt;&lt;/a&gt; &lt;br /&gt;主要倚賴了Glade，否則這麼標準（繁複）的版面，一個字一個字慢慢刻上可是會死人的。&lt;br /&gt;&lt;br /&gt;此簡單小程式擁有記事本的基本功能，文件的開啟、修改和儲存；剪貼簿的剪下、複製和貼上；還有挺陽春的搜尋和取代功能。雖然這些都很基本，但還是花了不少時間，且經常陷入瓶頸，不得不說，網路上的幾份技術文件真的幫了大忙，尤其是&lt;a href="http://www.bravegnu.org/gtktext"&gt;http://www.bravegnu.org/gtktext&lt;/a&gt;，多虧他的幾份有關複製貼上和搜尋的解說和完整程式範例，否則真不之從何下手。感謝Vijay Kumar！&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:3edd1012-c112-4a67-bb4b-b982925c9e89" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;這隻小程式的全部圖片皆取用自mathilde所設計的Sketchy圖示庫，也謝謝他，設計得挺有個性，我很喜歡。&lt;br /&gt;&lt;br /&gt;因為程式碼大部分都是Glade自動生成的，所以只貼&lt;strong&gt;&lt;u&gt;callbacks.c&lt;/u&gt;&lt;/strong&gt;和&lt;strong&gt;&lt;u&gt;support.c&lt;/u&gt;&lt;/strong&gt;。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;完整程式碼 + 執行檔：&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://popodragon.myweb.hinet.net/Program/project_Notepad_v1.0.rar" title="http://popodragon.myweb.hinet.net/Program/project_Notepad_v1.0.rar"&gt;http://popodragon.myweb.hinet.net/Program/project_Notepad_v1.0.rar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;callbacks.c：&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center ; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;233&lt;br /&gt;234&lt;br /&gt;235&lt;br /&gt;236&lt;br /&gt;237&lt;br /&gt;238&lt;br /&gt;239&lt;br /&gt;240&lt;br /&gt;241&lt;br /&gt;242&lt;br /&gt;243&lt;br /&gt;244&lt;br /&gt;245&lt;br /&gt;246&lt;br /&gt;247&lt;br /&gt;248&lt;br /&gt;249&lt;br /&gt;250&lt;br /&gt;251&lt;br /&gt;252&lt;br /&gt;253&lt;br /&gt;254&lt;br /&gt;255&lt;br /&gt;256&lt;br /&gt;257&lt;br /&gt;258&lt;br /&gt;259&lt;br /&gt;260&lt;br /&gt;261&lt;br /&gt;262&lt;br /&gt;263&lt;br /&gt;264&lt;br /&gt;265&lt;br /&gt;266&lt;br /&gt;267&lt;br /&gt;268&lt;br /&gt;269&lt;br /&gt;270&lt;br /&gt;271&lt;br /&gt;272&lt;br /&gt;273&lt;br /&gt;274&lt;br /&gt;275&lt;br /&gt;276&lt;br /&gt;277&lt;br /&gt;278&lt;br /&gt;279&lt;br /&gt;280&lt;br /&gt;281&lt;br /&gt;282&lt;br /&gt;283&lt;br /&gt;284&lt;br /&gt;285&lt;br /&gt;286&lt;br /&gt;287&lt;br /&gt;288&lt;br /&gt;289&lt;br /&gt;290&lt;br /&gt;291&lt;br /&gt;292&lt;br /&gt;293&lt;br /&gt;294&lt;br /&gt;295&lt;br /&gt;296&lt;br /&gt;297&lt;br /&gt;298&lt;br /&gt;299&lt;br /&gt;300&lt;br /&gt;301&lt;br /&gt;302&lt;br /&gt;303&lt;br /&gt;304&lt;br /&gt;305&lt;br /&gt;306&lt;br /&gt;307&lt;br /&gt;308&lt;br /&gt;309&lt;br /&gt;310&lt;br /&gt;311&lt;br /&gt;312&lt;br /&gt;313&lt;br /&gt;314&lt;br /&gt;315&lt;br /&gt;316&lt;br /&gt;317&lt;br /&gt;318&lt;br /&gt;319&lt;br /&gt;320&lt;br /&gt;321&lt;br /&gt;322&lt;br /&gt;323&lt;br /&gt;324&lt;br /&gt;325&lt;br /&gt;326&lt;br /&gt;327&lt;br /&gt;328&lt;br /&gt;329&lt;br /&gt;330&lt;br /&gt;331&lt;br /&gt;332&lt;br /&gt;333&lt;br /&gt;334&lt;br /&gt;335&lt;br /&gt;336&lt;br /&gt;337&lt;br /&gt;338&lt;br /&gt;339&lt;br /&gt;340&lt;br /&gt;341&lt;br /&gt;342&lt;br /&gt;343&lt;br /&gt;344&lt;br /&gt;345&lt;br /&gt;346&lt;br /&gt;347&lt;br /&gt;348&lt;br /&gt;349&lt;br /&gt;350&lt;br /&gt;351&lt;br /&gt;352&lt;br /&gt;353&lt;br /&gt;354&lt;br /&gt;355&lt;br /&gt;356&lt;br /&gt;357&lt;br /&gt;358&lt;br /&gt;359&lt;br /&gt;360&lt;br /&gt;361&lt;br /&gt;362&lt;br /&gt;363&lt;br /&gt;364&lt;br /&gt;365&lt;br /&gt;366&lt;br /&gt;367&lt;br /&gt;368&lt;br /&gt;369&lt;br /&gt;370&lt;br /&gt;371&lt;br /&gt;372&lt;br /&gt;373&lt;br /&gt;374&lt;br /&gt;375&lt;br /&gt;376&lt;br /&gt;377&lt;br /&gt;378&lt;br /&gt;379&lt;br /&gt;380&lt;br /&gt;381&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="reservedWord"&gt;#ifdef&lt;/span&gt; HAVE_CONFIG_H&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;config.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#endif&lt;/span&gt; &lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;s&lt;b&gt;&lt;/b&gt;upport.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;c&lt;b&gt;&lt;/b&gt;allbacks.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;i&lt;b&gt;&lt;/b&gt;nterface.h&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*gSearchWord ;&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;void&lt;br /&gt;on________n_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;  gtk_text_buffer_set_text (buffer, &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;, 0);&lt;br /&gt;&lt;br /&gt;  gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), utf8(&lt;span class="quot"&gt;&amp;quot;新&lt;b&gt;&lt;/b&gt;文件&amp;quot;&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________o_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="note"&gt;//GtkWidget *dialog = create_file_chooser_open_dialog (GTK_WINDOW(window));&lt;br /&gt;&lt;/span&gt;   &lt;br /&gt;   &lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*dialog = gtk_file_chooser_dialog_new (&lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;pen File&amp;quot;&lt;/span&gt;,&lt;br /&gt;                               GTK_WINDOW(data-&amp;gt;window),&lt;br /&gt;                                        GTK_FILE_CHOOSER_ACTION_OPEN,&lt;br /&gt;                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,&lt;br /&gt;                                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, &lt;br /&gt;                                        NULL);&lt;br /&gt;  &lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*filename;&lt;br /&gt;&lt;br /&gt;    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));&lt;br /&gt;    open_file (filename, GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;    &lt;br /&gt;    gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), filename);&lt;br /&gt;    g_free (filename);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  gtk_widget_destroy (dialog);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________s_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;儲存檔案  &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*dialog;&lt;br /&gt;&lt;br /&gt;  dialog = gtk_file_chooser_dialog_new (&lt;span class="quot"&gt;&amp;quot;S&lt;b&gt;&lt;/b&gt;ave File&amp;quot;&lt;/span&gt;,&lt;br /&gt;                                     GTK_WINDOW(data-&amp;gt;window),&lt;br /&gt;                                     GTK_FILE_CHOOSER_ACTION_SAVE,&lt;br /&gt;                                     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,&lt;br /&gt;                                    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,&lt;br /&gt;                                    NULL);&lt;br /&gt;&lt;br /&gt;  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);&lt;br /&gt;  &lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(0)&lt;span class="note"&gt;//u&lt;b&gt;&lt;/b&gt;ser_edited_a_new_document)&lt;br /&gt;&lt;/span&gt;  {&lt;br /&gt;    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), &lt;span class="quot"&gt;&amp;quot;N&lt;b&gt;&lt;/b&gt;EW.txt&amp;quot;&lt;/span&gt;);&lt;span class="note"&gt;//d&lt;b&gt;&lt;/b&gt;efault_folder_for_saving);&lt;br /&gt;&lt;/span&gt;    gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), &lt;span class="quot"&gt;&amp;quot;U&lt;b&gt;&lt;/b&gt;ntitled document&amp;quot;&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;    gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), &lt;span class="quot"&gt;&amp;quot;O&lt;b&gt;&lt;/b&gt;LD.txt&amp;quot;&lt;/span&gt;);&lt;span class="note"&gt;//f&lt;b&gt;&lt;/b&gt;ilename_for_existing_document);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*filename;&lt;br /&gt;&lt;br /&gt;    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));&lt;br /&gt;    save_to_file (filename, GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;    gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), filename);&lt;br /&gt;    g_free (filename);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  gtk_widget_destroy (dialog);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on______________a_1_activate           (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________q_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;離開 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  gtk_widget_destroy(data-&amp;gt;window);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________t_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;剪下 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkClipboard &lt;/span&gt;*clipboard; &lt;br /&gt;  &lt;br /&gt;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若GDK_NONE不行就換GDK_SELECTION_PRIMARY &lt;br /&gt;&lt;/span&gt;  clipboard = gtk_clipboard_get( GDK_NONE ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得反白選取的部份 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得整個編輯緩衝區 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將反白選取的部份剪下到剪貼簿 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________c_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;複製 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkClipboard &lt;/span&gt;*clipboard;&lt;br /&gt;  &lt;br /&gt;  clipboard = gtk_clipboard_get( GDK_NONE ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得反白選取的部份 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得整個編輯緩衝區 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  gtk_text_buffer_copy_clipboard (buffer, clipboard); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將反白選取的部份複製到剪貼簿 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________p_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;貼上 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkClipboard &lt;/span&gt;*clipboard;&lt;br /&gt;  &lt;br /&gt;  clipboard = gtk_clipboard_get( GDK_NONE ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得反白選取的部份 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得整個編輯緩衝區 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將剪貼簿的內容貼到指定區域 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on________d_1_activate                 (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;刪除 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得整個編輯緩衝區 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  gtk_text_buffer_delete_selection (buffer, TRUE, TRUE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將反白選取的部份刪除 &lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on_about1_activate                     (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;開啟關於dialog &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*dialog1_information = create_dialog1_information ();&lt;br /&gt;  gtk_widget_show (dialog1_information);&lt;br /&gt;  gtk_dialog_run (GTK_DIALOG (dialog1_information));&lt;br /&gt;  gtk_widget_destroy (dialog1_information);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on_mainfile1_activate                  (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;開啟main.c &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*filename; &lt;br /&gt;&lt;br /&gt;    filename = &lt;span class="quot"&gt;&amp;quot;.&lt;b&gt;&lt;/b&gt;.\\src\\main.c&amp;quot;&lt;/span&gt;;&lt;br /&gt;    open_file (filename, GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;    &lt;br /&gt;    gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), filename);&lt;br /&gt;    g_free (filename);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_interfacefile1_activate             (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;開啟interface.c &lt;br /&gt;&lt;/span&gt;{ &lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*filename;&lt;br /&gt;&lt;br /&gt;    filename = &lt;span class="quot"&gt;&amp;quot;.&lt;b&gt;&lt;/b&gt;.\\src\\support.c&amp;quot;&lt;/span&gt;;&lt;br /&gt;    open_file (filename, GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;    &lt;br /&gt;    gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), filename);&lt;br /&gt;    g_free (filename);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on_callbacksfile1_activate             (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;開啟callbacks.c&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*filename;&lt;br /&gt;&lt;br /&gt;    filename = &lt;span class="quot"&gt;&amp;quot;.&lt;b&gt;&lt;/b&gt;.\\src\\callbacks.c&amp;quot;&lt;/span&gt;;&lt;br /&gt;    open_file (filename, GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;    &lt;br /&gt;    gtk_window_set_title (GTK_WINDOW (data-&amp;gt;window), filename);&lt;br /&gt;    g_free (filename);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_quit1_activate                      (&lt;span class="reservedWord"&gt;GtkMenuItem &lt;/span&gt;    *menuitem,&lt;br /&gt;                                        AD         data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;離開 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;  &lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;&lt;br /&gt;on_search_button_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*search_button, AD data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;搜尋按鈕的功能 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text = &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;iter;&lt;br /&gt;  &lt;span class="reservedWord"&gt;int &lt;/span&gt;result = 0 ;&lt;br /&gt;    &lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*search_dialog = create_search_dialog (data);&lt;br /&gt;  gtk_widget_show (search_dialog); &lt;br /&gt;  &lt;br /&gt;  &lt;span class="note"&gt;//r&lt;b&gt;&lt;/b&gt;esult = gtk_dialog_run (GTK_DIALOG (search_dialog));&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;   &lt;br /&gt;  &lt;span class="note"&gt;//g&lt;b&gt;&lt;/b&gt;tk_widget_destroy (search_dialog);&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_search_cancelbutton_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*button, &lt;span class="reservedWord"&gt;gpointer &lt;/span&gt;search_dialog)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;銷毀search dialog &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  gtk_widget_destroy (search_dialog);&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_search_okbutton_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*search_button, AD data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;搜尋按鈕的功能，可連續搜尋 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text = &lt;span class="quot"&gt;&amp;quot;e&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;iter;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextMark &lt;/span&gt;*last_pos;&lt;br /&gt;  &lt;span class="reservedWord"&gt;int &lt;/span&gt;result = 0 ; &lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;found = FALSE;  &lt;br /&gt;    &lt;br /&gt;  data-&amp;gt;searchWord = gtk_entry_get_text (GTK_ENTRY (data-&amp;gt;entry)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得輸入欄的字串 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;br /&gt;  &lt;br /&gt;  last_pos = gtk_text_buffer_get_mark (buffer, &lt;span class="quot"&gt;&amp;quot;l&lt;b&gt;&lt;/b&gt;ast_pos&amp;quot;&lt;/span&gt;); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;查看有無last_pos的mark &lt;br /&gt;&lt;/span&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(last_pos == NULL)&lt;br /&gt;    gtk_text_buffer_get_start_iter (buffer, &amp;amp;iter); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若無，就從頭搜尋 &lt;br /&gt;&lt;/span&gt;  &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;    gtk_text_buffer_get_iter_at_mark (buffer, &amp;amp;iter, last_pos); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若有，就從最後一個last_pos的後面開始搜尋 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  found = find (GTK_TEXT_VIEW (data-&amp;gt;textview), data-&amp;gt;searchWord, &amp;amp;iter);&lt;br /&gt;  &lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!found)&lt;br /&gt;    gtk_text_buffer_delete_mark (buffer, last_pos); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;搜尋到最後可回到起點重新搜尋 &lt;br /&gt;&lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;on_next_button_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*next_button, GdkEventKey *event, AD data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;按下『F3』找下一個符合字串 &lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;＊因為無法把searchWord正確傳遞，所以無法正常使用此函式。 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextMark &lt;/span&gt;*last_pos;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;iter;&lt;br /&gt;   &lt;br /&gt;  &lt;span class="reservedWord"&gt;if&lt;/span&gt; ( !strcmp( gdk_keyval_name( event-&amp;gt;keyval ), &lt;span class="quot"&gt;&amp;quot;F&lt;b&gt;&lt;/b&gt;3&amp;quot;&lt;/span&gt; ) ) {&lt;br /&gt;         &lt;br /&gt;    &lt;br /&gt;    text = &lt;span class="quot"&gt;&amp;quot;e&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;預設搜尋e &lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;//t&lt;b&gt;&lt;/b&gt;ext = data-&amp;gt;searchWord;&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview));&lt;br /&gt;&lt;br /&gt;    last_pos = gtk_text_buffer_get_mark (buffer, &lt;span class="quot"&gt;&amp;quot;l&lt;b&gt;&lt;/b&gt;ast_pos&amp;quot;&lt;/span&gt;);&lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;(last_pos == NULL)&lt;br /&gt;      gtk_text_buffer_get_start_iter (buffer, &amp;amp;iter); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若無，就從頭搜尋 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;      gtk_text_buffer_get_iter_at_mark (buffer, &amp;amp;iter, last_pos);&lt;br /&gt;    &lt;span class="note"&gt;//f&lt;b&gt;&lt;/b&gt;ind (GTK_TEXT_VIEW (data-&amp;gt;textview), text, &amp;amp;iter);&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    find (GTK_TEXT_VIEW (data-&amp;gt;textview), text, &amp;amp;iter);&lt;br /&gt;  &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;&lt;br /&gt;on_replace_button_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*replace_button, AD data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;搜尋按鈕的功能 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text = &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;iter;&lt;br /&gt;  &lt;span class="reservedWord"&gt;int &lt;/span&gt;result = 0 ;&lt;br /&gt;    &lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*replace_dialog = create_replace_dialog (data);&lt;br /&gt;  gtk_widget_show (replace_dialog); &lt;br /&gt;  &lt;span class="note"&gt;//r&lt;b&gt;&lt;/b&gt;esult = gtk_dialog_run (GTK_DIALOG (search_dialog));&lt;br /&gt;&lt;/span&gt;   &lt;br /&gt;  &lt;span class="note"&gt;//g&lt;b&gt;&lt;/b&gt;tk_widget_destroy (search_dialog);&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_replace_cancelbutton_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*button, &lt;span class="reservedWord"&gt;gpointer &lt;/span&gt;replace_dialog)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;銷毀replace dialog &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  gtk_widget_destroy (replace_dialog);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;void&lt;br /&gt;on_replace_okbutton_clicked (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*replace_button, AD data)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取代按鈕的功能，可連續取代 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text = &lt;span class="quot"&gt;&amp;quot;e&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;iter;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextMark &lt;/span&gt;*last_pos;&lt;br /&gt;  &lt;span class="reservedWord"&gt;int &lt;/span&gt;result = 0 ; &lt;br /&gt;    &lt;br /&gt;  data-&amp;gt;searchWord = gtk_entry_get_text (GTK_ENTRY (data-&amp;gt;entry)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得輸入欄的字串 &lt;br /&gt;&lt;/span&gt;  data-&amp;gt;replaceWord = gtk_entry_get_text (GTK_ENTRY (data-&amp;gt;entry2)); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得輸入欄的字串&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data-&amp;gt;textview)); &lt;br /&gt;  &lt;br /&gt;  last_pos = gtk_text_buffer_get_mark (buffer, &lt;span class="quot"&gt;&amp;quot;l&lt;b&gt;&lt;/b&gt;ast_pos&amp;quot;&lt;/span&gt;); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;查看有無last_pos的mark &lt;br /&gt;&lt;/span&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(last_pos == NULL)&lt;br /&gt;    gtk_text_buffer_get_start_iter (buffer, &amp;amp;iter); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若無，就從頭搜尋 &lt;br /&gt;&lt;/span&gt;  &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;    gtk_text_buffer_get_iter_at_mark (buffer, &amp;amp;iter, last_pos); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若有，就從最後一個last_pos的後面開始搜尋 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  replace (GTK_TEXT_VIEW (data-&amp;gt;textview), data-&amp;gt;searchWord, data-&amp;gt;replaceWord, &amp;amp;iter);&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;support.c&lt;/u&gt;&lt;/strong&gt;： &lt;br /&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center ; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;233&lt;br /&gt;234&lt;br /&gt;235&lt;br /&gt;236&lt;br /&gt;237&lt;br /&gt;238&lt;br /&gt;239&lt;br /&gt;240&lt;br /&gt;241&lt;br /&gt;242&lt;br /&gt;243&lt;br /&gt;244&lt;br /&gt;245&lt;br /&gt;246&lt;br /&gt;247&lt;br /&gt;248&lt;br /&gt;249&lt;br /&gt;250&lt;br /&gt;251&lt;br /&gt;252&lt;br /&gt;253&lt;br /&gt;254&lt;br /&gt;255&lt;br /&gt;256&lt;br /&gt;257&lt;br /&gt;258&lt;br /&gt;259&lt;br /&gt;260&lt;br /&gt;261&lt;br /&gt;262&lt;br /&gt;263&lt;br /&gt;264&lt;br /&gt;265&lt;br /&gt;266&lt;br /&gt;267&lt;br /&gt;268&lt;br /&gt;269&lt;br /&gt;270&lt;br /&gt;271&lt;br /&gt;272&lt;br /&gt;273&lt;br /&gt;274&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px ; overflow-y:hidden;"&gt;&lt;span class="note"&gt;/*&lt;br /&gt; * DO NOT EDIT THIS FILE - it is generated by Glade.&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span class="reservedWord"&gt;#ifdef&lt;/span&gt; HAVE_CONFIG_H&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;config.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;sys/types.h&amp;gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#ifdef&lt;/span&gt; HAVE_UNISTD_H&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;unistd.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;glib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &lt;span class="quot"&gt;&amp;quot;s&lt;b&gt;&lt;/b&gt;upport.h&amp;quot;&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*utf8( &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;解決無法顯示中文的窘境&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;g_locale_to_utf8( str, -1, NULL, NULL, NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*fromUtf8( &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str )&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;g_locale_from_utf8 (str, -1, NULL, NULL, NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;replace (&lt;span class="reservedWord"&gt;GtkTextView &lt;/span&gt;*text_view, &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text, &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*replaceText, &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;*iter)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取代主函式 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;mstart, mend; &lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;found;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextMark &lt;/span&gt;*last_pos;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkClipboard &lt;/span&gt;*clipboard;&lt;br /&gt;&lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));&lt;br /&gt;  found = gtk_text_iter_forward_search (iter, text, 0, &amp;amp;mstart, &amp;amp;mend, NULL);&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(found)&lt;br /&gt;  {&lt;br /&gt;    clipboard = gtk_clipboard_get( GDK_NONE ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得反白選取的部份&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;    gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;剪下選取的反白字串 &lt;br /&gt;&lt;/span&gt;    gtk_clipboard_set_text (clipboard, replaceText, -1); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將剪貼簿修改為replaceText &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;    gtk_text_buffer_select_range (buffer, &amp;amp;mstart, &amp;amp;mend);&lt;br /&gt;    last_pos = gtk_text_buffer_create_mark (buffer, &lt;span class="quot"&gt;&amp;quot;l&lt;b&gt;&lt;/b&gt;ast_pos&amp;quot;&lt;/span&gt;, &amp;amp;mend, FALSE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;註記起來 之後才可往下搜尋 &lt;br /&gt;&lt;/span&gt;      &lt;br /&gt;    gtk_text_view_scroll_mark_onscreen(text_view, last_pos); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;移動捲軸 可追蹤目前搜尋的位置 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    gtk_text_buffer_paste_clipboard (buffer, clipboard, &amp;amp;mend, TRUE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將剪貼簿的內容貼到指定區域 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;find (&lt;span class="reservedWord"&gt;GtkTextView &lt;/span&gt;*text_view, &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*text, &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;*iter)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;搜尋主函式 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;mstart, mend;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;found;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextMark &lt;/span&gt;*last_pos;&lt;br /&gt;&lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));&lt;br /&gt;  found = gtk_text_iter_forward_search (iter, text, 0, &amp;amp;mstart, &amp;amp;mend, NULL);&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(found)&lt;br /&gt;  {&lt;br /&gt;    gtk_text_buffer_select_range (buffer, &amp;amp;mstart, &amp;amp;mend);&lt;br /&gt;    last_pos = gtk_text_buffer_create_mark (buffer, &lt;span class="quot"&gt;&amp;quot;l&lt;b&gt;&lt;/b&gt;ast_pos&amp;quot;&lt;/span&gt;, &amp;amp;mend, FALSE); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;註記起來 之後才可往下搜尋 &lt;br /&gt;&lt;/span&gt;      &lt;br /&gt;    gtk_text_view_scroll_mark_onscreen(text_view, last_pos); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;移動捲軸 可追蹤目前搜尋的位置 &lt;br /&gt;&lt;/span&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;found ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;&lt;br /&gt;open_file(&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*filename, &lt;span class="reservedWord"&gt;GtkTextView &lt;/span&gt;*textView) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;開啟文件檔並顯示在textview上&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;目前瓶頸：無法開啟UTF-16編碼的文件&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*content, *content2, *ascii2utf8; &lt;br /&gt;  &lt;span class="reservedWord"&gt;gsize &lt;/span&gt;bytes, bytes_read, bytes_written;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GError &lt;/span&gt;*error = NULL; &lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer; &lt;br /&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (textView));&lt;br /&gt;    &lt;br /&gt;  g_file_get_contents (filename, &amp;amp;content, &amp;amp;bytes, &amp;amp;error);&lt;br /&gt;   &lt;br /&gt;  &lt;span class="note"&gt;//g_file_set_contents (&amp;quot;T&lt;b&gt;&lt;/b&gt;EST.txt&amp;quot;, content, bytes, &amp;amp;error);&lt;br /&gt;&lt;/span&gt;  &lt;span class="note"&gt;//g_convert (content, -1, &amp;quot;U&lt;b&gt;&lt;/b&gt;TF-16&amp;quot;, &amp;quot;U&lt;b&gt;&lt;/b&gt;TF-8&amp;quot;, NULL, NULL, &amp;amp;error);&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  ascii2utf8 = g_locale_to_utf8( content, -1, NULL, NULL, &amp;amp;error);&lt;br /&gt;  &lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(error) &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若不能轉換，代表原本就是utf-8了 &lt;br /&gt;&lt;/span&gt;    gtk_text_buffer_set_text (buffer, content, -1); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;用來開UTF-8文件   &lt;br /&gt;&lt;/span&gt;  &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;    gtk_text_buffer_set_text (buffer, ascii2utf8, -1); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;用來開ANSI文件 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;  free (content);&lt;br /&gt;  free (ascii2utf8);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt; save_to_file(&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*filename, &lt;span class="reservedWord"&gt;GtkTextView &lt;/span&gt;*textView)&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將緩衝區的文字儲存到名為filename的檔案裡 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*content; &lt;br /&gt;  &lt;span class="reservedWord"&gt;gsize &lt;/span&gt;bytes;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GError &lt;/span&gt;*error = NULL;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextBuffer &lt;/span&gt;*buffer;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkTextIter &lt;/span&gt;start, end;&lt;br /&gt;  &lt;br /&gt;  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textView));&lt;br /&gt;&lt;br /&gt;  gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &amp;amp;start, &amp;amp;end);&lt;span class="note"&gt;/*取得開始和結束位置的Iter*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  content = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (buffer), &amp;amp;start, &amp;amp;end, FALSE);&lt;span class="note"&gt;/*取得整份文字資料*/&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;  g_file_set_contents (filename, content, -1, &amp;amp;error);&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;================以下為本來有的============== &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;GtkWidget*&lt;br /&gt;lookup_widget                          (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;      *widget,&lt;br /&gt;                                        &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *widget_name)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*parent, *found_widget;&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;for &lt;/span&gt;(;;)&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="reservedWord"&gt;if &lt;/span&gt;(GTK_IS_MENU (widget))&lt;br /&gt;        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));&lt;br /&gt;      &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        parent = widget-&amp;gt;parent;&lt;br /&gt;      &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!parent)&lt;br /&gt;        parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), &lt;span class="quot"&gt;&amp;quot;G&lt;b&gt;&lt;/b&gt;ladeParentKey&amp;quot;&lt;/span&gt;);&lt;br /&gt;      &lt;span class="reservedWord"&gt;if &lt;/span&gt;(parent == NULL)&lt;br /&gt;        &lt;span class="reservedWord"&gt;break;&lt;/span&gt;&lt;br /&gt;      widget = parent;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),&lt;br /&gt;                                                 widget_name);&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!found_widget)&lt;br /&gt;    g_warning (&lt;span class="quot"&gt;&amp;quot;W&lt;b&gt;&lt;/b&gt;idget not found: %s&amp;quot;&lt;/span&gt;, widget_name);&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;found_widget;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;&lt;span class="reservedWord"&gt;GList &lt;/span&gt;*pixmaps_directories = NULL;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;/* Use &lt;span class="reservedWord"&gt;this &lt;/span&gt;&lt;span class="reservedWord"&gt;function &lt;/span&gt;to set the directory containing installed pixmaps. */&lt;/span&gt;&lt;br /&gt;void&lt;br /&gt;add_pixmap_directory                   (&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *directory)&lt;br /&gt;{&lt;br /&gt;  pixmaps_directories = g_list_prepend (pixmaps_directories,&lt;br /&gt;                                        g_strdup (directory));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;/* This is an internally used &lt;span class="reservedWord"&gt;function &lt;/span&gt;to find pixmap files. */&lt;/span&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;static &lt;/span&gt;gchar*&lt;br /&gt;find_pixmap_file                       (&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *filename)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;GList &lt;/span&gt;*elem;&lt;br /&gt;&lt;br /&gt;  &lt;span class="note"&gt;/* We step through each of the pixmaps directory to find it. */&lt;/span&gt;&lt;br /&gt;  elem = pixmaps_directories;&lt;br /&gt;  &lt;span class="reservedWord"&gt;while &lt;/span&gt;(elem)&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*pathname = g_strdup_printf (&lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt;s%s%s&amp;quot;&lt;/span&gt;, (gchar*)elem-&amp;gt;data,&lt;br /&gt;                                         G_DIR_SEPARATOR_S, filename);&lt;br /&gt;      &lt;span class="reservedWord"&gt;if &lt;/span&gt;(g_file_test (pathname, G_FILE_TEST_EXISTS))&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;pathname;&lt;br /&gt;      g_free (pathname);&lt;br /&gt;      elem = elem-&amp;gt;next;&lt;br /&gt;    }&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;NULL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;/* This is an internally used &lt;span class="reservedWord"&gt;function &lt;/span&gt;to create pixmaps. */&lt;/span&gt;&lt;br /&gt;GtkWidget*&lt;br /&gt;create_pixmap                          (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;      *widget,&lt;br /&gt;                                        &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *filename)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*pathname = NULL;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*pixmap;&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!filename || !filename[0])&lt;br /&gt;      &lt;span class="reservedWord"&gt;return &lt;/span&gt;gtk_image_new ();&lt;br /&gt;&lt;br /&gt;  pathname = find_pixmap_file (filename);&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!pathname)&lt;br /&gt;    {&lt;br /&gt;      g_warning (_(&lt;span class="quot"&gt;&amp;quot;C&lt;b&gt;&lt;/b&gt;ouldnt find pixmap file: %s&amp;quot;&lt;/span&gt;), filename);&lt;br /&gt;      &lt;span class="reservedWord"&gt;return &lt;/span&gt;gtk_image_new ();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  pixmap = gtk_image_new_from_file (pathname);&lt;br /&gt;  g_free (pathname);&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;pixmap;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;/* This is an internally used &lt;span class="reservedWord"&gt;function &lt;/span&gt;to create pixmaps. */&lt;/span&gt;&lt;br /&gt;GdkPixbuf*&lt;br /&gt;create_pixbuf                          (&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *filename)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*pathname = NULL;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GdkPixbuf &lt;/span&gt;*pixbuf;&lt;br /&gt;  &lt;span class="reservedWord"&gt;GError &lt;/span&gt;*error = NULL;&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!filename || !filename[0])&lt;br /&gt;      &lt;span class="reservedWord"&gt;return &lt;/span&gt;NULL;&lt;br /&gt;&lt;br /&gt;  pathname = find_pixmap_file (filename);&lt;br /&gt;&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!pathname)&lt;br /&gt;    {&lt;br /&gt;      g_warning (_(&lt;span class="quot"&gt;&amp;quot;C&lt;b&gt;&lt;/b&gt;ouldnt find pixmap file: %s&amp;quot;&lt;/span&gt;), filename);&lt;br /&gt;      &lt;span class="reservedWord"&gt;return &lt;/span&gt;NULL;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  pixbuf = gdk_pixbuf_new_from_file (pathname, &amp;amp;error);&lt;br /&gt;  &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!pixbuf)&lt;br /&gt;    {&lt;br /&gt;      fprintf (stderr, &lt;span class="quot"&gt;&amp;quot;F&lt;b&gt;&lt;/b&gt;ailed to load pixbuf file: %s: %s\n&amp;quot;&lt;/span&gt;,&lt;br /&gt;               pathname, error-&amp;gt;message);&lt;br /&gt;      g_error_free (error);&lt;br /&gt;    }&lt;br /&gt;  g_free (pathname);&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;pixbuf;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;/* This is used to set ATK action descriptions. */&lt;/span&gt;&lt;br /&gt;void&lt;br /&gt;glade_set_atk_action_description       (&lt;span class="reservedWord"&gt;AtkAction &lt;/span&gt;      *action,&lt;br /&gt;                                        &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *action_name,&lt;br /&gt;                                        &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;    *description)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;int &lt;/span&gt;&lt;/span&gt;n_actions, i;&lt;br /&gt;&lt;br /&gt;  n_actions = atk_action_get_n_actions (action);&lt;br /&gt;  &lt;span class="reservedWord"&gt;for &lt;/span&gt;(i = 0; i &amp;lt; n_actions; i++)&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="reservedWord"&gt;if &lt;/span&gt;(!strcmp (atk_action_get_name (action, i), action_name))&lt;br /&gt;        atk_action_set_description (action, i, description);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-4653182639974307906?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/4653182639974307906/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/05/gtk-v10.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4653182639974307906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/4653182639974307906'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/05/gtk-v10.html' title='GTK實作之記事本 v1.0'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_bi6B4jS4CJw/S_PTLQgKuSI/AAAAAAAAT18/rvndtnXYsYQ/s72-c/notepad_2_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-2028947755807545242</id><published>2010-05-19T19:19:00.006+08:00</published><updated>2010-05-19T19:26:39.801+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>GTK+ Programming with Glade and Dev C++</title><content type='html'>&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/S_PJazr27BI/AAAAAAAAT1w/PZmqb7pfals/s1600-h/glade_01%5B5%5D.jpg"&gt;&lt;img alt="glade_01" border="0" height="296" src="http://lh5.ggpht.com/_bi6B4jS4CJw/S_PJb9762qI/AAAAAAAAT10/STsq000cMVw/glade_01_thumb%5B3%5D.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="glade_01" width="577" /&gt;&lt;/a&gt; &lt;br /&gt;Glade是GTK+的一套RAD工具，可直接拉出大部分的視窗元件，並有詳細的調整和訊號對應，對於初學者來說應該相當適用。&lt;br /&gt;&lt;br /&gt;基本的使用教學可參考這篇&lt;b&gt;&lt;a href="http://www.cqinc.com.tw/coopermaa/xwindow/2000010201.htm"&gt;Glade 入門介紹&lt;/a&gt;。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;只是因為Glade不一定跟Dev C++的DevPak相吻合，所以在使用Dev C++編譯前可能需要作點修改。以下便簡單示範幾個修改步驟，必須先說，這只是我個人的即興作法，不符標準，也不求準確，只求能編譯、能執行。所以參考價值恐怕不怎麼高，看看即可。&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:cdac4372-fe8d-4c32-96f6-736cb8f7231e" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #9fc5e8;"&gt;程式版本：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #674ea7;"&gt;Glade 2.12.1&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #674ea7;"&gt;Dev C++ 4.9.9.2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #b6d7a8;"&gt;1.修改.dev檔。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;以Glade拉出樣式雛型，然後儲存，並按下「Build」，程式會自動在專案目錄中產生devcpp子目錄，以文字編輯器開啟其中的.dev檔；接著以Dev C++新建一個GTK+的C專案，也用文字編輯器打開此新專案的.dev檔，檢查其中的『Compiler』、『CppCompiler』和『Linker』這三段落是否與Glade自己產生的dev中的相同，若不一樣，就取代後者。&lt;br /&gt;&lt;blockquote&gt;Compiler=-I"&amp;lt;INCLUDE&amp;gt;\gtk-2.0" -I"&amp;lt;LIB&amp;gt;\gtk-2.0\include" -I"&amp;lt;INCLUDE&amp;gt;\atk-1.0" -I"&amp;lt;INCLUDE&amp;gt;\pango-1.0" -I"&amp;lt;INCLUDE&amp;gt;\cairo" -I"&amp;lt;INCLUDE&amp;gt;\glib-2.0" -I"&amp;lt;INCLUDE&amp;gt;\glib-2.0\glib" -I"&amp;lt;LIB&amp;gt;\glib-2.0" -I"&amp;lt;LIB&amp;gt;\glib-2.0\include" -mno-cygwin -mms-bitfields     &lt;br /&gt;CppCompiler=      &lt;br /&gt;Linker=-limm32 -lshell32 -lole32 -luuid -lintl -lcairo.dll -lpangowin32-1.0.dll -latk-1.0.dll -lgdk_pixbuf-2.0.dll -lgdk-win32-2.0.dll -lglib-2.0.dll -lgmodule-2.0.dll -lgobject-2.0.dll -lgthread-2.0.dll -lgtk-win32-2.0.dll -lpango-1.0.dll&lt;/blockquote&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #b6d7a8;"&gt;2.修改main.c。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;打開子目錄src中的main.c，將如下三行：&lt;br /&gt;&lt;blockquote&gt;gchar *package_prefix = PACKAGE_PREFIX;     &lt;br /&gt;gchar *package_data_dir = PACKAGE_DATA_DIR;      &lt;br /&gt;gchar *package_locale_dir = PACKAGE_LOCALE_DIR;&lt;/blockquote&gt;改成這樣：&lt;br /&gt;&lt;blockquote&gt;gchar *package_prefix = "" ; //PACKAGE_PREFIX;     &lt;br /&gt;gchar *package_data_dir = "" ; //PACKAGE_DATA_DIR;      &lt;br /&gt;gchar *package_locale_dir = "" ; //PACKAGE_LOCALE_DIR;&lt;/blockquote&gt;&lt;br /&gt;還有這一行：&lt;br /&gt;&lt;blockquote&gt;pixmap_dir = g_build_filename (package_data_dir, PACKAGE, "pixmaps", NULL);&lt;/blockquote&gt;改成：&lt;br /&gt;&lt;blockquote&gt;pixmap_dir = g_build_filename (package_data_dir, "pixmaps", NULL);&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #b6d7a8;"&gt;3.修改interface.c檔。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;把使用的圖檔放入pixmaps資料夾中，並將interface.c的所有如下段落 &lt;br /&gt;&lt;blockquote&gt;image = create_pixmap (window1, "檔名.ico"); &lt;/blockquote&gt;改成： &lt;br /&gt;&lt;blockquote&gt;image = gtk_image_new_from_file ("..\\pixmaps\\檔名.ico");&lt;/blockquote&gt;&lt;span style="background-color: #f0f0f0;"&gt;&lt;/span&gt;&lt;br /&gt;而若有如下段落：&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; dialog1_information_icon_pixbuf = gdk_pixbuf_new_from_file ("檔名.ico", &amp;amp;error);     &lt;br /&gt;&amp;nbsp; if (dialog1_information_icon_pixbuf)      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gtk_window_set_icon (GTK_WINDOW (dialog1_information), dialog1_information_icon_pixbuf);      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gdk_pixbuf_unref (dialog1_information_icon_pixbuf);      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }      &lt;br /&gt;&amp;nbsp; gtk_window_set_icon (GTK_WINDOW (dialog1_information), dialog1_information_icon_pixbuf); &lt;/blockquote&gt;則要改成： &lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; gtk_window_set_icon_from_file (GTK_WINDOW (dialog1_information), "..\\pixmaps\\檔名.ico", &amp;amp;error);&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="background-color: #f0f0f0;"&gt;&lt;/span&gt;&lt;br /&gt;OK，做好以上幾個修改步驟後，應該就能用Dev C++成功編譯了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2240323542513209789-2028947755807545242?l=surveyork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://surveyork.blogspot.com/feeds/2028947755807545242/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://surveyork.blogspot.com/2010/05/gtk-programming-with-glade-and-dev-cpp.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/2028947755807545242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2240323542513209789/posts/default/2028947755807545242'/><link rel='alternate' type='text/html' href='http://surveyork.blogspot.com/2010/05/gtk-programming-with-glade-and-dev-cpp.html' title='GTK+ Programming with Glade and Dev C++'/><author><name>surveyorK</name><uri>http://www.blogger.com/profile/11443363736416809989</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_bi6B4jS4CJw/SvS0Q14z_YI/AAAAAAAAP9k/jkHpsSaROvk/s1600-R/surveyork.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_bi6B4jS4CJw/S_PJb9762qI/AAAAAAAAT10/STsq000cMVw/s72-c/glade_01_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2240323542513209789.post-123874956080074822</id><published>2010-05-15T23:23:00.015+08:00</published><updated>2010-08-05T08:48:38.979+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>GTK實作之倉庫番 v1.0</title><content type='html'>&lt;a href="http://lh5.ggpht.com/_bi6B4jS4CJw/S-68g2YTRDI/AAAAAAAAT0Y/eoqabZpTAvc/s1600-h/box_world%5B5%5D.jpg"&gt;&lt;img alt="box_world" border="0" height="479" src="http://lh4.ggpht.com/_bi6B4jS4CJw/S-68iS60rjI/AAAAAAAAT0c/hrWwWlu_txQ/box_world_thumb%5B3%5D.jpg?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="box_world" width="566" /&gt;&lt;/a&gt;&lt;br /&gt;早前有一陣子熱衷倉庫番，整天拿著手機把玩。之後雖然熱情消卻，但依然覺得倉庫番是一款簡潔又深邃的內涵遊戲。規則簡單、卻也能複雜得讓人難以駕馭，這種東西最適合以電腦的暴力演算法進行破解了。眼下想寫個倉庫番演算法來求得最佳走法。不過遊戲的大概還是要先做出來，所以就簡單做了這個，算是先行版本。看起來寒酸，不過基本功能都有，雖然只有內建六張地圖（挪用自SuperPirate Lai撰寫的經典倉庫番，感謝這位前輩），不過以後還可擴充，並不急於一時。&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0a7b020c-2e51-4379-b078-a5387e1e26be:7d40fd7e-43b2-4803-9ff1-7295a07b30b3" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;因為有之前寫踩地雷的經驗，這次相對輕鬆許多，一些視窗元件都比較能理解並利用了。只有undo功能的部份比較費心思，修改了很久，最後辦法是每走一 步便將整個地圖紀錄一次，若要undo就整張地圖還原。很直覺的想法，雖然比較大費周章，資源浪費也多，但可減少不少迂迴和多餘的程式段落，所以還是可以接受。&lt;br /&gt;&lt;br /&gt;還有讀取地圖檔的部份，經過這次才知道，原來全形符號是用兩組ASCII字符所組成的。所以讀取上並沒有困難；而顯示上，全形的中文字還是要靠g_locale_to_utf8來幫忙。&lt;br /&gt;&lt;br /&gt;嗯，沒啥好說的了。照例，直接貼程式碼吧。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: teal;"&gt;完整程式碼+執行檔：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://popodragon.myweb.hinet.net/Program/BoxWorld_v1.0.rar"&gt;http://popodragon.myweb.hinet.net/Program/BoxWorld_v1.0.rar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="color: teal;"&gt;資源圖檔：&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jh_GlZJI/AAAAAAAAT1o/qFEWoJbv2oA/s1600/_rc_workman.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jh_GlZJI/AAAAAAAAT1o/qFEWoJbv2oA/s320/_rc_workman.png" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jVxKV88I/AAAAAAAAT0g/a0CLyAGEGUs/s1600/_rc_background.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jVxKV88I/AAAAAAAAT0g/a0CLyAGEGUs/s320/_rc_background.png" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_bi6B4jS4CJw/S-8jbI0ntVI/AAAAAAAAT1A/kPFxT7LQIlk/s1600/_rc_none.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_bi6B4jS4CJw/S-8jbI0ntVI/AAAAAAAAT1A/kPFxT7LQIlk/s320/_rc_none.png" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_bi6B4jS4CJw/S-8jXEmBvVI/AAAAAAAAT0o/8qzGN2G-wJc/s1600/_rc_box.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_bi6B4jS4CJw/S-8jXEmBvVI/AAAAAAAAT0o/8qzGN2G-wJc/s320/_rc_box.png" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_bi6B4jS4CJw/S-8jYeuhVdI/AAAAAAAAT0w/gkj6raQMdls/s1600/_rc_boxOpen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_bi6B4jS4CJw/S-8jYeuhVdI/AAAAAAAAT0w/gkj6raQMdls/s320/_rc_boxOpen.png" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jdwqVp4I/AAAAAAAAT1Q/afzPaIBzpTE/s1600/_rc_road.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_bi6B4jS4CJw/S-8jdwqVp4I/AAAAAAAAT1Q/afzPaIBzpTE/s320/_rc_road.jpg" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_bi6B4jS4CJw/S-8jfMrKfaI/AAAAAAAAT1Y/5ButITQBwe0/s1600/_rc_target.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_bi6B4jS4CJw/S-8jfMrKfaI/AAAAAAAAT1Y/5ButITQBwe0/s320/_rc_target.png" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_bi6B4jS4CJw/S-8jgjYb_DI/AAAAAAAAT1g/Du_otSLL8iA/s1600/_rc_wall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_bi6B4jS4CJw/S-8jgjYb_DI/AAAAAAAAT1g/Du_otSLL8iA/s320/_rc_wall.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="color: teal;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: teal;"&gt;Box_World_main.c：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="codeStyle" style="float:left; width:30px; height:auto; background-color:lightslategray; color:white ; TEXT-ALIGN:center ; overflow-y:hidden;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;br /&gt;179&lt;br /&gt;180&lt;br /&gt;181&lt;br /&gt;182&lt;br /&gt;183&lt;br /&gt;184&lt;br /&gt;185&lt;br /&gt;186&lt;br /&gt;187&lt;br /&gt;188&lt;br /&gt;189&lt;br /&gt;190&lt;br /&gt;191&lt;br /&gt;192&lt;br /&gt;193&lt;br /&gt;194&lt;br /&gt;195&lt;br /&gt;196&lt;br /&gt;197&lt;br /&gt;198&lt;br /&gt;199&lt;br /&gt;200&lt;br /&gt;201&lt;br /&gt;202&lt;br /&gt;203&lt;br /&gt;204&lt;br /&gt;205&lt;br /&gt;206&lt;br /&gt;207&lt;br /&gt;208&lt;br /&gt;209&lt;br /&gt;210&lt;br /&gt;211&lt;br /&gt;212&lt;br /&gt;213&lt;br /&gt;214&lt;br /&gt;215&lt;br /&gt;216&lt;br /&gt;217&lt;br /&gt;218&lt;br /&gt;219&lt;br /&gt;220&lt;br /&gt;221&lt;br /&gt;222&lt;br /&gt;223&lt;br /&gt;224&lt;br /&gt;225&lt;br /&gt;226&lt;br /&gt;227&lt;br /&gt;228&lt;br /&gt;229&lt;br /&gt;230&lt;br /&gt;231&lt;br /&gt;232&lt;br /&gt;233&lt;br /&gt;234&lt;br /&gt;235&lt;br /&gt;236&lt;br /&gt;237&lt;br /&gt;238&lt;br /&gt;239&lt;br /&gt;240&lt;br /&gt;241&lt;br /&gt;242&lt;br /&gt;243&lt;br /&gt;244&lt;br /&gt;245&lt;br /&gt;246&lt;br /&gt;247&lt;br /&gt;248&lt;br /&gt;249&lt;br /&gt;250&lt;br /&gt;251&lt;br /&gt;252&lt;br /&gt;253&lt;br /&gt;254&lt;br /&gt;255&lt;br /&gt;256&lt;br /&gt;257&lt;br /&gt;258&lt;br /&gt;259&lt;br /&gt;260&lt;br /&gt;261&lt;br /&gt;262&lt;br /&gt;263&lt;br /&gt;264&lt;br /&gt;265&lt;br /&gt;266&lt;br /&gt;267&lt;br /&gt;268&lt;br /&gt;269&lt;br /&gt;270&lt;br /&gt;271&lt;br /&gt;272&lt;br /&gt;273&lt;br /&gt;274&lt;br /&gt;275&lt;br /&gt;276&lt;br /&gt;277&lt;br /&gt;278&lt;br /&gt;279&lt;br /&gt;280&lt;br /&gt;281&lt;br /&gt;282&lt;br /&gt;283&lt;br /&gt;284&lt;br /&gt;285&lt;br /&gt;286&lt;br /&gt;287&lt;br /&gt;288&lt;br /&gt;289&lt;br /&gt;290&lt;br /&gt;291&lt;br /&gt;292&lt;br /&gt;293&lt;br /&gt;294&lt;br /&gt;295&lt;br /&gt;296&lt;br /&gt;297&lt;br /&gt;298&lt;br /&gt;299&lt;br /&gt;300&lt;br /&gt;301&lt;br /&gt;302&lt;br /&gt;303&lt;br /&gt;304&lt;br /&gt;305&lt;br /&gt;306&lt;br /&gt;307&lt;br /&gt;308&lt;br /&gt;309&lt;br /&gt;310&lt;br /&gt;311&lt;br /&gt;312&lt;br /&gt;313&lt;br /&gt;314&lt;br /&gt;315&lt;br /&gt;316&lt;br /&gt;317&lt;br /&gt;318&lt;br /&gt;319&lt;br /&gt;320&lt;br /&gt;321&lt;br /&gt;322&lt;br /&gt;323&lt;br /&gt;324&lt;br /&gt;325&lt;br /&gt;326&lt;br /&gt;327&lt;br /&gt;328&lt;br /&gt;329&lt;br /&gt;330&lt;br /&gt;331&lt;br /&gt;332&lt;br /&gt;333&lt;br /&gt;334&lt;br /&gt;335&lt;br /&gt;336&lt;br /&gt;337&lt;br /&gt;338&lt;br /&gt;339&lt;br /&gt;340&lt;br /&gt;341&lt;br /&gt;342&lt;br /&gt;343&lt;br /&gt;344&lt;br /&gt;345&lt;br /&gt;346&lt;br /&gt;347&lt;br /&gt;348&lt;br /&gt;349&lt;br /&gt;350&lt;br /&gt;351&lt;br /&gt;352&lt;br /&gt;353&lt;br /&gt;354&lt;br /&gt;355&lt;br /&gt;356&lt;br /&gt;357&lt;br /&gt;358&lt;br /&gt;359&lt;br /&gt;360&lt;br /&gt;361&lt;br /&gt;362&lt;br /&gt;363&lt;br /&gt;364&lt;br /&gt;365&lt;br /&gt;366&lt;br /&gt;367&lt;br /&gt;368&lt;br /&gt;369&lt;br /&gt;370&lt;br /&gt;371&lt;br /&gt;372&lt;br /&gt;373&lt;br /&gt;374&lt;br /&gt;375&lt;br /&gt;376&lt;br /&gt;377&lt;br /&gt;378&lt;br /&gt;379&lt;br /&gt;380&lt;br /&gt;381&lt;br /&gt;382&lt;br /&gt;383&lt;br /&gt;384&lt;br /&gt;385&lt;br /&gt;386&lt;br /&gt;387&lt;br /&gt;388&lt;br /&gt;389&lt;br /&gt;390&lt;br /&gt;391&lt;br /&gt;392&lt;br /&gt;393&lt;br /&gt;394&lt;br /&gt;395&lt;br /&gt;396&lt;br /&gt;397&lt;br /&gt;398&lt;br /&gt;399&lt;br /&gt;400&lt;br /&gt;401&lt;br /&gt;402&lt;br /&gt;403&lt;br /&gt;404&lt;br /&gt;405&lt;br /&gt;406&lt;br /&gt;407&lt;br /&gt;408&lt;br /&gt;409&lt;br /&gt;410&lt;br /&gt;411&lt;br /&gt;412&lt;br /&gt;413&lt;br /&gt;414&lt;br /&gt;415&lt;br /&gt;416&lt;br /&gt;417&lt;br /&gt;418&lt;br /&gt;419&lt;br /&gt;420&lt;br /&gt;421&lt;br /&gt;422&lt;br /&gt;423&lt;br /&gt;424&lt;br /&gt;425&lt;br /&gt;426&lt;br /&gt;427&lt;br /&gt;428&lt;br /&gt;429&lt;br /&gt;430&lt;br /&gt;431&lt;br /&gt;432&lt;br /&gt;433&lt;br /&gt;434&lt;br /&gt;435&lt;br /&gt;436&lt;br /&gt;437&lt;br /&gt;438&lt;br /&gt;439&lt;br /&gt;440&lt;br /&gt;441&lt;br /&gt;442&lt;br /&gt;443&lt;br /&gt;444&lt;br /&gt;445&lt;br /&gt;446&lt;br /&gt;447&lt;br /&gt;448&lt;br /&gt;449&lt;br /&gt;450&lt;br /&gt;451&lt;br /&gt;452&lt;br /&gt;453&lt;br /&gt;454&lt;br /&gt;455&lt;br /&gt;456&lt;br /&gt;457&lt;br /&gt;458&lt;br /&gt;459&lt;br /&gt;460&lt;br /&gt;461&lt;br /&gt;462&lt;br /&gt;463&lt;br /&gt;464&lt;br /&gt;465&lt;br /&gt;466&lt;br /&gt;467&lt;br /&gt;468&lt;br /&gt;469&lt;br /&gt;470&lt;br /&gt;471&lt;br /&gt;472&lt;br /&gt;473&lt;br /&gt;474&lt;br /&gt;475&lt;br /&gt;476&lt;br /&gt;477&lt;br /&gt;478&lt;br /&gt;479&lt;br /&gt;480&lt;br /&gt;481&lt;br /&gt;482&lt;br /&gt;483&lt;br /&gt;484&lt;br /&gt;485&lt;br /&gt;486&lt;br /&gt;487&lt;br /&gt;488&lt;br /&gt;489&lt;br /&gt;490&lt;br /&gt;491&lt;br /&gt;492&lt;br /&gt;493&lt;br /&gt;494&lt;br /&gt;495&lt;br /&gt;496&lt;br /&gt;497&lt;br /&gt;498&lt;br /&gt;499&lt;br /&gt;500&lt;br /&gt;501&lt;br /&gt;502&lt;br /&gt;503&lt;br /&gt;504&lt;br /&gt;505&lt;br /&gt;506&lt;br /&gt;507&lt;br /&gt;508&lt;br /&gt;509&lt;br /&gt;510&lt;br /&gt;511&lt;br /&gt;512&lt;br /&gt;513&lt;br /&gt;514&lt;br /&gt;515&lt;br /&gt;516&lt;br /&gt;517&lt;br /&gt;518&lt;br /&gt;519&lt;br /&gt;520&lt;br /&gt;521&lt;br /&gt;522&lt;br /&gt;523&lt;br /&gt;524&lt;br /&gt;525&lt;br /&gt;526&lt;br /&gt;527&lt;br /&gt;528&lt;br /&gt;529&lt;br /&gt;530&lt;br /&gt;531&lt;br /&gt;532&lt;br /&gt;533&lt;br /&gt;534&lt;br /&gt;535&lt;br /&gt;536&lt;br /&gt;537&lt;br /&gt;538&lt;br /&gt;539&lt;br /&gt;540&lt;br /&gt;541&lt;br /&gt;542&lt;br /&gt;543&lt;br /&gt;544&lt;br /&gt;545&lt;br /&gt;546&lt;br /&gt;547&lt;br /&gt;548&lt;br /&gt;549&lt;br /&gt;550&lt;br /&gt;551&lt;br /&gt;552&lt;br /&gt;553&lt;br /&gt;554&lt;br /&gt;555&lt;br /&gt;556&lt;br /&gt;557&lt;br /&gt;558&lt;br /&gt;559&lt;br /&gt;560&lt;br /&gt;561&lt;br /&gt;562&lt;br /&gt;563&lt;br /&gt;564&lt;br /&gt;565&lt;br /&gt;566&lt;br /&gt;567&lt;br /&gt;568&lt;br /&gt;569&lt;br /&gt;570&lt;br /&gt;571&lt;br /&gt;572&lt;br /&gt;573&lt;br /&gt;574&lt;br /&gt;575&lt;br /&gt;576&lt;br /&gt;577&lt;br /&gt;578&lt;br /&gt;579&lt;br /&gt;580&lt;br /&gt;581&lt;br /&gt;582&lt;br /&gt;583&lt;br /&gt;584&lt;br /&gt;585&lt;br /&gt;586&lt;br /&gt;587&lt;br /&gt;588&lt;br /&gt;589&lt;br /&gt;590&lt;br /&gt;591&lt;br /&gt;592&lt;br /&gt;593&lt;br /&gt;594&lt;br /&gt;595&lt;br /&gt;596&lt;br /&gt;597&lt;br /&gt;598&lt;br /&gt;599&lt;br /&gt;600&lt;br /&gt;601&lt;br /&gt;602&lt;br /&gt;603&lt;br /&gt;604&lt;br /&gt;605&lt;br /&gt;606&lt;br /&gt;607&lt;br /&gt;608&lt;br /&gt;609&lt;br /&gt;610&lt;br /&gt;611&lt;br /&gt;612&lt;br /&gt;613&lt;br /&gt;614&lt;br /&gt;615&lt;br /&gt;616&lt;br /&gt;617&lt;br /&gt;618&lt;br /&gt;619&lt;br /&gt;620&lt;br /&gt;621&lt;br /&gt;622&lt;br /&gt;623&lt;br /&gt;624&lt;br /&gt;625&lt;br /&gt;626&lt;br /&gt;627&lt;br /&gt;628&lt;br /&gt;629&lt;br /&gt;630&lt;br /&gt;631&lt;br /&gt;632&lt;br /&gt;633&lt;br /&gt;634&lt;br /&gt;635&lt;br /&gt;636&lt;br /&gt;637&lt;br /&gt;638&lt;br /&gt;639&lt;br /&gt;640&lt;br /&gt;641&lt;br /&gt;642&lt;br /&gt;643&lt;br /&gt;644&lt;br /&gt;645&lt;br /&gt;646&lt;br /&gt;647&lt;br /&gt;648&lt;br /&gt;649&lt;br /&gt;650&lt;br /&gt;651&lt;br /&gt;652&lt;br /&gt;653&lt;br /&gt;654&lt;br /&gt;655&lt;br /&gt;656&lt;br /&gt;657&lt;br /&gt;658&lt;br /&gt;659&lt;br /&gt;660&lt;br /&gt;661&lt;br /&gt;662&lt;br /&gt;663&lt;br /&gt;664&lt;br /&gt;665&lt;br /&gt;666&lt;br /&gt;667&lt;br /&gt;668&lt;br /&gt;669&lt;br /&gt;670&lt;br /&gt;671&lt;br /&gt;672&lt;br /&gt;673&lt;br /&gt;674&lt;br /&gt;675&lt;br /&gt;676&lt;br /&gt;677&lt;br /&gt;678&lt;br /&gt;679&lt;br /&gt;680&lt;br /&gt;681&lt;br /&gt;682&lt;br /&gt;683&lt;br /&gt;684&lt;br /&gt;685&lt;br /&gt;686&lt;br /&gt;687&lt;br /&gt;688&lt;br /&gt;689&lt;br /&gt;690&lt;br /&gt;691&lt;br /&gt;692&lt;br /&gt;693&lt;br /&gt;694&lt;br /&gt;695&lt;br /&gt;696&lt;br /&gt;697&lt;br /&gt;698&lt;br /&gt;699&lt;br /&gt;700&lt;br /&gt;701&lt;br /&gt;702&lt;br /&gt;703&lt;br /&gt;704&lt;br /&gt;705&lt;br /&gt;706&lt;br /&gt;707&lt;br /&gt;708&lt;br /&gt;709&lt;br /&gt;710&lt;br /&gt;711&lt;br /&gt;712&lt;br /&gt;713&lt;br /&gt;714&lt;br /&gt;715&lt;br /&gt;716&lt;br /&gt;717&lt;br /&gt;718&lt;br /&gt;719&lt;br /&gt;720&lt;br /&gt;721&lt;br /&gt;722&lt;br /&gt;723&lt;br /&gt;724&lt;br /&gt;725&lt;br /&gt;726&lt;br /&gt;727&lt;br /&gt;728&lt;br /&gt;729&lt;br /&gt;730&lt;br /&gt;731&lt;br /&gt;732&lt;br /&gt;733&lt;br /&gt;734&lt;br /&gt;735&lt;br /&gt;736&lt;br /&gt;737&lt;br /&gt;738&lt;br /&gt;739&lt;br /&gt;740&lt;br /&gt;741&lt;br /&gt;742&lt;br /&gt;743&lt;br /&gt;744&lt;br /&gt;745&lt;br /&gt;746&lt;br /&gt;747&lt;br /&gt;748&lt;br /&gt;749&lt;br /&gt;750&lt;br /&gt;751&lt;br /&gt;752&lt;br /&gt;753&lt;br /&gt;754&lt;br /&gt;755&lt;br /&gt;756&lt;br /&gt;757&lt;br /&gt;758&lt;br /&gt;759&lt;br /&gt;760&lt;br /&gt;761&lt;br /&gt;762&lt;br /&gt;763&lt;br /&gt;764&lt;br /&gt;765&lt;br /&gt;766&lt;br /&gt;767&lt;br /&gt;768&lt;br /&gt;769&lt;br /&gt;770&lt;br /&gt;771&lt;br /&gt;772&lt;br /&gt;773&lt;br /&gt;774&lt;br /&gt;775&lt;br /&gt;776&lt;br /&gt;777&lt;br /&gt;778&lt;br /&gt;779&lt;br /&gt;780&lt;br /&gt;781&lt;br /&gt;782&lt;br /&gt;783&lt;br /&gt;784&lt;br /&gt;785&lt;br /&gt;786&lt;br /&gt;787&lt;br /&gt;788&lt;br /&gt;789&lt;br /&gt;790&lt;br /&gt;791&lt;br /&gt;792&lt;br /&gt;793&lt;br /&gt;794&lt;br /&gt;795&lt;br /&gt;796&lt;br /&gt;797&lt;br /&gt;798&lt;br /&gt;799&lt;br /&gt;800&lt;br /&gt;801&lt;br /&gt;802&lt;br /&gt;803&lt;br /&gt;804&lt;br /&gt;805&lt;br /&gt;806&lt;br /&gt;807&lt;br /&gt;808&lt;br /&gt;809&lt;br /&gt;810&lt;br /&gt;811&lt;br /&gt;812&lt;br /&gt;813&lt;br /&gt;814&lt;br /&gt;815&lt;br /&gt;816&lt;br /&gt;817&lt;br /&gt;818&lt;br /&gt;819&lt;br /&gt;820&lt;br /&gt;821&lt;br /&gt;822&lt;br /&gt;823&lt;br /&gt;824&lt;br /&gt;825&lt;br /&gt;826&lt;br /&gt;827&lt;br /&gt;828&lt;br /&gt;829&lt;br /&gt;830&lt;br /&gt;831&lt;br /&gt;832&lt;br /&gt;833&lt;br /&gt;834&lt;br /&gt;835&lt;br /&gt;836&lt;br /&gt;837&lt;br /&gt;838&lt;br /&gt;839&lt;br /&gt;840&lt;br /&gt;841&lt;br /&gt;842&lt;br /&gt;843&lt;br /&gt;844&lt;br /&gt;845&lt;br /&gt;846&lt;br /&gt;847&lt;br /&gt;848&lt;br /&gt;849&lt;br /&gt;850&lt;br /&gt;851&lt;br /&gt;852&lt;br /&gt;853&lt;br /&gt;854&lt;br /&gt;855&lt;br /&gt;856&lt;br /&gt;857&lt;br /&gt;858&lt;br /&gt;859&lt;br /&gt;860&lt;br /&gt;861&lt;br /&gt;862&lt;br /&gt;863&lt;br /&gt;864&lt;br /&gt;865&lt;br /&gt;866&lt;br /&gt;867&lt;br /&gt;868&lt;br /&gt;869&lt;br /&gt;870&lt;br /&gt;871&lt;br /&gt;872&lt;br /&gt;873&lt;br /&gt;874&lt;br /&gt;875&lt;br /&gt;876&lt;br /&gt;877&lt;br /&gt;878&lt;br /&gt;879&lt;br /&gt;880&lt;br /&gt;881&lt;br /&gt;882&lt;br /&gt;883&lt;br /&gt;884&lt;br /&gt;885&lt;br /&gt;886&lt;br /&gt;887&lt;br /&gt;888&lt;br /&gt;889&lt;br /&gt;890&lt;br /&gt;891&lt;br /&gt;892&lt;br /&gt;893&lt;br /&gt;894&lt;br /&gt;895&lt;br /&gt;896&lt;br /&gt;897&lt;br /&gt;898&lt;br /&gt;899&lt;br /&gt;900&lt;br /&gt;901&lt;br /&gt;902&lt;br /&gt;903&lt;br /&gt;904&lt;br /&gt;905&lt;br /&gt;906&lt;br /&gt;907&lt;br /&gt;908&lt;br /&gt;909&lt;br /&gt;910&lt;br /&gt;911&lt;br /&gt;912&lt;br /&gt;913&lt;br /&gt;914&lt;br /&gt;915&lt;br /&gt;916&lt;br /&gt;917&lt;br /&gt;918&lt;br /&gt;919&lt;br /&gt;920&lt;br /&gt;921&lt;br /&gt;922&lt;br /&gt;923&lt;br /&gt;924&lt;br /&gt;925&lt;br /&gt;926&lt;br /&gt;927&lt;br /&gt;928&lt;br /&gt;929&lt;br /&gt;930&lt;br /&gt;&lt;/pre&gt;&lt;pre class="codeStyle" style="float:left; width:540px; overflow-y:hidden; "&gt;&lt;span class="note"&gt;/*&lt;br /&gt;GTK實作的簡易倉庫番視窗遊戲。&lt;br /&gt;遊戲中會計算推箱次數和移動次數並顯示在上方label文字中。&lt;br /&gt;以鍵盤的方向鍵控制遊戲中的倉庫工人，進行搬運工作。 &lt;br /&gt;按space鍵可退回前一步，預設為最多退一百步。&lt;br /&gt;以32x32的多張圖檔作為地圖元件，繪製出整張地圖。 &lt;br /&gt;可讀取地圖檔，或使用內建地圖， 內建地圖有六張，可遊戲中直接更換地圖。 &lt;br /&gt;多數訊息會顯示在上方的entry輸入框。 &lt;br /&gt;&lt;br /&gt;update: 2010.5.15&lt;br /&gt;*/&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;gdk/gdk.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;glib.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;glib/gprintf.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;#include&lt;/span&gt; &amp;lt;gdk/gdkkeysyms.h&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;EQU ==&lt;br /&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;WIDTH 17  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;寬 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;HEIGHT 12 &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;長 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;#define &lt;/span&gt;COUNT_OF_RECORD 100 &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;可回溯幾步   &lt;br /&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="note"&gt;/*&lt;br /&gt; 1. 讀取地圖檔 ok&lt;br /&gt; 2. 限定遊走範圍 ok&lt;br /&gt;   2.1. 走向 road or target -&amp;gt; OK&lt;br /&gt;        走向 box -&amp;gt; 需判斷box同個方向是不是為road or target，若是 -&amp;gt; OK &lt;br /&gt; 3. 設定推動箱子的條件 ok&lt;br /&gt; 4. 制定遊戲完成的條件 ok&lt;br /&gt; 5. 可undo很多步(按鈕+快捷鍵) ok&lt;br /&gt;    5.1. undo時，同時還原推動的箱子次數 ok&lt;br /&gt;    5.2. 從固定次數設成可循環。否則超過次數就會error ok&lt;br /&gt; 6. 紀錄推動箱子的次數 ok&lt;br /&gt; 7. 內建地圖檔 ok&lt;br /&gt; 8. 完成後可直接換下張地圖進行遊戲 ok &lt;br /&gt; 9. 設計AI &lt;br /&gt;*/&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; directionType { &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;四種方向：上、下、左、右 &lt;br /&gt;&lt;/span&gt;    right ,&lt;br /&gt;    left ,&lt;br /&gt;    up ,&lt;br /&gt;    down&lt;br /&gt;} ;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; directionType Dt ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; mapType {&lt;br /&gt;    workman , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;倉庫工人&lt;br /&gt;&lt;/span&gt;    box ,     &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;要搬的箱子&lt;br /&gt;&lt;/span&gt;    boxOpen , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;箱子放在目標上後的狀態&lt;br /&gt;&lt;/span&gt;    target ,  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;箱子要移往的目標&lt;br /&gt;&lt;/span&gt;    road , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;可行走的地板&lt;br /&gt;&lt;/span&gt;    background , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;牆壁以外的地面&lt;br /&gt;&lt;/span&gt;    wall , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;牆壁&lt;br /&gt;&lt;/span&gt;    none ,  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;沒有東西&lt;br /&gt;&lt;/span&gt;    other   &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;正常不應該有這種東西才對......debug用&lt;br /&gt;&lt;/span&gt;} ;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;enum&lt;/span&gt; mapType Mt ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;struct &lt;/span&gt;undoData {&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;workmanX ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;workmanY ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;countOfPushBox ;&lt;br /&gt;    Mt mapType[HEIGHT][WIDTH] ;  &lt;br /&gt;    &lt;span class="note"&gt;//GtkWidget *image[HEIGHT][WIDTH] ;      &lt;br /&gt;&lt;/span&gt;} ;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;typedef &lt;/span&gt;&lt;span class="reservedWord"&gt;struct &lt;/span&gt;undoData Ud ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*gLabel[HEIGHT][WIDTH] ;&lt;br /&gt;&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*gImage[HEIGHT][WIDTH] ;&lt;br /&gt;Mt gMapType[HEIGHT][WIDTH] ; &lt;br /&gt;Mt gMapTypeTemp[HEIGHT][WIDTH] ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;還原用 &lt;br /&gt;&lt;/span&gt;Ud gUndoData[COUNT_OF_RECORD] ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;還原用 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gWorkmanX = 5 ;  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;預設倉庫工人的位置 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gWorkmanY = 5 ;  &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gCountOfPushBox = 0 ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;推動箱子的次數 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gUndoNow = 0 ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;目前記錄幾次地圖了 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gUndoNowInArrary = 0 ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;實際arrary中的gUndoNow次序 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;int &lt;/span&gt;gUndoMaxValue = 0 ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;gUndoNow最高達到的值，只會加，不會減。 &lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;預設的地圖檔  &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*mapFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;map5.txt&amp;quot;&lt;/span&gt; ;  &lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;有用到的幾個圖片檔&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*workmanImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_workman.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*boxImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_box.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*boxOpenImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_boxOpen.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*targetImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_target.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*roadImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_road.jpg&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*backgroundImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_background.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*wallImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_wall.png&amp;quot;&lt;/span&gt; ; &lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*noneImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_none.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*otherImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_other.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*errorImageFile = &lt;span class="quot"&gt;&amp;quot;_&lt;b&gt;&lt;/b&gt;rc_error.png&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;------------------------ declaration ------------------------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;通用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;char &lt;/span&gt;*utf8( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;解決無法顯示中文的窘境&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;GString &lt;/span&gt;*positionToGString( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) ; &lt;span class="note"&gt;// 將x和y組合成&amp;quot; &lt;b&gt;&lt;/b&gt;( x , y ) &amp;quot;字串後回傳&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;GString &lt;/span&gt;*numTostr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;num ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;數字轉字串&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;行走用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;walk( GdkEventKey *event ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;向前走，但走之前要先檢查是否可走 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;moveBox( Mt type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;direction, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將位於(x,y)的box以direction的方向移動&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;typeIsRoadOrtTarget( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;( x, y )的類別為地面或目標地 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;canWalk( &lt;span class="reservedWord"&gt;int &lt;/span&gt;direction, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;可走到(x,y)嗎？&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;地圖用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;readMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;讀入地圖檔 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;drawMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;依據讀入的地圖檔繪出遊戲地圖&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;restoreMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;還原地圖到前一次的狀態 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;recordMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;記錄目前地圖 &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*setComboBox() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;設置comboBox，可直接更換地圖&lt;br /&gt;&lt;/span&gt; &lt;span class="reservedWord"&gt;char &lt;/span&gt;*mapStr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;no ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;以no指定要回傳第幾張地圖字串&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;readMapStr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;no ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;讀入地圖字串 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;callback function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;key_callback( &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*widget, GdkEventKey *event, &lt;span class="reservedWord"&gt;gpointer &lt;/span&gt;data ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;敲下鍵盤會及時反應的callback function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;combo_changed(GtkComboBox *comboBox, &lt;span class="reservedWord"&gt;gpointer &lt;/span&gt;window ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;因應選取的地圖作更動 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;圖片用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setImage( &lt;span class="reservedWord"&gt;int &lt;/span&gt;type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;設置圖片&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*setImageInTable( &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*filename, &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*table, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )  ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將選取的圖片顯示在畫面（box）上 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;類別用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setPositionType( Mt type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )  ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;重新設定( x, y )的類別 &lt;br /&gt;&lt;/span&gt;Mt getPositionType( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )  ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得( x, y )的類別 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;流程用function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;finishGame() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;判斷是否已經完成這一局了  &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;canUndo() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;計算可否再繼續undo&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;初始化function&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;gameSet() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;設定遊戲初始值&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;mapStateInitialization( Mt map[HEIGHT][WIDTH] ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;初始化map &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setWorkmanInitialPosition() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;設置倉庫工人的起始點&lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;gMapTypeTempInitialization() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將gMapType的資料全數複製到gMapTypeTemp &lt;br /&gt;&lt;/span&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;valueInitialization() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;所有數值歸零 &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;------------------------ definition ------------------------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span class="reservedWord"&gt;char &lt;/span&gt;*utf8( &lt;span class="reservedWord"&gt;char &lt;/span&gt;*str )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;解決無法顯示中文的窘境&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span class="reservedWord"&gt;return &lt;/span&gt;g_locale_to_utf8( str, -1, NULL, NULL, NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;GString &lt;/span&gt;*numToStr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;num )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;數字轉字串&lt;br /&gt;&lt;/span&gt;{ &lt;br /&gt;    &lt;span class="reservedWord"&gt;GString &lt;/span&gt;*numOfStr = g_string_new( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; )  ;&lt;br /&gt;    g_string_printf( numOfStr, &lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt;d&amp;quot;&lt;/span&gt;, num); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將數字轉為字串存入numOfStr &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;numOfStr ;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;GString &lt;/span&gt;*positionToGString( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將x和y組合成「 ( x , y ) 」字串後回傳&lt;br /&gt;&lt;/span&gt;{ &lt;br /&gt;    &lt;span class="reservedWord"&gt;GString &lt;/span&gt;*pos = g_string_new( &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt; ( &amp;quot;&lt;/span&gt; ) ; &lt;br /&gt;    &lt;span class="reservedWord"&gt;GString &lt;/span&gt;*tempStr = g_string_new( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;       &lt;br /&gt;    g_string_printf( tempStr, &lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt;d&amp;quot;&lt;/span&gt;, x ) ;&lt;br /&gt;    g_string_append( pos, tempStr-&amp;gt;str ) ;&lt;br /&gt;    g_string_append( pos, &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;, &amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;    g_string_printf( tempStr, &lt;span class="quot"&gt;&amp;quot;%&lt;b&gt;&lt;/b&gt;d&amp;quot;&lt;/span&gt;, y ) ;&lt;br /&gt;    g_string_append( pos, tempStr-&amp;gt;str ) ;&lt;br /&gt;    g_string_append( pos, &lt;span class="quot"&gt;&amp;quot; &lt;b&gt;&lt;/b&gt;)&amp;quot;&lt;/span&gt; ) ;&lt;br /&gt;     &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;pos ;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setImage( &lt;span class="reservedWord"&gt;int &lt;/span&gt;type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;設置圖片  &lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;/*&lt;br /&gt;    workman , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;倉庫工人&lt;br /&gt;&lt;/span&gt;    box ,     &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;要搬的箱子&lt;br /&gt;&lt;/span&gt;    boxOpen , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;箱子放在目標上後的狀態&lt;br /&gt;&lt;/span&gt;    target ,  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;箱子要移往的目標&lt;br /&gt;&lt;/span&gt;    road , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;可行走的地板&lt;br /&gt;&lt;/span&gt;    background , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;牆壁以外的地面&lt;br /&gt;&lt;/span&gt;    wall , &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;牆壁&lt;br /&gt;&lt;/span&gt;    none ,  &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;沒有東西 &lt;br /&gt;&lt;/span&gt;    other   &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;正常不應該有這種東西才對......debug用&lt;br /&gt;&lt;/span&gt;*/&lt;/span&gt;&lt;br /&gt;{ &lt;br /&gt;    &lt;span class="reservedWord"&gt;switch&lt;/span&gt; ( type ) {  &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;workman : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), workmanImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;box : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), boxImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;boxOpen : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), boxOpenImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;target : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), targetImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;road : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), roadImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;background : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), backgroundImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;wall : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), wallImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;none : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), noneImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;other : &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), otherImageFile ) ; &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;&lt;span class="reservedWord"&gt;default &lt;/span&gt;&lt;/span&gt;: &lt;br /&gt;            gtk_image_set_from_file( GTK_IMAGE( gImage[x][y] ), errorImageFile ) ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    gMapTypeTemp[x][y] = type ;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;typeIsRoadOrtTarget( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;( x, y )的類別為地面或目標地 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y] EQU road || &lt;br /&gt;         gMapType[x][y] EQU target ) &lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;TRUE ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;FALSE ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;canWalk( &lt;span class="reservedWord"&gt;int &lt;/span&gt;direction, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;可走到(x,y)嗎？&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;direction : 走路的方向&lt;br /&gt;&lt;/span&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;x, y : 目的地 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;ans = FALSE ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( typeIsRoadOrtTarget( x, y ) ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;目的地是地面或目標點 &lt;br /&gt;&lt;/span&gt;        ans = TRUE ;            &lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y] EQU box || &lt;br /&gt;              gMapType[x][y] EQU boxOpen ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;目的地是箱子或目標上的箱子  &lt;br /&gt;&lt;/span&gt;              &lt;br /&gt;        &lt;span class="reservedWord"&gt;if &lt;/span&gt;( direction EQU right &amp;amp;&amp;amp; typeIsRoadOrtTarget( x, y+1 ) )&lt;br /&gt;            ans = TRUE ;&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( direction EQU left &amp;amp;&amp;amp; typeIsRoadOrtTarget( x, y-1 ) )&lt;br /&gt;            ans = TRUE ; &lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( direction EQU up &amp;amp;&amp;amp; typeIsRoadOrtTarget( x-1, y ) )&lt;br /&gt;            ans = TRUE ;&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( direction EQU down &amp;amp;&amp;amp; typeIsRoadOrtTarget( x+1, y ) )&lt;br /&gt;            ans = TRUE ;&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;            ans = FALSE ;         &lt;br /&gt;    }&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        ans = FALSE ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;ans ;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;setPositionType( Mt type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;重新設定( x, y )的類別 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    gMapType[x][y] = type ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Mt getPositionType( &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得( x, y )的類別 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;gMapType[x][y] ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;moveBox( Mt type, &lt;span class="reservedWord"&gt;int &lt;/span&gt;direction, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將位於(x,y)的box以direction的方向移動&lt;br /&gt;&lt;/span&gt;{  &lt;br /&gt;    gCountOfPushBox ++ ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;推動箱子的次數加一 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( type EQU box ) &lt;br /&gt;        setPositionType( road, x, y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;確定要移動，所以先行把目前位置設為地表 &lt;br /&gt;&lt;/span&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( type EQU boxOpen )&lt;br /&gt;        setPositionType( target, x, y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;因為boxOpen就是target上面壓了box，box移動就現出原型了 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;switch&lt;/span&gt; ( direction ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;right :&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y+1] EQU target ) {&lt;br /&gt;                setImage( boxOpen, x, y+1 ) ;&lt;br /&gt;                setPositionType( boxOpen, x, y+1 ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;                setImage( box, x, y+1 ) ;&lt;br /&gt;                setPositionType( box, x, y+1 ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;left :&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y-1] EQU target ) {&lt;br /&gt;                setImage( boxOpen, x, y-1 ) ;&lt;br /&gt;                setPositionType( boxOpen, x, y-1 ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;else&lt;/span&gt; {   &lt;br /&gt;                setImage( box, x, y-1 ) ;&lt;br /&gt;                setPositionType( box, x, y-1 ) ;&lt;br /&gt;            } &lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;up :&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x-1][y] EQU target ) {&lt;br /&gt;                setImage( boxOpen, x-1, y ) ;&lt;br /&gt;                setPositionType( boxOpen, x-1, y ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;                setImage( box, x-1, y ) ;&lt;br /&gt;                setPositionType( box, x-1, y ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;down :&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x+1][y] EQU target ) {&lt;br /&gt;                setImage( boxOpen, x+1, y ) ;&lt;br /&gt;                setPositionType( boxOpen, x+1, y ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;                setImage( box, x+1, y ) ;&lt;br /&gt;                setPositionType( box, x+1, y ) ;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;        &lt;span class="reservedWord"&gt;&lt;span class="reservedWord"&gt;default &lt;/span&gt;&lt;/span&gt;:&lt;br /&gt;            setImage( other, x, y ) ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;    }       &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;walk( GdkEventKey *event )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;向前走，但走之前要先檢查是否可走 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    Dt direction ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;x = 0, y = 0 ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;switch&lt;/span&gt; ( event-&amp;gt;keyval ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;工人走向哪邊 &lt;br /&gt;&lt;/span&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;GDK_Up : &lt;br /&gt;            direction = up ;&lt;br /&gt;            x = gWorkmanX - 1 ;&lt;br /&gt;            y = gWorkmanY ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;GDK_Down : &lt;br /&gt;            direction = down ;&lt;br /&gt;            x = gWorkmanX + 1 ;&lt;br /&gt;            y = gWorkmanY ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;GDK_Right : &lt;br /&gt;            direction = right ;&lt;br /&gt;            x = gWorkmanX ;&lt;br /&gt;            y = gWorkmanY + 1 ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;case &lt;/span&gt;GDK_Left : &lt;br /&gt;            direction = left ;&lt;br /&gt;            x = gWorkmanX ;&lt;br /&gt;            y = gWorkmanY - 1 ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;; &lt;br /&gt;        &lt;span class="reservedWord"&gt;&lt;span class="reservedWord"&gt;default &lt;/span&gt;&lt;/span&gt;: &lt;br /&gt;            x = gWorkmanX ;&lt;br /&gt;            y = gWorkmanY ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;break &lt;/span&gt;;&lt;br /&gt;    }     &lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( canWalk( direction, x, y ) ) { &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;若可走到(x,y)&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;        setImage( gMapType[gWorkmanX][gWorkmanY], gWorkmanX, gWorkmanY ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;還原設定  &lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y] EQU box )  &lt;br /&gt;            moveBox( box, direction, x, y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;移動後，box -&amp;gt; road &lt;br /&gt;&lt;/span&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( gMapType[x][y] EQU boxOpen ) &lt;br /&gt;            moveBox( boxOpen, direction, x, y ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;移動後，box -&amp;gt; target &lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        setImage( workman, x, y ) ;&lt;br /&gt;        gWorkmanX = x ;&lt;br /&gt;        gWorkmanY = y ;   &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;boolean &lt;/span&gt;&lt;/span&gt;key_callback( &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*widget, GdkEventKey *event, &lt;span class="reservedWord"&gt;gpointer &lt;/span&gt;data )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;敲下鍵盤會及時反應的callback function&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*label = (&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*)data;&lt;br /&gt;    &lt;span class="reservedWord"&gt;GString &lt;/span&gt;*pos, *strOfCountOfPushBox, *tempStr ;&lt;br /&gt;    &lt;br /&gt;    guint keyvalue = event-&amp;gt;keyval;&lt;br /&gt;    &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;temp[100];&lt;br /&gt;    strcpy( temp, utf8( &lt;span class="quot"&gt;&amp;quot;推&lt;b&gt;&lt;/b&gt;箱次數：&amp;quot;&lt;/span&gt; ) );&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if&lt;/span&gt; ( !strcmp( gdk_keyval_name( event-&amp;gt;keyval ), &lt;span class="quot"&gt;&amp;quot;s&lt;b&gt;&lt;/b&gt;pace&amp;quot;&lt;/span&gt; ) ) {&lt;br /&gt;        strcat( temp, utf8( &lt;span class="quot"&gt;&amp;quot;&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;        restoreMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;還原地圖狀態 &lt;br /&gt;&lt;/span&gt;    } &lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; {&lt;br /&gt;        recordMap() ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;走之前先紀錄目前地圖狀態&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        walk( event ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;走路主要函式 &lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;    strOfCountOfPushBox = numToStr( gCountOfPushBox ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得目前『推箱總數』的字串 &lt;br /&gt;&lt;/span&gt;    strcat( temp, strOfCountOfPushBox-&amp;gt;str ) ;&lt;br /&gt;    strcat( temp, utf8( &lt;span class="quot"&gt;&amp;quot;　&lt;b&gt;&lt;/b&gt;移動次數：&amp;quot;&lt;/span&gt; ) ) ;&lt;br /&gt;    &lt;br /&gt;    tempStr = numToStr( gUndoNow ) ;&lt;br /&gt;    strcat( temp, tempStr-&amp;gt;str ) ;&lt;br /&gt;      &lt;br /&gt;    pos = positionToGString( gWorkmanX, gWorkmanY ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得座標字串 &lt;br /&gt;&lt;/span&gt;    &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;strcat( temp, pos-&amp;gt;str ); // 顯示目前倉庫工人的座標位置 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    gtk_label_set_text ( GTK_LABEL( label ), temp );&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( finishGame() )&lt;br /&gt;        gtk_entry_set_text( GTK_ENTRY( widget ), utf8( &lt;span class="quot"&gt;&amp;quot;你&lt;b&gt;&lt;/b&gt;贏了！恭喜！！&amp;quot;&lt;/span&gt; ) );&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        gtk_entry_set_text( GTK_ENTRY( widget ), utf8( &lt;span class="quot"&gt;&amp;quot;按&lt;b&gt;&lt;/b&gt;space鍵退回前一步&amp;quot;&lt;/span&gt; ) );&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;FALSE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*setImageInTable( &lt;span class="reservedWord"&gt;const&lt;/span&gt; &lt;span class="reservedWord"&gt;g&lt;span class="reservedWord"&gt;char &lt;/span&gt;&lt;/span&gt;*filename, &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*table, &lt;span class="reservedWord"&gt;int &lt;/span&gt;x, &lt;span class="reservedWord"&gt;int &lt;/span&gt;y ) &lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將選取的圖片顯示在畫面（box）上 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;GtkWidget &lt;/span&gt;*image; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;宣告成static，可保存圖片資料到下次使用 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    image = gtk_image_new_from_file( filename );&lt;br /&gt;    &lt;br /&gt;    gtk_table_attach_defaults( &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將label放入table &lt;br /&gt;&lt;/span&gt;                GTK_TABLE(table), image, x, x + 1, y, y + 1);&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    gtk_widget_show(image);&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;return &lt;/span&gt;image ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;char &lt;/span&gt;*mapStr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;no )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;以no指定要回傳第幾張地圖字串&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map1 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＿＿＊＊＊＿＿＿\n\&lt;br /&gt;＿＿＊＠＊\n\&lt;br /&gt;＿＿＊　＊＊＊＊\n\&lt;br /&gt;＊＊＊＋　＋＠＊\n\&lt;br /&gt;＊＠　＋？＊＊＊\n\&lt;br /&gt;＊＊＊＊＋＊\n\&lt;br /&gt;＿＿＿＊＠＊\n\&lt;br /&gt;＿＿＿＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map2 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＊＊＊＊＊\n\&lt;br /&gt;＊？　　＊\n\&lt;br /&gt;＊　＋＋＊　＊＊＊\n\&lt;br /&gt;＊　＋　＊　＊＠＊\n\&lt;br /&gt;＊＊＊　＊＊＊＠＊\n\&lt;br /&gt;＿＊＊　　　　＠＊\n\&lt;br /&gt;＿＊　　　＊　　＊\n\&lt;br /&gt;＿＊　　　＊＊＊＊\n\&lt;br /&gt;＿＊＊＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map3 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＿＊＊＊＊＊＊＊\n\&lt;br /&gt;＿＊　　　　　＊＊＊\n\&lt;br /&gt;＊＊＋＊＊＊　　　＊\n\&lt;br /&gt;＊　？　＋　　＋　＊\n\&lt;br /&gt;＊　＠＠＊　＋　＊＊\n\&lt;br /&gt;＊＊＠＠＊　　　＊\n\&lt;br /&gt;　＊＊＊＊＊＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map4 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＿＊＊＊＊\n\&lt;br /&gt;＊＊　　＊\n\&lt;br /&gt;＊？＋　＊\n\&lt;br /&gt;＊＊＋　＊＊\n\&lt;br /&gt;＊＊　＋　＊\n\&lt;br /&gt;＊＠＋　　＊\n\&lt;br /&gt;＊＠＠＝＠＊\n\&lt;br /&gt;＊＊＊＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map5 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＿＊＊＊＊＊\n\&lt;br /&gt;＿＊？　＊＊＊\n\&lt;br /&gt;＿＊　＋　　＊\n\&lt;br /&gt;＊＊＊　＊　＊＊\n\&lt;br /&gt;＊＠＊　＊　　＊\n\&lt;br /&gt;＊＠＋　　＊　＊\n\&lt;br /&gt;＊＠　　　＋　＊\n\&lt;br /&gt;＊＊＊＊＊＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*map6 = &lt;span class="quot"&gt;&amp;quot;\&lt;b&gt;&lt;/b&gt;&lt;br /&gt;＿＿＿＊＊＊＊＊＊＊\n\&lt;br /&gt;＊＊＊＊　　　　　＊\n\&lt;br /&gt;＊　　　＠＊＊＊　＊\n\&lt;br /&gt;＊　＊　＊　　　　＊＊\n\&lt;br /&gt;＊　＊　＋　＋＊＠　＊\n\&lt;br /&gt;＊　＊　　＝　　＊　＊\n\&lt;br /&gt;＊　＠＊＋　＋　＊　＊\n\&lt;br /&gt;＊＊　　　　＊　＊　＊＊＊\n\&lt;br /&gt;＿＊　＊＊＊＠　　　　？＊\n\&lt;br /&gt;＿＊　　　　　＊＊　　　＊\n\&lt;br /&gt;＿＊＊＊＊＊＊＊＊＊＊＊＊\n&amp;quot;&lt;/span&gt; ;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 1 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map1 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 2 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map2 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 3 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map3 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 4 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map4  ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 5 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map5 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( no EQU 6 )&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map6 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;else&lt;/span&gt;&lt;br /&gt;        &lt;span class="reservedWord"&gt;return &lt;/span&gt;map1 ;&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt; &lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;readMapStr( &lt;span class="reservedWord"&gt;int &lt;/span&gt;no )&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;讀入地圖字串 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;c, frontC ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;x = 0, y = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0, j = 0 ;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;*ms = mapStr( no ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;取得地圖字串 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;while&lt;/span&gt; ( ms[i] ) {&lt;br /&gt;        c = ms[i] ;&lt;br /&gt;        &lt;br /&gt;        &lt;span class="reservedWord"&gt;if &lt;/span&gt;( c EQU 10 ) {&lt;br /&gt;            x ++ ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;換行 = X往下加1&lt;br /&gt;&lt;/span&gt;            y = 0 ; &lt;span class="note"&gt;//換&lt;b&gt;&lt;/b&gt;行 = y歸零&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;br /&gt;            frontC = c ;&lt;br /&gt;            c = ms[++i] ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( c ) {&lt;br /&gt;                &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU 72 ) {&lt;br /&gt;                    gMapType[x][y++] = workman ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU 64 ) {&lt;br /&gt;                    gMapType[x][y++] = road ; &lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -41 ) {&lt;br /&gt;                    gMapType[x][y++] = boxOpen ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -49 ) {&lt;br /&gt;                    gMapType[x][y++] = box ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -60 ) {&lt;br /&gt;                    gMapType[x][y++] = background ;&lt;br /&gt;                } &lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -81 ) {&lt;br /&gt;                    gMapType[x][y++] = wall ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -94 &amp;amp;&amp;amp; c EQU 73 ) { &lt;br /&gt;                    gMapType[x][y++] = target ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;br /&gt;                    gMapType[x][y++] = other ;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        i ++ ;&lt;br /&gt;    } &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;readMap()&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;讀入地圖檔 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;char &lt;/span&gt;c, frontC ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;x = 0, y = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0, j = 0 ;&lt;br /&gt;    FILE *fp;&lt;br /&gt;    &lt;br /&gt;    fp = fopen( mapFile, &lt;span class="quot"&gt;&amp;quot;r&lt;b&gt;&lt;/b&gt;&amp;quot;&lt;/span&gt; ); &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;讀入地圖檔 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;while&lt;/span&gt; ( fp &amp;amp;&amp;amp; ( c = fgetc( fp ) ) != EOF ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;if &lt;/span&gt;( c EQU 10 ) {&lt;br /&gt;            x ++ ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;換行 = X往下加1&lt;br /&gt;&lt;/span&gt;            y = 0 ; &lt;span class="note"&gt;//換&lt;b&gt;&lt;/b&gt;行 = y歸零&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;        &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;br /&gt;            frontC = c ;&lt;br /&gt;            c = fgetc( fp ) ;&lt;br /&gt;            &lt;span class="reservedWord"&gt;if &lt;/span&gt;( c != EOF ) {&lt;br /&gt;                &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU 72 ) {&lt;br /&gt;                    gMapType[x][y++] = workman ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU 64 ) {&lt;br /&gt;                    gMapType[x][y++] = road ; &lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -41 ) {&lt;br /&gt;                    gMapType[x][y++] = boxOpen ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -49 ) {&lt;br /&gt;                    gMapType[x][y++] = box ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -60 ) {&lt;br /&gt;                    gMapType[x][y++] = background ;&lt;br /&gt;                } &lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -95 &amp;amp;&amp;amp; c EQU -81 ) {&lt;br /&gt;                    gMapType[x][y++] = wall ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; &lt;span class="reservedWord"&gt;if &lt;/span&gt;( frontC EQU -94 &amp;amp;&amp;amp; c EQU 73 ) { &lt;br /&gt;                    gMapType[x][y++] = target ;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="reservedWord"&gt;else&lt;/span&gt; { &lt;br /&gt;                    gMapType[x][y++] = other ;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    } &lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;if &lt;/span&gt;( fp ) &lt;br /&gt;        fclose( fp ) ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;關閉地圖檔 &lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;drawMap()&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;依據讀入的地圖檔繪出遊戲地圖&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0, j = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;for &lt;/span&gt;( i = 0 ; i &amp;lt; HEIGHT ; i ++ )&lt;br /&gt;        &lt;span class="reservedWord"&gt;for &lt;/span&gt;( j = 0 ; j &amp;lt; WIDTH ; j ++ )&lt;br /&gt;            setImage( gMapType[i][j], i, j ) ;&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;gMapTypeTempInitialization()&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;將gMapType的資料全數複製到gMapTypeTemp &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0, j = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;for &lt;/span&gt;( i = 0 ; i &amp;lt; HEIGHT ; i ++ ) &lt;br /&gt;        &lt;span class="reservedWord"&gt;for &lt;/span&gt;( j = 0 ; j &amp;lt; WIDTH ; j ++ ) &lt;br /&gt;            gMapTypeTemp[i][j] = gMapType[i][j] ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;void &lt;/span&gt;recordMap()&lt;br /&gt;&lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;記錄目前地圖 &lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    gUndoNowInArrary = ( ++ gUndoNow ) % COUNT_OF_RECORD ; &lt;br /&gt;    &lt;br /&gt;    &lt;span class="reservedWord"&gt;int &lt;/span&gt;i = 0, j = 0 ;&lt;br /&gt;    &lt;span class="reservedWord"&gt;for &lt;/span&gt;( i = 0 ; i &amp;lt; HEIGHT ; i ++ ) {&lt;br /&gt;        &lt;span class="reservedWord"&gt;for &lt;/span&gt;( j = 0 ; j &amp;lt; WIDTH ; j ++ ) {&lt;br /&gt;            gUndoData[gUndoNowInArrary].mapType[i][j] = gMapTypeTemp[i][j] ;   &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    gUndoData[gUndoNowInArrary].workmanX = gWorkmanX ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;紀錄workman所在 &lt;br /&gt;&lt;/span&gt;    gUndoData[gUndoNowInArrary].workmanY = gWorkmanY ;&lt;br /&gt;    &lt;br /&gt;    gUndoData[gUndoNowInArrary].countOfPushBox = gCountOfPushBox ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;紀錄當下的推箱次數 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    gUndoMaxValue = gUndoNow ; &lt;span class="note"&gt;// &lt;b&gt;&lt;/b&gt;最高達到的數值，用於計算可回溯的終點 &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="reservedWord"&gt;g&lt;span class=
