我想知道我是否在这里重新发明轮子。
本质上,新的Common Item Dialog文件浏览器比旧的GetOpenFileName()版本好得多。如果用户在Vista +操作系统上,我想使用新的对话框,但仍然具有XP等旧对话框的功能。
所以我想知道我是否应该创建这样的函数。
BOOL ShowOpenFileDialog(_Out_ LPTSTR szBuffer, _In_ UINT iBufferSize)
{
static DWORD dwMajorVersion = 0;
if (!dwMajorVersion)
dwMajorVersion = (DWORD)(LOBYTE(LOWORD(GetVersion())));
if (dwMajorVersion >= 6) // Vista+
return ShowNewOpenFileDialog(szBuffer, iBufferSize); // show common item
return ShowOldOpenFileDialog(szBuffer, iBufferSize); // fall back to old dialog
}
另外一个后续内容只是C ++的常用项目吗?
答案 0 :(得分:6)
正如Raymond Chen所说,你不应该依赖版本号,而是依赖于功能的可用性,例如:
BOOL ShowOpenFileDialog(_Out_ LPTSTR szBuffer, _In_ UINT iBufferSize)
{
IFileDialog *pfd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_IFileDialog, (void**)&pfd);
if (SUCCEEDED(hr))
{
// use IFileDialog as needed...
pfd->Release();
}
else
{
// use GetOpenFileName() as needed...
}
}
不,IFileDialog
不仅仅针对C ++。任何支持COM的语言都可以使用它,包括C,C ++,Delphi,VisualBasic等。