问题不言自明。我有一个程序使用SHBrowseforfolder,但现在他们要我升级到IFileDialog,我做的,但在C++,所以它甚至有可能让它与C工作,因为它是面向对象的?
eit6fx6z1#
IFileDialog是微软的组件对象模型(COM)的一部分。COM编程可以用C语言完成,但相当乏味。这里有一个教程(不能保证它的质量)http://www.codeproject.com/Articles/13601/COM-in-plain-C
oxf4rvwz2#
这是使用IFileDialog打印选定文件夹名称的C代码:
IFileDialog
#include <shobjidl_core.h> //somewhere in your program //... IFileDialog *pfd; IShellItem *psiResult; PWSTR pszFilePath = NULL; if (SUCCEEDED(CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, &IID_IFileOpenDialog, &pfd))){ pfd->lpVtbl->SetOptions(pfd, FOS_PICKFOLDERS); pfd->lpVtbl->Show(pfd, hwnd); if (SUCCEEDED(pfd->lpVtbl->GetResult(pfd, &psiResult))){ if (SUCCEEDED(psiResult->lpVtbl->GetDisplayName(psiResult, SIGDN_FILESYSPATH, &pszFilePath))){ WCHAR *p = pszFilePath; while (*p){ printf("%c",*p);//I don't like unicode p++; } CoTaskMemFree(pszFilePath); } psiResult->lpVtbl->Release(psiResult); } pfd->lpVtbl->Release(pfd); }
2条答案
按热度按时间eit6fx6z1#
IFileDialog是微软的组件对象模型(COM)的一部分。COM编程可以用C语言完成,但相当乏味。
这里有一个教程(不能保证它的质量)
http://www.codeproject.com/Articles/13601/COM-in-plain-C
oxf4rvwz2#
这是使用
IFileDialog
打印选定文件夹名称的C代码: