gpt4 book ai didi

c++ - 如何将事件挂接到 CFileDialog?

转载 作者:行者123 更新时间:2023-11-30 04:46:19 26 4
gpt4 key购买 nike

我正在尝试制作一个“另存为”对话框,其中包含一个事件,该事件将根据我们从过滤器组合框中选择的文件类型更改默认路径。问题是,我看到的所有示例都在结果 IDOKIDCANCEL 上执行代码,而我需要在对话框仍然打开时执行代码。

此外,如果过滤器具有相同类型,是否有任何方法可以区分选择了哪个过滤器? GetFileExt() 方法只返回扩展名,但我无法判断它是第一个 .my 过滤器还是模板 .my 过滤器。

我见过类似 LPOFNHOOKPROC 的东西,但没有示例说明我将如何使用它,我不确定它是否能解决我的问题。

void CMyClass::OnFileOpen()
{
CString pathNam;
CString fileName;

TCHAR szFilters[]= _T("MyType Files (*.my)|*.my|Template MyType (*.my)|*.my||");

CFileDialog fileDlg(TRUE, _T("my"), _T("*.my"),
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);

if(fileDlg.DoModal() == IDOK)
{
pathName = fileDlg.GetPathName();
fileName = fileDlg.GetFileTitle();
}
}

编辑:

我现在可以通过获取 OFN 并检查 nFilterIndex 值来获取已选择的特定过滤器。所以剩下的问题是我是否可以根据选择的文件格式更新路径?

编辑2:

我找到了 OnChangeType 方法并在子类中重载了它,它确实执行了该方法和其中的代码,但是当我尝试更新文件路径时,我遇到了访问冲突:

void TFileDialogExt::OnTypeChange()
{
LPWSTR buff = L"C:\\TEST\\template.my";

if(m_pOFN->nFilterIndex == 2)
m_ofn.lpstrFile = buff;
}

最佳答案

基本上你必须继承 CFileDialog 并处理它的 CFileDialog::OnTypeChange方法。

但是,正如 Microsoft 所建议的:您最好使用新的 Common Item Dialog相反。

关于c++ - 如何将事件挂接到 CFileDialog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56831775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com