C語言:gcc 如何調用 Win32 打開文件對話框 ?

在 Windows 平臺上使用?gcc?調用原生 Win32 API 實現文件打開對話框是可行的,但需要直接使用 Win32 的?GetOpenFileName?函數(位于?commdlg.h?頭文件,依賴?comdlg32.lib?庫)。以下是完整實現步驟和代碼示例:
編寫?filedialog.c? 如下

#include <windows.h>
#include <commdlg.h>// 定義文件選擇對話框的過濾器(示例:文本文件和所有文件)
const char filter[] = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";// 打開文件對話框函數
char* OpenFileDialog(HWND hwnd) {OPENFILENAMEA ofn;char szFile[260] = {0};ZeroMemory(&ofn, sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.hwndOwner = hwnd;ofn.lpstrFile = szFile;ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = filter;ofn.nFilterIndex = 1;ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;if (GetOpenFileNameA(&ofn)) {return strdup(ofn.lpstrFile); // 返回選擇的文件路徑}return NULL;
}// 主函數(示例)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {char* filePath = OpenFileDialog(NULL);if (filePath) {MessageBoxA(NULL, filePath, "Selected File", MB_OK);free(filePath);}return 0;
}

2.?編譯命令

由于 gcc 在 Windows 上默認不包含完整的 Win32 SDK 路徑,需手動指定頭文件和庫路徑。
編寫 win_gcc.bat? 如下

SET INCLUDE=D:\Strawberry\c\include;D:\Strawberry\c\x86_64-w64-mingw32\include
SET LIB=D:\Strawberry\c\x86_64-w64-mingw32\lib
gcc -o filedialog.exe filedialog.c -lcomdlg32 -lgdi32 -luser32

關鍵參數

  • -I<路徑>:指定 Windows API 頭文件路徑(如 MinGW 的?include?目錄)。

  • -L<路徑>:指定庫文件路徑(如 MinGW 的?lib?目錄)。

  • -lcomdlg32:鏈接通用對話框庫(GetOpenFileName?依賴)。

  • -lgdi32?和?-luser32:基礎 GUI 庫(窗口和消息處理)。

3.?運行依賴

  • 編譯后的?filedialog.exe?需要以下動態鏈接庫(DLL):

    • comdlg32.dll(通用對話框庫,通常位于系統目錄)。

    • gdi32.dll?和?user32.dll(基礎 GUI 庫)。

4.?注意事項

  1. UNICODE 支持

    • 若需支持 Unicode,改用?GetOpenFileNameW?并調整字符類型為?wchar_t,但 TCC 對寬字符支持有限,建議使用 ANSI 版本(GetOpenFileNameA)。

  2. 內存管理

    • 使用?strdup?復制返回的字符串后,需手動調用?free?釋放內存。

  3. 路徑分隔符

    • Windows 路徑使用反斜杠?\,但代碼中需用?\\?轉義。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81344.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機視覺與深度學習 | Python實現EMD-SSA-VMD-LSTM時間序列預測(完整源碼和數據)

EMD-SSA-VMD-LSTM混合模型 一、環境配置與依賴二、數據生成&#xff08;示例數據&#xff09;三、多級信號分解1. 經驗模態分解&#xff08;EMD&#xff09;2. 奇異譜分析&#xff08;SSA&#xff09;3. 變分模態分解&#xff08;VMD&#xff09; 四、數據預處理1. 歸一化處理2…

vue配置子路由,實現點擊左側菜單,內容區域顯示不同的內容

文章目錄 一、路由鏈路二、實現步驟準備二級路由下的.vue文件配置子路由聲明router-view標簽為菜單項 el-menu-item 設置index屬性&#xff0c;設置點擊后的路由路徑 三、參考資料 一、路由鏈路 二、實現步驟 準備二級路由下的.vue文件 配置子路由 router/index.js import {…

ModuleNotFoundError: No module named ‘SDToolbox‘

(py311) C:>python Python 3.11.11 | packaged by Anaconda, Inc. | (main, Dec 11 2024, 16:34:19) [MSC v.1929 64 bit (AMD64)] on win32 Type “help”, “copyright”, “credits” or “license” for more information. from SDToolbox import PostShock_eq Tracebac…

Hi3516DV500刷寫固件

hi3516DV500刷固件 1、硬件連接 2、軟件準備 3、刷固件步驟 一、硬件連接 特別注意的是&#xff0c;串口的接線順序 通過網線連接好筆記本和開發板后&#xff0c;需要確認一下網口水晶頭是否閃爍&#xff0c;以確認網絡物理是否連通 二、軟件資源準備 固件包準備 打開工具…

正則表達式r前綴使用指南

正則表達式中的 r&#xff1a;解鎖字符串轉義的魔法 正則表達式是處理字符串的強大工具&#xff0c;但它常常伴隨著轉義字符的復雜性。如果你曾因 \n、\t 或 \\ 的使用而困惑&#xff0c;那么這篇文章將為你揭開謎底&#xff0c;解釋為什么 r 是正則表達式中的「神奇武器」。本…

網絡攻防模擬:城市安全 “數字預演”

在當今數字化快速發展的時代&#xff0c;網絡安全和城市安全面臨著前所未有的挑戰。為有效應對這些挑戰&#xff0c;利用先進的技術搭建模擬演練平臺至關重要。圖撲軟件的 HT for Web 技術&#xff0c;為網絡攻防模擬與城市安全演練提供了全面且高效的解決方案。 三維場景搭建&…

AI模型開發全流程筆記

一、訓練數據準備階段 數據采集標準 格式要求&#xff1a;嚴格QA對形式&#xff08;1問1答&#xff09; 數量基準&#xff1a; 基礎量&#xff1a;500組QA對 優化量&#xff1a;800-1000組QA對 內容規范&#xff1a; 聚焦單一業務節點&#xff08;如售后場景&#xff09; …

1688 數據接口調用秘籍:高效獲取商品實時信息的開發指南

在電商行業競爭白熱化的當下&#xff0c;企業想要搶占市場先機&#xff0c;實時掌握商品信息至關重要。作為國內 B2B 電商巨頭&#xff0c;1688 平臺匯聚海量商品資源&#xff0c;通過高效調用其數據接口獲取商品實時信息&#xff0c;能為企業價格策略制定、庫存管理、競品分析…

milvus學習筆記

本文主要由AI生成&#xff0c;請注意自己查看源代碼校驗。 Milvus v2.4 系統架構概覽 Milvus 采用分布式微服務架構&#xff0c;將計算層&#xff08;Proxy、QueryCoord、QueryNode、IndexCoord、DataCoord、DataNode 等&#xff09;與存儲層&#xff08;Pulsar、MinIO/S3、e…

使用教程:8x16模擬開關陣列可級聯XY腳雙向導通自動化接線

以下通過點亮LED進行基本使用流程演示&#xff0c;實際可以連接復雜外設&#xff08;SPI、CAN、ADC等&#xff09; 單模塊使用 RX、TX、5V和GND接到串口模塊&#xff1b;X5接5V&#xff1b;Y2接LED;LED-接GND 串口模塊插上電腦后&#xff0c;LED沒有亮&#xff1b;因為此時模…

HarmonyOS NEXT~鴻蒙應用上架指南:HarmonyOS應用發布全流程解析

HarmonyOS NEXT&#xff5e;鴻蒙應用上架指南&#xff1a;HarmonyOS應用發布全流程解析 引言 隨著華為鴻蒙操作系統(HarmonyOS)生態的快速發展&#xff0c;越來越多的開發者希望將自己的應用上架到鴻蒙應用市場。本文將詳細介紹鴻蒙應用上架的全流程&#xff0c;幫助開發者順…

20250517 我設想一個空間,無限大,空間不與其中物質進行任何作用,甚至這個空間能容納可以伸縮的空間

1.我設想一個空間&#xff0c;無限大&#xff0c;空間不與其中物質進行任何作用&#xff0c;甚至這個空間能容納可以伸縮的空間 您設想的這個空間具有一些有趣的特點&#xff1a; 無限大&#xff1a;空間本身沒有邊界或限制&#xff0c;理論上可以容納無限多的物質或結構。非…

使用 Kaniko來構建鏡像

使用 Kaniko來構建鏡像 Kaniko 是一種專注于容器鏡像構建的開源工具&#xff0c;其核心設計理念與 Docker 存在顯著差異。以下從功能定位、技術實現和適用場景三方面進行對比分析&#xff1a; 一、Kaniko 的核心特性 無需 Docker 守護進程 Kaniko 直接在容器或 Kubernetes 集…

webman用nginx代理靜態json文件的異步跨域

場景 有.json文件置于webman的public目錄下&#xff0c;使用了nginx做代理&#xff0c;直接訪問文件是可以正常加載的&#xff0c;但跨域瀏覽器就無法加載文件。 nginx配置 文件是否存在于跟目錄&#xff0c;存在則設置請求頭&#xff0c;不存在則將請求交給webman處理即可。…

JDK 21新特性全面解析

Java Development Kit (JDK) 21作為Oracle長期支持(LTS)版本&#xff0c;于2023年9月正式發布&#xff0c;帶來了多項令人振奮的新特性和改進。本文將全面介紹JDK 21中的主要更新&#xff0c;幫助開發者了解如何利用這些新功能提升開發效率和代碼質量。 一、虛擬線程(Virtual …

如何選擇高性價比的 1T 服務器租用服務?

選擇高性價比的 1T 服務器租用服務?&#xff0c;可參考以下內容&#xff1a; 1、根據需求選配置? 明確自身業務需求是關鍵。若為小型網站或輕量級應用&#xff0c;數據存儲與處理需求不高&#xff0c;選擇基礎配置服務器即可。如個人博客網站&#xff0c;普通的 Intel Xeon …

JavaScript性能優化實戰(11):前沿技術在性能優化中的應用

引言 隨著Web應用復雜度和性能需求不斷提高,傳統的JavaScript優化技術已經無法滿足某些高性能計算場景的需求。本文將深入探討前沿Web技術如何突破JavaScript的性能瓶頸,為Web應用提供接近原生應用的性能體驗。從底層計算到圖形渲染,從并發處理到動畫優化,我們將通過實際案…

package.json 和 package-lock.json 的區別

package.json?? ??作用?? ??聲明項目元數據??&#xff1a;如項目名稱、版本、描述、入口文件等。??定義依賴范圍??&#xff1a;在 dependencies 和 devDependencies 中聲明項目??直接依賴??的包及其??版本范圍??&#xff08;如 ^1.2.3&#xff09;。??…

Rollup入門與進階:為現代Web應用構建超小的打包文件

我們常常面臨Webpack復雜配置或是Babel轉譯后的冗余代碼&#xff0c;結果導致最終的包體積居高不下加載速度也變得異常緩慢&#xff0c;而在眾多打包工具中Rollup作為一個輕量且高效的選擇&#xff0c;正悄然改變著這一切&#xff0c;本文將帶你深入了解這個令人驚艷的打包工具…

基于C#的MQTT通信實戰:從EMQX搭建到發布訂閱全解析

MQTT(Message Queueing Telemetry Transport) 消息隊列遙測傳輸&#xff0c;在物聯網領域應用的很廣泛&#xff0c;它是基于Publish/Subscribe模式&#xff0c;具有簡單易用&#xff0c;支持QoS&#xff0c;傳輸效率高的特點。 它被設計用于低帶寬&#xff0c;不穩定或高延遲的…