[MFC]目錄選擇與檔案選擇
1. 彈出目錄或檔案選擇對話方塊
2. 當選中目錄時將該目錄下所有.c檔案的絕對路徑獲取出來
3. 當選中檔案時,判斷是否是.c檔案,如果是.c檔案將該.c檔案絕對路徑獲取出來
4. 支援多選目錄
5. 支援多選檔案
6. 支援檔案與目錄混選模式,且支援多選
下面我面先看一下一般目錄選擇和檔案選擇是怎麼實現的吧:
#include <wtypes.h> #include <atlbase.h> #include <shlobj.h> #include <iostream> using namespace std; //顯示資料夾瀏覽對話方塊 //用shell提供的SHBrowseForFolder,需要一個指向BROWSEINFO結構的指標 /* BROWSEINFO結構: HWND hwndOwner,指定對話方塊的父視窗的控制代碼 LPCITEMIDLIST pidlRoot,指定開啟瀏覽的根目錄,若為NULL,表示桌面 LPSTR pszDisplayName,指定一個緩衝區,接收使用者選擇的目錄的顯示名稱 LPCSTR lpszTitle,樹形檢視上方顯示的文字 UINT ulFlags,指定屬性 BFFCALLBACK Lpfn,指定回撥函式,發生某些事件時,指定的函式被呼叫,允許程式進一步定製對話方塊的行為 LPARAM lParam,若指定回撥函式,引數值傳遞給回撥函式 int iImage,代表使用者選擇的資料夾物件的圖示在系統圖標列表中的索引 */ int main() { BROWSEINFO bi; ::ZeroMemory(&bi,sizeof(bi)); //將bi結構清零 char szSelPath[MAX_PATH]; //被選擇資料夾物件名稱的緩衝區 bi.pszDisplayName=szSelPath; LPITEMIDLIST pNetHoodIDL; ::SHGetSpecialFolderLocation(NULL,CSIDL_HISTORY,&pNetHoodIDL); //根資料夾為歷史資料夾 bi.pidlRoot=pNetHoodIDL; bi.lpszTitle="zengwenwu "; //提示字串 bi.ulFlags=BIF_BROWSEINCLUDEFILES| //允許選擇檔案物件 BIF_EDITBOX| //顯示編輯框 BIF_STATUSTEXT| //顯示狀態文字 BIF_VALIDATE; //校驗編輯框中的輸入 LPITEMIDLIST pidlSel=::SHBrowseForFolder(&bi); //開啟資料夾瀏覽對話方塊 if(pidlSel!=NULL) { cout<<"Selected:"<<szSelPath<<endl; CComPtr<IMalloc> pMalloc; ::SHGetMalloc(&pMalloc); pMalloc->Free(pidlSel); //釋放資源 } return 0; }
//選擇目錄按鈕 void CDcPackerDlg::OnBnClickedDecgen() { char szPath[MAX_PATH]; //存放選擇的目錄路徑 CString str; ZeroMemory(szPath, sizeof(szPath)); BROWSEINFO bi; bi.hwndOwner = m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = szPath; bi.lpszTitle = "請選擇需要打包的目錄:"; bi.ulFlags = 0; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; //彈出選擇目錄對話方塊 LPITEMIDLIST lp = SHBrowseForFolder(&bi); if(lp && SHGetPathFromIDList(lp, szPath)) { str.Format("選擇的目錄為 %s", szPath); AfxMessageBox(str); } else AfxMessageBox("無效的目錄,請重新選擇"); } //選擇檔案對話方塊 CString CDcPackerDlg::BootOpenDialog() //返回選擇的檔名稱 { CString strFile = _T(""); CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL); if (dlgFile.DoModal()) { strFile = dlgFile.GetPathName(); } return strFile; } //載入檔案按鈕 void CDcPackerDlg::OnBnClickedSelectdec() { // TODO: Add your control notification handler code here m_strDescPath = ""; //類的成員變數 //"開啟檔案"對話方塊,選擇檔案,返回其路徑 m_strDescPath = BootOpenDialog(); }
相關推薦
[MFC]目錄選擇與檔案選擇
最近專案中有下面需求: 1. 彈出目錄或檔案選擇對話方塊 2. 當選中目錄時將該目錄下所有.c檔案的絕對路徑獲取出來 3. 當選中檔案時,判斷是否是.c檔案,如果是.c檔案將該.c檔案絕對路徑獲取出來 4. 支援多選目錄 5. 支援多選檔案 6. 支援
選擇與努力 選擇與尊嚴
mil 工作 sim 後來 最好的 生活 font 質量 最好 沒選擇的時候痛苦,有選擇的時候更痛苦,只有最佳選擇才是好,所以要做好當下最好的自己。當下的選擇與努力,決定著未來3年,5年,10年工作和生活的質量狀態。當然,當下的努力與拼搏,也是讓自已後來有更多的選擇,有更好
prototype.js框架 dom操作(checkout選擇與取消選擇操作DOM)
作者:zccst需求:使用者點選checkbox時,如果選擇,則讓其子型別checkbox變成灰色。如果取消選擇,再讓子型別checkbox變成正常可選狀態。分析:用到知識點1,選擇器。找到目標dom節點2,如何判斷是目標標籤3,找到目標標籤後,如果選擇,則設定子型別屬性di
最近生活感悟,我的選擇與被選擇
選擇與被選擇 今天同學的妹妹不遠萬里從老家跑過來問我要不要培訓,然後進入IT行業。談了很長時間,最後我給出的建議是“做自己的選擇,堅持自己喜歡的事情就是對的。” 回家的路上不禁想起去年自己在臨近畢業時所面臨選擇的問題。當然可能對於我來說我更加的幸運一些,因為
Winform選擇目錄路徑與選擇文件路徑
mod .data tle tail info pan ext dialog lena https://blog.csdn.net/zaocha321/article/details/52528279 using System.Collections.Generi
STM32 晶片系列 巨集定義與啟動檔案選擇說明
其中,ld.s適用於小容量 產品;md.s適用於中等容量產品;hd適用於大容量產品; 1、小容量產品:STM32F10X_LD,USE_STDPERIPH_DRIVER C4/C6 R4/R6 T4/
QT工程檔案的條件編譯選擇與額外的編譯引數配置
QTCreator開啟.pro工程檔案後,依據不同的構建套件建立專案組。在專案組中,點開構建步驟的“詳情”,增加一個自己的巨集定義,比如: DEFINES+=IMX_287 然後,我們在.pro檔案中新增: contains(DEFINES,IMX_2
選擇目錄對話方塊和選擇檔案對話方塊——CFileDialog
網上相關文章很多,現簡單整理如下 1、CFileDialog建構函式 1 CFileDialog:CFileDialog(BOOL bOpenFileDialog, 2 LPCTSTR lpszDefExt=NULL, 3 LPCTSTR
MFC點選按鈕開啟檔案選擇對話方塊
函式名:OnBnClickedOpenFileButton 函式功能:通過點選一個按鈕實現開啟檔案選擇對話方塊 引數:無 返回值:void 作者:weekdawn void CexeDemoDlg:
MFC檔案選擇
檔案對話方塊例項 根據前面所講內容,雞啄米給大家做個檔案對話方塊例項。 1.建立一個基於對話方塊的MFC應用程式工程,名稱設為“Example17”。 2.修改主對話方塊IDD_EXAMPLE17_DIALOG的模板,刪除自動生成的“TODO:
【C#】檔案選擇對話方塊OpenFileDialog與下列列表ComboBox
主要用如下的一個小例子,說明C#窗體中檔案選擇對話方塊OpenFileDialog與下列列表ComboBox的應用,點選“選擇檔案”按鈕,就可以開啟檔案選擇對話方塊OpenFileDialog,無論是多選檔案與單選檔案,都能夠將選擇的內容新增到下列列表ComboBox之中。
QT-檔案選擇對話方塊的模態與非模態
模態對話方塊與非模態對話方塊的基本概念就不詳說了,簡單說一下: 模態對話方塊彈出時,主視窗被阻塞,簡單來說就是如果該對話方塊不關閉,則主視窗上的按鈕都不可用; 非模態對話方塊反之。 那麼
yii2布局選擇與屬性標簽設置
attribute style 大小 app generate password 優先 first nds Yii選擇布局的方法: 1. 通過控制器成員變量設置: public $layout = false;//不使用布局 public $layout = ‘main’;
ThreadPoolExecutor中策略的選擇與工作隊列的選擇(java線程池)
完全 系統 rod 大小 font 操作系統 重復 null 定義 工作原理 1、線程池剛創建時,裏面沒有一個線程。任務隊列是作為參數傳進來的。不過,就算隊列裏面有任務,線程池也不會馬上執行它們。 2、當調用 execute() 方法添加一個任務時,線程池會做如下判斷:
html class選擇器與id選擇器
spa 寫法 錯誤 一個 html nbsp 元素 -s cnblogs class選擇器: <p class="p1"> .p1{ color:red; ..... } id選擇器: <p id="p2"> #p1{
Css 後代選擇器與子代選擇器的區別
javascrip width 沒有 什麽 for -1 adding 選擇器 light 後代選擇器用空格,比如A B{border:1px solid red;} 子代選擇器用>, 比如A>B{border:1px solid red;} 但是,如果你仔
關於用$.Ajax()控制按鈕的選擇與查看
public 當前 tom rri boolean protected exceptio cep let 前端jsp頁面代碼: 請選擇版本:<br/><div>推送版本:<input type="button" id="post1" clas
細品 - 過擬合與模型選擇*
最優 優化 並且 情況下 最小化 wid 正方 tro 預測 欠擬合和過擬合 欠擬合是指模型不能很好的捕獲到數據特征,不能很好的擬合數據,學習能力底下。解決方法:增加模型的復雜度 過擬合是指模型不僅僅學習了數據集中的有效信息,也學習到了其中的噪音數據,使得
基本統計方法的選擇與應用
sample bsp 應用 描述 推斷 post 趨勢 相關分析 賦值 一、確定資料的類型:分類資料、定量資料; 選擇適當的統計方法,資料不同,設計不同,采用的分析方法不同;1、計量資料的比較(比較集中趨勢是否不同): (1)兩組:t檢驗、Wilcoxon
(轉)磁盤分區類型選擇與磁盤分區配置過程
多個 網站集群架構 設備名 不可 primary lvm 創建文件系統 alt 再次 2.3.2 磁盤分區類型選擇與磁盤分區配置過程(1) 原文:http://book.51cto.com/art/201701/527364.htm 《跟老男孩學Linux運維:Web集群