Több fájl kijelölése openfilename

Több fájl kijelölése openfilename
2010-05-06T16:32:50+02:00
2010-05-06T18:20:09+02:00
2022-11-17T16:40:39+01:00
Péter01
#include <windows.h> #include <commctrl.h> LRESULT CALLBACK c(HWND h,UINT u,WPARAM w,LPARAM l){} int main(){ WNDCLASSEX wnd; wnd.style=0; wnd.hIcon=0; wnd.hIconSm=0; wnd.hInstance=0; wnd.cbClsExtra=0; wnd.cbWndExtra=0; wnd.lpfnWndProc=c; wnd.lpszMenuName=0; wnd.hbrBackground=0; wnd.lpszClassName="x"; wnd.cbSize=sizeof(WNDCLASSEX); wnd.hCursor=LoadCursor(0,IDC_ARROW); if(!RegisterClassEx(&wnd)){return 0;} HWND win=CreateWindowEx(WS_EX_TOOLWINDOW,"x","",WS_POPUP,0,0,0,0,0,0,0,0); OPENFILENAME ofn; char fln[MAX_PATH]=""; memset(&ofn,0,sizeof(ofn)); ofn.hwndOwner=win; ofn.lpstrFile=fln; ofn.nMaxFile=MAX_PATH; // ofn.lpstrFile="asd.jpg"; // ofn.lpstrInitialDir="c:\\"; ofn.lStructSize=sizeof(ofn); ofn.lpstrTitle="Fájlok kiválasztása:"; ofn.lpstrFilter="Minden fájl (*.*)\0*.*\0\0"; ofn.Flags=OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; // GetSaveFileName(&ofn); if(GetOpenFileName(&ofn)){ char path[MAX_PATH]; char* nextname=&ofn.lpstrFile[ofn.nFileOffset]; strcpy(path,ofn.lpstrFile); path[ofn.nFileOffset]=0; while(*nextname){ MessageBox(0,nextname,"",MB_OK); nextname+=strlen(nextname)+1; } } }

jelenleg csak a fájlneveket írja ki. hogyan tudom a messagebox-ba kiírni, vagy bárhonnan lekérni, hogy a fájl hol van helyileg?

tehát amikor a dokumentumokba kiválasztok egy asd.jpg fájlt, akkor ne csak a nevét írja ki, hanem hogy hol is van. erre lennék kiváncsi: c:/documents and settings/felhasznalo nevem/dokumentumok/asd.jpg
Mutasd a teljes hozzászólást!

strcpy(path,ofn.lpstrFile); path[ofn.nFileOffset]=0;

Ezt nem te írtad bele?
Ott van a path. (Legalábbis ott kéne lennie.)
Mutasd a teljes hozzászólást!

  • aha, köszi tényleg én vagyok a gyökér, mert az elején még láttam is csak úgy véltem, hogy vmi gubanc volt benne és levégta az url-nek a végét

    kiszedtem a sok felesleges hwnd-t meg a többit, most ennyi van:

    #include <commctrl.h> OPENFILENAME ofn; char fln[MAX_PATH]=""; memset(&ofn,0,sizeof(ofn)); ofn.lpstrFile=fln; ofn.nMaxFile=MAX_PATH; ofn.lStructSize=sizeof(ofn); ofn.lpstrTitle="Fájlok kiválasztása:"; ofn.lpstrFilter="Minden fájl (*.*)\0*.*\0\0"; ofn.Flags=OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; if(GetOpenFileName(&ofn)){ MessageBox(0,ofn.lpstrFile,"",MB_OK); char* fil=&ofn.lpstrFile[ofn.nFileOffset]; while(*fil){ MessageBox(0,fil,"",MB_OK); fil+=strlen(fil)+1; } }

    tökéletesen magkapom külön a könyvtár nevét ahol a fájlok vannak, ha 1-nél több fájlt választok ki. viszont ha csak 1 fájlt, akkor a fájl nevét is odaírja mögé és még 1x bedobja külön csak a fájlnevet is.

    tehát így:
    c:/mappa/
    fajl_1.jpg
    fajl_2.jpg

    és így:
    c:/mappa/fajl.jpg
    fajl.jpg

    ezt be lehet vhogy állítani, hogy mindig csak a könyvtár nevét adja be és ne rakja hozzá a fájlnevet 1 fájl esetében?
    Mutasd a teljes hozzászólást!
  • Passz.
    De az első esetben ofn.nFileOffset > strlen(ofn.lpstrFile), nem?
    Mutasd a teljes hozzászólást!
  • nem, de rávezettél a megoldásra.

    string pth=ofn.lpstrFile; pth=pth.substr(0,ofn.nFileOffset-1); MessageBox(0,(char*)pth.c_str(),"",MB_OK); char* fil=&ofn.lpstrFile[ofn.nFileOffset];

    köszönöm!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd