UINT_PTR FileDialog::OFNHookProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { if(_Handle==0) _Handle = ::GetParent(hDlg); if(uMsg==WM_NOTIFY) { LPOFNOTIFY pon = (LPOFNOTIFY)lParam; switch(pon->hdr.code) { case CDN_SELCHANGE: { /*if(OnSelChange.IsNull()) break; Memory<wchar_t> path(MAX_PATH),file(MAX_PATH); int n = (int)::SendMessage(_Handle,CDM_GETFILEPATH,(WPARAM)MAX_PATH,(LPARAM)path.Handle()); 这个消息返回的值包括目录和文件名,目录们没有引号,文件名用空格分隔并且用引号包围,目录和文件名之间没有空格,目录末尾包含反斜杠。 但是引号有时没有,有时有,如果文件名包含空格,实际上无法正确获取文件名,所以此方法实际上不可用。 if(n<0) path[0] = 0; n = (int)::SendMessage(_Handle,CDM_GETSPEC,(WPARAM)MAX_PATH,(LPARAM)file.Handle()); 这个消息返回文件名,规则同上。 if(n<0) path[0] = 0; OnSelChange(path,file);*/ break; } case CDN_FOLDERCHANGE: { if(!OnFolderChange.IsNull()){ Memory<wchar_t> path; path.SetLength(MAX_PATH); int n = (int)::SendMessage(_Handle,CDM_GETFOLDERPATH,(WPARAM)MAX_PATH,(LPARAM)path.Handle()); if(n<0){ path[0] = 0; } OnFolderChange(path,this); } break; } case CDN_FILEOK://this message is ago okid message,if return TRUE then no okid message; if((!OnFileOk.IsNull())&&(OnFileOk(pon->lpOFN,this))) { SetWindowLong(_Handle,DWL_MSGRESULT,1L); return 1; } break; case CDN_TYPECHANGE: if(!OnTypeChange.IsNull()) OnTypeChange(pon->lpOFN->nFilterIndex,this); break; } } return 0; };
BOOL CPreviewFileDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { ASSERT(pResult != NULL); // allow message map to override OFNOTIFY* pNotify = (OFNOTIFY*)lParam; switch(pNotify->hdr.code) { case CDN_SELCHANGE: OnFileNameChange(); return TRUE; case CDN_FOLDERCHANGE: OnFolderChange(); return TRUE; case CDN_INITDONE: OnInitDone(); return TRUE; } return CFileDialog::OnNotify(wParam, lParam, pResult); }
BOOL CFileDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { ASSERT(pResult != NULL); // allow message map to override if (CCommonDialog::OnNotify(wParam, lParam, pResult)) return TRUE; #ifndef _MAC OFNOTIFY* pNotify = (OFNOTIFY*)lParam; switch(pNotify->hdr.code) { case CDN_INITDONE: OnInitDone(); return TRUE; case CDN_SELCHANGE: OnFileNameChange(); return TRUE; case CDN_FOLDERCHANGE: OnFolderChange(); return TRUE; case CDN_SHAREVIOLATION: *pResult = OnShareViolation(pNotify->pszFile); return TRUE; case CDN_HELP: if (!SendMessage(WM_COMMAND, ID_HELP)) SendMessage(WM_COMMANDHELP, 0, 0); return TRUE; case CDN_FILEOK: *pResult = OnFileNameOK(); return TRUE; case CDN_TYPECHANGE: OnTypeChange(); return TRUE; } #endif return FALSE; // not handled }