2010-12-01 9 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を作成し、それをモーダルではなくむしろ開いて、隠しておく必要があります。窓はそこにありますが、あなたはそれを見ることはできません。 "ポップアップ"をクリックすると、ウィンドウのダイアログを再表示することができます。

+0

この回答は完全に広いです –

3

あなたが正しいことを理解していれば、ダイアログを閉じる前にいくつかのもの(ファイル拡張子など)をチェックして、メッセージを表示して閉じる必要があります。そうなら、OPENFILENAME StructureのOFN_ENABLEHOOKフラグを見てください。この場合、あなたのコードは、MyHookProcため

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); 

コードのようになります。次のようになります。

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ダイアログを開いた後にいくつかの情報メッセージを表示したいと思います: "このファイルはたくさんのメモリを取るでしょう" :)ありがとう! –

+0

この場合、MyHookProcでWM_INITDIALOGを処理するだけです。 – DReJ

+0

ええと、これを試しましたが、Win98からのものに似ている保存ダイアログを開いただけです:) –

0

ファイル保存ダイアログボックスのGUIを拡張したいと思うようです。独自のダイアログリソーステンプレートを使用してGUIを拡張し、OFN_ENABLETEMPLATEを指定することができます。これは、ドキュメントのプレビュー/メタデータを表示するアプリの数です。