2010-12-01 5 views
0

Windows 응용 프로그램에서는 SaveAs 대화 상자를 연 후 SaveAs 대화 상자 앞에 팝업 메시지를 표시 할 수 있습니까? 내가 관리 할 수 ​​있었던 것은 대화 상자가 닫힌 후에 나타나는 팝업입니다.SaveAs 대화 상자 앞에 팝업 메시지 표시

C++로 작성된 이전 응용 프로그램을 편집해야하지만 (필자는 아니지만)이 작업을 관리 할 수 ​​없습니다.
일리야

답변

0

당신은 할 수 있지만 것

/* ----라는 저장 파일 대화 ---- */

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

res = GetSaveFileNameW(&ofn); 

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

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

감사를 표시하기 위해이 코드의 일부입니다 상당히 해킹 될 수 있습니다. 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을 지정할 수 있습니다. 이것은 얼마나 많은 앱이 문서의 미리보기/메타 데이터를 보여 주는지입니다.