У меня есть следующий код (отрывок) для отображения диалогового окна «Сохранить как»:
char FileName[MAX_PATH] = "TestImage.jpg"
...
lpofn.lStructSize = sizeof(OPENFILENAME);
lpofn.hwndOwner = hWnd;
lpofn.hInstance = GetWindowInstance (hWnd);
lpofn.lpstrFilter = "JPG - JPEG File\0*.JPG\0TIF - TIFF File\0*.TIF\0PNG File\0*.PNG\0BMP - Bitmat File\0*.BMP\0";
lpofn.lpstrCustomFilter = NULL;
lpofn.nMaxCustFilter = NULL;
lpofn.nFilterIndex = 0;
lpofn.lpstrFile = FileName;
lpofn.nMaxFile = MAX_PATH;
lpofn.lpstrFileTitle = NULL;
lpofn.nMaxFileTitle = NULL;
lpofn.lpstrInitialDir = NULL;
lpofn.lpstrTitle = NULL;
lpofn.Flags = OFN_HIDEREADONLY | OFN_ENABLEHOOK | OFN_EXPLORER;
lpofn.nFileOffset = 0;
lpofn.nFileExtension = 0;
lpofn.lpstrDefExt = NULL;
lpofn.lCustData = NULL;
lpofn.lpfnHook = &UpdateFilename;
lpofn.lpTemplateName = NULL;
if(!GetSaveFileName(&lpofn)) return;
...
например. - Пользователь сохраняет как, имя файла по умолчанию = "TestImage.jpg", тип файлов по умолчанию = JPG - Пользователь меняет тип файлов на PNG, для управления именем файла остается "TestImage.jpg" вместо изменения на "TestImage.png"
Я делаю что-то неправильно? Можно ли указать GetSaveFileName () изменить расширение, или мне нужно иметь настраиваемый диалог сохранения как (какие-либо примеры?)
Я использую Win32 API, VC6.
Обновление: вот функция перехвата:
UINT CALLBACK UpdateFilename(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
switch (uiMsg)
{
case WM_NOTIFY:
// Check for CDN_TYPECHANGE etc
return FALSE;
}
return FALSE;
}
Обратите внимание, что функция перехвата не останавливается на точках останова. Я намеренно не приступил к обработке CDN_TYPECHANGE, пока не смогу выяснить, почему внешний вид диалогового окна меняется при включении ловушки и как это исправить.