Использование GetSaveFileName. Я указываю флаг OFN_EXPLORER, но всегда получаю старый вид диалогового окна, если не избегаю использования как ловушки, так и шаблона - PullRequest
2 голосов
/ 02 марта 2009

Использование GetSaveFileName. Я указываю флаг OFN_EXPLORER, но всегда получаю старое диалоговое окно, если не избегаю как ловушки, так и шаблона. (lpfnHook и lpfnTemplate (и их соответствующие флаги «включения») в структуре OPENFILENAME)

Если я избегу использования одного или другого, я все равно получаю старый вид диалога. Я также не пробовал шаблон, но использую хук ... но всегда возвращаю TRUE из него (я видел упоминание "всегда возвращать false" из хука как способ получить старый интерфейс). Похоже, это не дало никакого эффекта.

РЕДАКТИРОВАТЬ: Добавлен соответствующий код:

ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hInstance=RhInst;
ofn.hwndOwner=MainWh;
ofn.lpstrFilter=s;
ofn.lpstrCustomFilter=null;
ofn.nMaxCustFilter=0;
ofn.nFilterIndex=sel;

ofn.lpstrFile=fname;
ofn.nMaxFile=lstrl;
ofn.lpstrFileTitle=tfile;
ofn.nMaxFileTitle=lstrl;

if (path && lstrlen(path)) ofn.lpstrInitialDir=path;
else ofn.lpstrInitialDir=drive;

lstrcpy(SE_DefExt,ext);
ofn.lpstrDefExt=SE_DefExt;
if (titleid) ofn.lpstrTitle=title;
else ofn.lpstrTitle=null;

ofn.lpfnHook=(CommHookProc)MakeProcInstance((FARPROC)SEOpen32Hook,hInst);
ofn.lpTemplateName=NULL;
ofn.Flags=OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK  | OFN_EXPLORER
            | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;

if(allowfit)
    {
    ofn.lpTemplateName = MAKEINTRESOURCE(SAVETOFIT);
    ofn.Flags |= OFN_ENABLETEMPLATE;
    }

if (GetSaveFileName(&ofn))
    {
    // <snip>
    }

Обратите внимание, что в этом случае "allowfit" не равен нулю / истина. Если я закомментирую настройку флага для OFN_ENABLEHOOK и OFN_ENABLETEMPLATE, я получу «новый» вид диалога.

** РЕДАКТИРОВАНИЕ 2:
Похоже, я запутался в том, что видел. Я полагаю, что в обоих случаях я получаю «новое» поведение и внешний вид OFN_EXPLORER. Когда я удаляю флаг OFN_EXPLORER, я получаю диалоговое окно очень старого стиля.

Я пытаюсь найти стиль диалогового окна «Сохранить файл», в правом верхнем углу которого есть кнопка «Назад» и «Вперед», и (что наиболее важно) - адресное поле, которое я могу ввести. Все мои предыдущие комментарии и описания кода (выше) все еще применяются; когда я удаляю Шаблон и Хук, я получаю свои кнопки «назад и вперед» и мое поле для ввода адреса (плюс дерево просмотра слева) ... когда я оставляю шаблон и хук на месте - я не (вместо этого есть список выбора «Сохранить в» вверху и «стандартные места» слева («Последние места», «Рабочий стол», ...).

Ответы [ 4 ]

1 голос
/ 24 мая 2009

вы определили _WIN32_WINNT >= 0x0500? Установка lStructSize для размера win2000 может помочь диалогу принять решение (если вам требуется поддержка OPENFILENAME_SIZE_VERSION_400 в качестве размера в системах нижнего уровня)

0 голосов
/ 15 мая 2012

Если вы используете OFN_EXPLORER и OFN_ENABLEHOOK в Windows Vista и 7, вы получите диалоговые окна в стиле XP. Если вы удалите OFN_EXPLORER, вы получите более старый стиль Win2k. Если вы используете OFN_ENABLEHOOK (или OFN_ENABLETEMPLATE), то система не будет использовать стиль Vista / 7.

Начиная с Vista, если вы хотите настроить такие диалоги, рекомендуется использовать интерфейсы COM IFileDialog, IFileOpenDialog и IFileSaveDialog. Смотри http://msdn.microsoft.com/en-us/library/windows/desktop/bb776913(v=vs.85).aspx.

0 голосов
/ 03 марта 2009

Что касается шаблона, вы должны определить DS_SHELLFONT. http://blogs.msdn.com/oldnewthing/archive/2005/02/04/366987.aspx

0 голосов
/ 02 марта 2009

Возможно, вам нужно показать какой-нибудь код? По данным MSDN:

Вы можете предоставить хук OFNHookProc процедура для сохранения в стиле Explorer диалоговое окно. Чтобы включить крючок процедуры, установите OFN_EXPLORER и Флаги OFN_ENABLEHOOK во Флагах член структуры OPENFILENAME и укажите адрес крючка процедура в члене lpfnHook.

Так что, если вы делаете что-то странное, это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...