完整代碼
// 按鈕點擊響應
void CMyDialog::OnBnClickedBtnSelectFile() {
CFileDialog fileDlg(TRUE); // TRUE=打開文件對話框
fileDlg.m_ofn.lpstrFilter = _T("所有文件(*.*)|*.*|文本文件(*.txt)|*.txt||");
if (IDOK == fileDlg.DoModal()) {
CString path = fileDlg.GetPathName(); // 獲取完整路徑
// 顯示在列表框
int idx = m_listBox.AddString(path); // m_listBox 為 CListBox 變量
m_listBox.SetCurSel(idx); // 選中新增項
// 可選:保存到成員變量/容器
m_filePaths.push_back(path);
}
}
關鍵點
- `CFileDialog(TRUE)` 打開模式,`FALSE` 保存模式。
- `GetPathName()` 返回完整路徑,`GetFileName()` 僅文件名。
- `CListBox::AddString` 返回索引,可用於後續操作。
- 記得在 `DoDataExchange` 中 `DDX_Control(pDX, IDC_LIST1, m_listBox);` 綁定控制項變量。
擴展:多選文件
CFileDialog fileDlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_EXPLORER);
fileDlg.m_ofn.lpstrFilter = ...;
if (IDOK == fileDlg.DoModal()) {
POSITION pos = fileDlg.GetStartPosition();
while (pos) {
CString path = fileDlg.GetNextPathName(pos);
m_listBox.AddString(path);
}
}