+ enum ExcludeFlags
+ {
+ excludeGIF = 0x01,
+ excludeBMP = 0x02,
+ excludeEMF = 0x04,
+ excludeWMF = 0x08,
+ excludeJPEG = 0x10,
+ excludePNG = 0x20,
+ excludeTIFF = 0x40,
+ excludeIcon = 0x80,
+ excludeOther = 0x80000000,
+ excludeDefaultLoad = 0,
+ excludeDefaultSave = excludeIcon | excludeEMF | excludeWMF
+ };
+
+ struct FILTER_DATA {
+ DWORD dwExclude;
+ const TCHAR *title;
+ const TCHAR *extensions;
+ const GUID *guid;
+ };
+
+protected:
+ static HRESULT GetCommonFilterString(
+ CSimpleString& strFilter,
+ CSimpleArray<GUID>& aguidFileTypes,
+ LPCTSTR pszAllFilesDescription,
+ DWORD dwExclude,
+ TCHAR chSeparator)
+ {
+ static const FILTER_DATA table[] =
+ {
+ {excludeBMP, TEXT("BMP"), TEXT("*.BMP;*.DIB;*.RLE"), &Gdiplus::ImageFormatBMP},
+ {excludeJPEG, TEXT("JPEG"), TEXT("*.JPG;*.JPEG;*.JPE;*.JFIF"), &Gdiplus::ImageFormatJPEG},
+ {excludeGIF, TEXT("GIF"), TEXT("*.GIF"), &Gdiplus::ImageFormatGIF},
+ {excludeEMF, TEXT("EMF"), TEXT("*.EMF"), &Gdiplus::ImageFormatEMF},
+ {excludeWMF, TEXT("WMF"), TEXT("*.WMF"), &Gdiplus::ImageFormatWMF},
+ {excludeTIFF, TEXT("TIFF"), TEXT("*.TIF;*.TIFF"), &Gdiplus::ImageFormatTIFF},
+ {excludePNG, TEXT("PNG"), TEXT("*.PNG"), &Gdiplus::ImageFormatPNG},
+ {excludeIcon, TEXT("ICO"), TEXT("*.ICO"), &Gdiplus::ImageFormatIcon}
+ };
+
+ if (pszAllFilesDescription)
+ {
+ strFilter += pszAllFilesDescription;
+ strFilter += chSeparator;
+
+ BOOL bFirst = TRUE;
+ for (size_t i = 0; i < _countof(table); ++i)
+ {
+ if ((dwExclude & table[i].dwExclude) != 0)
+ continue;
+
+ if (bFirst)
+ bFirst = FALSE;
+ else
+ strFilter += TEXT(';');
+
+ strFilter += table[i].extensions;
+ }
+ strFilter += chSeparator;
+
+ aguidFileTypes.Add(GUID_NULL);
+ }
+
+ for (size_t i = 0; i < _countof(table); ++i)
+ {
+ if ((dwExclude & table[i].dwExclude) != 0)
+ continue;
+ strFilter += table[i].title;
+ strFilter += TEXT(" (");
+ strFilter += table[i].extensions;
+ strFilter += TEXT(")");
+ strFilter += chSeparator;
+ strFilter += table[i].extensions;
+ strFilter += chSeparator;
+
+ aguidFileTypes.Add(*table[i].guid);
+ }
+
+ strFilter += chSeparator;
+
+ return S_OK;
+ }
+
+public: