Windows下,檔案(夾)選擇/開啟對話方塊的三種建立方式
Windows程式設計時,常用到開啟檔案(夾)對話方塊,選擇檔案或者多個檔案的功能。Windows提供了好幾種方式,現在做個總結,也好方便以後的使用。
常用的方式有三種:
1.1 使用OPENFILENAME這個結構體和GetOpenFileName()函式
這種方式在於能夠可以實現單選檔案或者多選檔案的功能。多選時,只需按照字串的拼接格式進行split即可。
開啟單檔案的程式碼:
char szFilePath[1024] = {0}; // 所選擇的檔案最終的路徑
OPENFILENAME ofn= {0};
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFilter = "txt檔案(*.txt)\0";//要選擇的檔案字尾
ofn.lpstrInitialDir = "./";//預設的檔案路徑
ofn.lpstrFile = szFilePath;//存放檔案的緩衝區
ofn.nMaxFile = sizeof(szFilePath)/sizeof(*szFilePath);
ofn.nFilterIndex = 0;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER ; //標誌如果是多選要加上OFN_ALLOWMULTISELECT
if (!GetOpenFileName(&ofn))
{
return ;
}
if (strcmp(szFilePath, "") == 0)
{
// 檢驗是否獲取成功
return ;
}
效果圖:
1.2 使用SHBrowseForFolder呼叫
此種功能,是產生檔案瀏覽的特效。可以選擇檔案或者資料夾。
選擇檔案程式碼示例:
char szFilePath[1024] = {0}; // 所選擇的檔案最終的路徑
BROWSEINFO bi;
ZeroMemory(&bi,sizeof (BROWSEINFO));
bi.hwndOwner = NULL;
bi.pszDisplayName = szFilePath;
bi.lpszTitle = ("從下面選擇檔案或資料夾:");
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if (NULL == idl)
{
return;
}
SHGetPathFromIDList(idl,szFilePath);
if (strcmp(szFilePath, "") == 0)
{
// 檢驗是否獲取成功
return ;
}
效果圖:
1.3 使用系統的CFileDialog
CFileDialog是系統提供的開啟和儲存檔案對話方塊類。可以彈出開啟檔案對話方塊,也可以彈出儲存檔案對話方塊。功能相比比較豐富。
在介紹如何使用之前,著重介紹其建構函式的定義。這是關鍵。
1.3.1 建構函式 CFileDialog()
CFileDialog::CFileDialog(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL );
引數意義如下:
- bOpenFileDialog 為TRUE則顯示開啟對話方塊,為FALSE則顯示儲存對話檔案對話方塊。
- lpszDefExt 指定預設的副檔名。
- lpszFileName 指定預設的檔名。
- dwFlags 指明一些特定風格。
- lpszFilter 是最重要的一個引數,它指明可供選擇的檔案型別和相應的副檔名。
引數格式如:
"Worksheet Files (*.xls)|*.xls;*.xlsx|text Files (*.txt)|*.txt|All Files (*.*)|*.*||";
檔案型別說明和副檔名間用 | 分隔,同種型別檔案的副檔名間可以用 ; 分割,每種檔案型別間用 | 分隔,末尾用 || 指明。
- pParentWnd 指明父視窗該函式未指明選擇檔案對話方塊的預設選擇路徑,一般情況是當前路徑。
1.3.2 選擇開啟檔案對話方塊的使用
一般情況下,通過建構函式構造一個CFileDialog類物件,通過doModel函式來彈出相應的對話方塊,使用者在對話方塊中選中檔案,點選確定,即可獲取到該檔案的路徑。儲存檔案對話方塊類似。
開啟檔案對話方塊示例程式碼:
char szFilePath[1024] = {'\0'};
CString filter("文字文件(*.txt)|*.txt|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);
if(dlg.DoModal()==IDOK)
{
strcpy(szFilePath, dlg.GetPathName().GetBuffer(0)) ;
}
else
{
return ;
}
if (strcmp(szFilePath, "") == 0)
{
return ;
}
效果圖:
相關推薦
Windows下,檔案(夾)選擇/開啟對話方塊的三種建立方式
Windows程式設計時,常用到開啟檔案(夾)對話方塊,選擇檔案或者多個檔案的功能。Windows提供了好幾種方式,現在做個總結,也好方便以後的使用。 常用的方式有三種: 1.1 使用OPENFILENAME這個結構體和GetOpenFileName()
Java檔案(夾)選擇器—JavaFX
在不久之前,我遇到一個問題,同學問我,記事本的開啟與儲存應該怎麼寫,當時我這樣想,應該可以根據File類獲得路徑的子檔案,用搜索演算法構造一個目錄樹,然後再做個圖形介面就行,沒什麼問題的話這樣做應該可以達到效果,但是今天我突然發現JavaFX裡面原本就有這個東西,不需要我們再重複造輪子了。
windows 7 區域網檔案(夾)共享方法
如何在同一區域網中的兩臺主機間傳遞檔案?需要藉助一個橋樑工具,即插即拔的 U 盤嗎?未必。 要求:位於區域網中的兩臺主機彼此能夠 ping 通。 設定流程: (1)將需要在主機間共享的檔案,設定為共享、 (2)其他主機訪問該共享檔案。 s
【朝花夕拾】Android自定義View篇之(四)自定義View的三種實現方式及自定義屬性詳解
前言 儘管Android系統提供了不少控制元件,但是有很多酷炫效果仍然是系統原生控制元件無法實現的。好在Android允許自定義控制元件,來彌補原生控制元件的不足。但是在很多初學者看來,自定義View似乎很難掌握。其中有很大一部分原因是我們平時看到的自定
在Windows下使用Linux命令ZIP 打包檔案(夾)
轉載自 https://blog.csdn.net/my_learning_road/article/details/69568215筆者最近需要用處理大量txt檔案,這些txt檔案都比較大,出於效率考慮想用Windows下面的批處理命令。但是發現用於處理文字檔案的sed命令
IntelliJ IDEA classpath包含哪些資料夾以及如何把檔案(夾)新增到classpath下
在IDEA中,標為藍色的資料夾被認定為包含在classpath中,例如上圖中的resources、src資料夾。把檔案位置以"classpath:applicationContext.xml"的形式提供時,IDEA會從classpath中查詢該檔案,把包含該檔案的資料夾標記為“Source Root”即可
VMware虛擬機器與本機Windows系統實現共享檔案(夾)
VMware虛擬機器與本機Windows系統共享檔案其實是通過VMware自帶的共享資料夾功能實現的 具體步驟有三步,如下: 1.安裝VMware Tools 滑鼠右鍵點選你的虛擬機器 > 點選安裝VMware Tools > 等待一會兒會彈出安裝視窗 > 下一步,
批處理解決實際問題1——將目錄下所有檔案(*.cpp)分別建立同名資料夾並移入其中
問題描述: 學習OpenGL時,從網上下載了一些原始碼,解壓後發現所有.cpp檔案在同一個目錄下,這樣直接一個一個全部編譯的話,就亂套了,雖然不影響結果但不利於管理。於是,我需要寫一個程式將所有*.cpp檔案放入到同名檔案加下。 解決方案: 毫無疑問,採用批處理技術。思路
git 在windows下的應用(二) - 遠程倉庫代碼管理
軟件研發 研發管理 克隆遠程git 目錄https://github.com/pcdogyu/git4windows.git克隆下來了生成1.txtscan stage signoff commit2次提交記錄推送到遠程地址完成了還沒來得及去網頁呢,就收到系統提示郵件網頁查看1.txt已經提交上去了對
git 在windows下的應用(一) - 本地倉庫代碼管理
軟件研發 研發管理 訪問https://gitforwindows.org/? 下載一個安裝包,一路next下去git config --global user.name "Pcdog" git config --global user.email "[email protected]"cd d:
linux 檢視和修改檔案(夾)許可權
1. 使用 ls -l 或者 ll 檢視檔案許可權 第一位表示檔案型別:d 表示資料夾 - 表示普通檔案 r (read)表示可讀 w (write)表示可寫 x 表示執行許可權:通常指可以執行的程式檔案或者指令碼檔案 rwx 三個
Windows下利用goaccess(docker)分析Nginx日誌
由於公司專案需要分析Nginx,工具不少,比如ngxtop的實時監控,經過對其初步瞭解,發現必須所有配置檔案都在nginx.conf下才可以使用。然而專案卻include了很多配置。而且由於資源限制,在伺服器上安裝也不現實,因此有了日誌分析的念頭。而
Windows下在Python(Anaconda)中安裝Dlib庫
Windows下在Python(Anaconda)中安裝Dlib庫 引言 介紹在Windows作業系統下,在Python的Anaconda整合環境中,安裝Dlib庫; 對於不瞭解原始碼編譯的,或者利用cmake方法失敗的,可以嘗試下此方法: Windows 10 + Python
windows 下facenet使用(一)
一、安裝方式:把自己下載的facenet的src內部全部檔案放到anaconda的site檔案內的facenet(自己新建)即可。 二、現在有兩個檔案有src檔案,一個是自己下載的,如下 一個是自己新建的facenet檔案,也就是最上面那個圖的 給上面那個site-packages檔案內的
在windows下安裝Composer(轉載)
在windows下安裝Composer Composer是 PHP 用來管理依賴(dependency)關係的工具。你可以在自己的專案中宣告所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫檔案。 中文相關網站:http://www.phpcomposer
Linux和Windows下的NC(Netcat)命令測試埠連通性
一、Linux OS 環境下(以Centos為例),使用nc命令分別測試TCP和UDP埠連通性: 安裝方法: 在客戶端和伺服器端分別安裝nc工具,安裝命令如下: yum install nc 1 1. Linux OS下使用nc命令,實現TCP方式監聽伺服器端5000
Windows下使用Redis(1)安裝和使用
一、redis是什麼 redis是一款根據bsd開源協議發行的高效能key-value儲存系統。他通常被稱為資料結構伺服器,因為值可以是字串,雜湊,列表,集合,有序集合和點陣圖等型別。 最好的地方就是提供資料持久化功能,定時把記憶體寫入檔案,從而不至於造成資料丟失,相對於
分享一個自寫的Python遠端命令和檔案(夾)傳輸類
最近在跟一個自動化釋出平臺的建設事項,其中 Linux 系統的遠端控制通道則由我獨立開發完成,其中涉及到了 Linux 系統遠端命令和檔案傳輸操作。 因為之前寫 Linux 系統密碼管理系統的時候,用的是 Paramiko 的 SSHClient。所以,我這次依然採用 Paramiko 來做實現,程式碼雖短
Ubuntu終端中刪除/建立檔案(夾)
首先Ctrl + Alt + L開啟終端 建立檔案: touch 檔名 刪除檔案: rm 檔名 建立資料夾: mkdir 資料夾名 刪除資料夾: rmdir 資料夾名 注意此時的資料夾中如果包含其他檔案的話是無法被刪除的。 刪除帶有檔案的資料夾: rm -r 資料
Windows下thinkphp5.0(tp5)的memcache資料快取技術的實現過程
1、php配置檔案的設定(php.ini) 新增一行:extension=php_memcache.dll 比如我使用的是phpstudy整合環境(開啟php.in