2010-12-01 2 views
0

В приложении Windows можно ли отображать всплывающее сообщение перед диалоговым окном SaveAs после открытия диалогового окна SaveAs? Все, что мне удалось получить, это всплывающее окно после закрытия диалогового окна.показать всплывающее сообщение перед диалогом SaveAs

Мне нужно отредактировать старое приложение, написанное на C++ (я не автор), но не могу справиться с этой задачей. Это часть кода:

/* ---- призваны отобразить диалог сохранения файла ---- */

ofn.hwndOwner = hwnd; 
ofn.lpstrFile = lpstrFileName; 
ofn.lpstrTitle = lpstrTitleName; 

res = GetSaveFileNameW(&ofn); 

/* ---- fix file extension ---- */ 

MessageBox(NULL, "Test", "Testing", MB_OK); 

Спасибо,
Ilija

ответ

0

Вы можете, но это было бы быть довольно взломанным. Вам нужно будет создать FileDialog и открыть его немодальным, а не модальным и скрытым. Итак, окно есть, но вы не можете его увидеть. Когда вы нажимаете «всплывающее окно», вы можете отобразить диалоговое окно Windows.

+0

Этот ответ полностью широк знака – 2010-12-02 00:38:53

3

Если я понимаю вас правильно, вы хотите проверить некоторые вещи (например, расширение файла) перед закрытием диалогового окна и показать сообщение с закрытием. Если это так, посмотрите флаг OFN_ENABLEHOOK в OPENFILENAME Structure. В этом случае ваш код будет выглядеть примерно так

ofn.hwndOwner = hwnd; 
ofn.lpstrFile = lpstrFileName; 
ofn.lpstrTitle = lpstrTitleName; 

/* enables the hook function */ 
ofn.Flags |= OFN_ENABLEHOOK; 
ofn.ofn.lpfnHook = (LPOFNHOOKPROC) MyHookProc; 

/* some code here */ 

res = GetSaveFileNameW(&ofn); 

код для MyHookProc будет выглядеть следующим образом:

static UINT CALLBACK MyHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    if (uMsg == WM_NOTIFY) { 
     OFNOTIFYW *notify = (OFNOTIFYW *) lParam; 

     if (notify->hdr.code == CDN_FILEOK) { 
      /* your code here */ 
     } 
    } 
} 

Надеется, что это будет полезно для вас.

+0

Нет, я просто хочу показать некоторое информационное сообщение после открытия диалога SaveAs, например: «Этот файл займет много памяти» :) Спасибо! – 2010-12-01 11:11:55

0

Похоже, вы хотите расширить графический интерфейс диалогового окна файла сохранения. Вы можете расширить GUI, используя свой собственный шаблон ресурса диалога, и указать OFN_ENABLETEMPLATE. Это то, сколько приложений показывает превью/метаданные документов.

Смежные вопросы