Hi, in the GetOpenFileName, I want to allow multiple files selection:
it crushes when I choose one fileCode:UINT CALLBACK CWnd::OFNHookProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { switch(message) { case WM_INITDIALOG: { SetProp(GetParent(hDlg), "OFN", (void *)lParam); break; } case WM_NOTIFY: { LPOFNOTIFY lpof = reinterpret_cast<LPOFNOTIFY>(lParam); DWORD neededSize = 0; if(lpof->hdr.code == CDN_SELCHANGE) { neededSize = CommDlg_OpenSave_GetSpec(GetParent(hDlg), NULL, 0); neededSize += MAX_PATH; LPOPENFILENAME pOfn = reinterpret_cast<LPOPENFILENAME>(GetProp(GetParent(hDlg), "OFN")); if(pOfn->nMaxFile < neededSize) { // need to put comments because it hangs and crush /*LPTSTR lpsz = pOfn->lpstrFile; if (lpsz) { HeapFree(GetProcessHeap(),0,lpsz); lpsz = (TCHAR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,neededSize); if (lpsz) { pOfn->lpstrFile = lpsz; pOfn->nMaxFile = neededSize; } }*/ } } break; } case WM_DESTROY: { RemoveProp(GetParent(hDlg), "OFN"); break; } } return 0; } bool CWnd::OpenFileNames(HWND h,const TCHAR *filter,TCHAR *buffer,int buffer_size,int *nMorethenOne) { OPENFILENAME ofn = {0}; buffer[0] = 0; ofn.lStructSize = sizeof(OPENFILENAME); ofn.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLEHOOK; ofn.hwndOwner = h; ofn.lpstrFile = buffer; ofn.nFilterIndex = 0; ofn.lpstrFilter = filter; ofn.nMaxFile = buffer_size; ofn.lpfnHook = OFNHookProc; ofn.lCustData = reinterpret_cast<LPARAM>(&ofn); if (!GetOpenFileName(&ofn)) return false; *nMorethenOne = ofn.nFileExtension; return true; } // .. later case IDM_SOMEMENUITEM: { TCHAR sz_FileNames[MAX_PATH]; int off_set = 0,nFiles = 0; if (OpenFileNames(hwnd,MakeFilter().c_str(),sz_FileNames,sizeof(sz_FileNames)+1,&off_set)) { if (!off_set) { // We have more then 1 files selected } else { // use single file } nFiles++; } break; }
I'm trying to grow the max file size so the user can grab more files...any ideas?



LinkBack URL
About LinkBacks




