<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>程式設計 on kenji.blog</title><link>http://kenji.blog/zh-tw/tags/%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88/</link><description>Recent content in 程式設計 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Jul 2025 12:30:35 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/tags/%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 Win32API + C++ 開發程式的優缺點</title><link>http://kenji.blog/zh-tw/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</link><pubDate>Sat, 12 Jul 2025 12:30:35 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/img_1.png" alt="Featured image of post 使用 Win32API + C++ 開發程式的優缺點" />&lt;h1 id="win32api--c-開發的魅力與挑戰">Win32API + C++ 開發的魅力與挑戰
&lt;/h1>&lt;p>對於想要精通 Windows 應用程式開發的人來說， &lt;strong>Win32API + C++&lt;/strong> 仍然是一個強大的選擇。
這種允許與作業系統進行最密切互動的組合，兼具了速度與靈活性。&lt;/p>
&lt;p>另一方面，要掌握它需要決心，因為它與現代開發風格有很大的不同。&lt;/p>
&lt;p>在本頁中，我們將從 &lt;strong>現役 Windows 應用程式開發人員的視角&lt;/strong> 清晰地解釋其優點和缺點。&lt;/p>
&lt;hr>
&lt;h2 id="優點">優點
&lt;/h2>&lt;h3 id="超高速的原生執行">超高速的原生執行
&lt;/h3>&lt;p>由於 C++ 和 Win32API 在最接近作業系統的層級上運作，因此幾乎沒有不必要的開銷。
CPU 和記憶體的使用效率極高，擁有 &lt;strong>壓倒性的執行速度&lt;/strong> 。&lt;/p>
&lt;h3 id="高靈活性和自由度">高靈活性和自由度
&lt;/h3>&lt;p>您可以 &lt;strong>自行精細地控制&lt;/strong> 應用程式的所有行為，例如視窗控制、非同步處理、COM 整合和行程管理。
也可以建立專門的工具和自己的原創框架。&lt;/p>
&lt;h3 id="易於分發無需執行環境">易於分發，無需執行環境
&lt;/h3>&lt;p>由於不需要像 .NET 或 Java 這樣的外部執行環境，因此它 &lt;strong>可以作為單一的執行檔進行分發&lt;/strong> 。
在重新分發期間較少發生問題，且無需安裝程式即可輕鬆執行。&lt;/p>
&lt;h3 id="可以建立輕量級應用程式">可以建立輕量級應用程式
&lt;/h3>&lt;p>由於它只需要最少必要的配置，其特點是 &lt;strong>記憶體佔用非常小&lt;/strong> 。
即使在低規格 PC 或虛擬機器環境中也能舒適地運作。&lt;/p>
&lt;h3 id="能夠實現作業系統級別的進階控制">能夠實現作業系統級別的進階控制
&lt;/h3>&lt;p>您還可以實現 &lt;strong>使用一般語言和函式庫難以達成的控制&lt;/strong> ，例如全域滑鼠和鍵盤鉤子（Hook）、視窗樣式的微調以及系統選單操作。&lt;/p>
&lt;hr>
&lt;h2 id="缺點">缺點
&lt;/h2>&lt;h3 id="開發效率低">開發效率低
&lt;/h3>&lt;p>即使是 GUI 的建構也必須完全在程式碼中完成，有時 &lt;strong>僅僅為了建立一個按鈕就需要幾十行程式碼&lt;/strong> 。
修改設計也很繁瑣，且與使用 UI 框架的開發相比，生產力較低。&lt;/p>
&lt;h3 id="易於降低可維護性">易於降低可維護性
&lt;/h3>&lt;p>有許多 &lt;strong>具有特殊結構的程式碼&lt;/strong> ，例如訊息迴圈和視窗程序，這阻礙了可讀性和可重複使用性。
它還有不適合團隊開發和長期維護的方面。&lt;/p>
&lt;h3 id="難以支援現代-ui">難以支援現代 UI
&lt;/h3>&lt;p>很 &lt;strong>難支援近年來要求的 UX&lt;/strong> ，例如高 DPI 支援、觸控介面、無障礙功能和深色模式。
您必須手動處理每一項，這需要花費大量的精力。&lt;/p>
&lt;h3 id="不支援跨平台">不支援跨平台
&lt;/h3>&lt;p>由於它是一個完全 Windows 專用的 API，因此 &lt;strong>無法移植到 macOS 或 Linux&lt;/strong> 。
如果您計劃跨平台部署，則需要選擇其他技術。&lt;/p>
&lt;h3 id="學習成本極高">學習成本極高
&lt;/h3>&lt;p>您必須了解 &lt;strong>如今已很少使用的概念和機制&lt;/strong> ，例如 Handles (控制代碼)、GDI、COM 和 OLE。
許多文件都很舊，需要時間和耐心來學習。&lt;/p>
&lt;hr>
&lt;h2 id="適合的用途">適合的用途
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>輕量級工具&lt;/strong> ，如檔案啟動器和快捷鍵輔助工具&lt;/li>
&lt;li>&lt;strong>系統實用程式&lt;/strong> ，如剪貼簿操作和 IME 控制&lt;/li>
&lt;li>&lt;strong>基於原生控制的應用程式&lt;/strong> ，如全域鉤子和視窗擷取&lt;/li>
&lt;li>與硬體緊密連結的 &lt;strong>驅動程式支援工具&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="不適合的用途">不適合的用途
&lt;/h2>&lt;ul>
&lt;li>現代 UI / UX 重要的 &lt;strong>一般消費者應用程式&lt;/strong>&lt;/li>
&lt;li>考慮到速度而建立的 &lt;strong>原型設計和 MVP 開發&lt;/strong>&lt;/li>
&lt;li>基於長期運作和團隊開發的 &lt;strong>大型專案&lt;/strong>&lt;/li>
&lt;li>需要支援多個作業系統的 &lt;strong>跨平台產品&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="評估總結">評估總結
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>觀點&lt;/th>
&lt;th>評估&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>執行速度&lt;/td>
&lt;td>◎ 非常快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>記憶體效率&lt;/td>
&lt;td>◎ 優秀&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>開發速度&lt;/td>
&lt;td>× 慢&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>可維護性&lt;/td>
&lt;td>× 低&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>跨平台支援&lt;/td>
&lt;td>× 不支援&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>現代 UI 支援&lt;/td>
&lt;td>× 弱&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>作業系統控制自由度&lt;/td>
&lt;td>◎ 壓倒性地高&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="結論">結論
&lt;/h2>&lt;p>&lt;strong>Win32API + C++ 是為那些「想要親自處理作業系統中所有事情」的開發人員準備的工具。&lt;/strong>
雖然其力量巨大，但學習和操作需要相應的決心。&lt;/p>
&lt;blockquote>
&lt;p>是否值得「大膽選擇」取決於您目標應用程式的性質。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>潛入 &lt;code>#include &amp;lt;windows.h&amp;gt;&lt;/code> 的世界而不依賴 GUI 框架或現代語言 ――
這個選擇在今天仍然有意義。&lt;/p></description></item><item><title>適合寫程式的字體集合</title><link>http://kenji.blog/zh-tw/p/%E9%81%A9%E5%90%88%E5%AF%AB%E7%A8%8B%E5%BC%8F%E7%9A%84%E5%AD%97%E9%AB%94%E9%9B%86%E5%90%88/</link><pubDate>Sat, 30 Mar 2024 02:21:31 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E9%81%A9%E5%90%88%E5%AF%AB%E7%A8%8B%E5%BC%8F%E7%9A%84%E5%AD%97%E9%AB%94%E9%9B%86%E5%90%88/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/img.png" alt="Featured image of post 適合寫程式的字體集合" />&lt;h2 id="jetbrains-mono">JetBrains Mono
&lt;/h2>&lt;p>這是由 JetBrains 提供的開源程式設計字體。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://www.jetbrains.com/ja-jp/lp/mono/" target="_blank" rel="noopener"
>https://www.jetbrains.com/ja-jp/lp/mono/&lt;/a>&lt;/p>
&lt;h2 id="hackgen">HackGen
&lt;/h2>&lt;p>白源 (HackGen) 是一款程式設計字體，將適合程式設計的英文字體 Hack 與思源黑體的衍生字體源柔黑體合成而來。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://github.com/yuru7/HackGen/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/HackGen/releases&lt;/a>&lt;/p>
&lt;h2 id="ricty-diminished">Ricty Diminished
&lt;/h2>&lt;p>&lt;code>Ricty Diminished&lt;/code> 是 &lt;code>Ricty&lt;/code> 的姊妹字體，它不是使用 &lt;code>Inconsolata&lt;/code> 和 &lt;code>Migu 1M&lt;/code>，而是使用 &lt;code>Inconsolata&lt;/code> 和 &lt;code>Circle M+ 1m&lt;/code> 透過 &lt;code>Ricty&lt;/code> 生成腳本合成的字體。由於不包含 IPA 黑體的字形，可用的漢字字形數量較少，但相對地可以在 &lt;code>SIL Open Font License&lt;/code> 下進行分發。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://rictyfonts.github.io/diminished" target="_blank" rel="noopener"
>https://rictyfonts.github.io/diminished&lt;/a>&lt;/p>
&lt;h2 id="cica">Cica
&lt;/h2>&lt;p>英數字和符號使用 &lt;code>Hack&lt;/code> + &lt;code>DejaVu Sans Mono&lt;/code>。
其他字元則使用 &lt;code>Rounded Mgen+&lt;/code> 的程式設計字體。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://github.com/miiton/Cica/releases" target="_blank" rel="noopener"
>https://github.com/miiton/Cica/releases&lt;/a>&lt;/p>
&lt;p>參考：&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://sourcefoundry.org/hack/" target="_blank" rel="noopener"
>Hack&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://dejavu-fonts.github.io/" target="_blank" rel="noopener"
>DejaVu Sans Mono&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="http://jikasei.me/font/rounded-mgenplus/" target="_blank" rel="noopener"
>Rounded Mgen+&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="migu">Migu
&lt;/h2>&lt;p>這是 M+ 和 IPA 的合成字體。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://itouhiro.github.io/mixfont-mplus-ipa/migu/" target="_blank" rel="noopener"
>https://itouhiro.github.io/mixfont-mplus-ipa/migu/&lt;/a>&lt;/p>
&lt;h2 id="osaka">Osaka
&lt;/h2>&lt;p>這是一款讓 Mac OS 標準字體 &lt;code>Osaka&lt;/code> 可以在 Windows 上使用的字體。&lt;/p>
&lt;p>下載： &lt;a class="link" href="http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/" target="_blank" rel="noopener"
>http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/&lt;/a>&lt;/p>
&lt;h2 id="plemoljp">PlemolJP
&lt;/h2>&lt;p>這是一套結合了 IBM 釋出的開源日文字體 &lt;code>IBM Plex Sans JP&lt;/code> 與同樣來自 IBM Plex 系列的 &lt;code>IBM Plex Mono&lt;/code> 的程式設計字體。&lt;/p>
&lt;p>下載： &lt;a class="link" href="https://github.com/yuru7/PlemolJP/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/PlemolJP/releases&lt;/a>&lt;/p></description></item><item><title>[按語言] 線上程式碼執行環境總結</title><link>http://kenji.blog/zh-tw/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 09 Apr 2023 14:01:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/img.png" alt="Featured image of post [按語言] 線上程式碼執行環境總結" />&lt;h2 id="python">Python
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://colab.research.google.com/#create=true" target="_blank" rel="noopener"
>Google Colaboratory&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Google Colaboratory 是一個可線上執行的 Python 執行環境。&lt;/p>
&lt;ul>
&lt;li>也支援使用 GPU。&lt;/li>
&lt;li>使用 Colab 筆記本，可以在單一文件中撰寫可執行的程式碼與富文本（包括圖片、HTML、LaTeX 等）。&lt;/li>
&lt;/ul>
&lt;p>以 Jupyter Notebook 為基礎。&lt;/p>
&lt;h2 id="rust">Rust
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021" target="_blank" rel="noopener"
>Rust Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="javascript">JavaScript
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://playcode.io/" target="_blank" rel="noopener"
>Javascript Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="java">Java
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/ja/projects/new?language=java" target="_blank" rel="noopener"
>paiza.IO Online Java compiler&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="haskell">Haskell
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.haskell.org/" target="_blank" rel="noopener"
>Haskell Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="swift">Swift
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://online.swiftplayground.run/" target="_blank" rel="noopener"
>Online Swift Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="c">C++
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.onlinegdb.com/online_c&amp;#43;&amp;#43;_compiler" target="_blank" rel="noopener"
>C++ 14&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="其他">其他
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://aws.amazon.com/jp/cloud9/" target="_blank" rel="noopener"
>AWS Cloud9&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>由 Amazon AWS 提供的線上整合開發環境。預先封裝了超過 40 種程式語言的工具，如 Node.js、JavaScript、Python、PHP、Ruby、Go、C++ 等。&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://vscode.dev/" target="_blank" rel="noopener"
>Visual Studio Code for the Web&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>由微軟提供的線上開發環境。但是，需要編譯的語言無法進行執行和偵錯。&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/projects/CGAcQLfW-IOXYy8Dq2OHBw?locale=ja-jp" target="_blank" rel="noopener"
>paiza.IO&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>支援 C、C++、Java、Ruby、Python、PHP、Perl 等 24 種主要語言的線上執行環境。&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codepen.io/" target="_blank" rel="noopener"
>CodePen&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>HTML、CSS、JavaScript 的線上執行環境。&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codeanywhere.com/" target="_blank" rel="noopener"
>codeanywhere&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>線上 IDE。可以分享程式碼和聊天。&lt;/p></description></item></channel></rss>