gong Napisano Maj 9, 2008 Zgłoś Share Napisano Maj 9, 2008 Mam dwa pytania dotyczące WinApi: 1) W przykłądzie poniżej wykorzystuje Open Dialog do wyboru pliku i wysłania jego nazwy pliku w Edicie(utworzony jako multiline); Użytkownik wybiera plik(np po ustaleniu filtra) No ale chcialbym wybrać kilka plików i pojawia się problem...bo nie wiem jak? Mógłbym wykorzystać ListBoxa i kazdorazowo Otwierac okno dialogowe i wybierac nazwe 1 pliku, ale nie oto mi chodzi...Proszę o pomoc... 2) Jak wysłąc text do kolejnej lini w Edicie (przeskoczyc wiersz) ..próbowałem w stringu umieścić "\n" ale bez skutecznie...Oczywiście utworzony Edit jest Multiline..Np w ListBoxie jest to rozwiązane tak: SendMessage(lb01, LB_ADDSTRING, 0, (LPARAM)"1"); Dziekuje za pomoc... //tworzę edita HWND hEdit = CreateWindowEx(WS_EX_ACCEPTFILES,L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL| WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 100, 250, 350, 150, hWnd, (HMENU)601, NULL, NULL); //wykorzystuje open dialog by wybrac plik OPENFILENAME ofn; TCHAR szFileName[MAX_PATH] = L""; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFilter = L"Text Files (*.txt)*.txtAll Files (*.*)*.*\"; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrDefExt = L"txt"; if(GetOpenFileName(&ofn)) { SetDlgItemText(hWnd, 601, szFileName);//wysyłąm nazwe pliku do Edita } Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Maj 9, 2008 Zgłoś Share Napisano Maj 9, 2008 No ale chcialbym wybrać kilka plików i pojawia się problem...bo nie wiem jak? Dodajemy flagę: OFN_ALLOWMULTISELECT ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT; Pozdrawiam! @Edit: użyj \r\n zamiast \n LINK. Link do komentarza Udostępnij na innych stronach More sharing options...
gong Napisano Maj 9, 2008 Autor Zgłoś Share Napisano Maj 9, 2008 Dziękuje za podpowiedź...ale nadal mam problem. Otórz jak z ofn.Flags zlikwiduje OFN_EXPLORER i dodam oczywiście OFN_ALLOWMULTISELECT Otworze dialog i wybiore pliki to wtedy mam w edicie: \DOCUME~1\MLz\MOJEDO~1\ apartaments.txt data.txt Mogę napisać fukcje pobierająca nazwy plików, bo są oddzielone spacjami..no i wydawać by się moglo że HURRA ale chcialbym jednak pozostać przy: OFN_EXPLORER i by moim buforem byla tablica nazw plików. //tak to wygląda po modyfikacji OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFilter = L"Text Files (*.txt)*.txtAll Files (*.*)*.*\"; TCHAR strFiles[MAX_PATH] = {0}; ofn.lpstrFile = strFiles; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |OFN_ALLOWMULTISELECT; ofn.lpstrDefExt = L"txt"; if(GetOpenFileName(&ofn)) { SetDlgItemText(hWnd, 601, strFiles); } %ŹŻ(ł<z')HŃ[QX[ĘQKSSŃSÓUSTŃSPSS NÓPVSHH MMHX^WX^[HHPVSNH]ÓPVSWNW [HHW[VHHS[T]HÓ[[ NYT]OHQĘB[[HUSÓH]][ N[H HS B]^][YJĘN[ ĘB[X] ][X[H[Y Y[L][[ NYYYP NB[HYT]OHQSŃS BYYYP ][[[ ][ĘN http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx Bardzo dziękuje za wszelką pomoc... Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Maj 10, 2008 Zgłoś Share Napisano Maj 10, 2008 Heyka jeśli nie używasz flagi: OFN_EXPLORER czyli odbierasz skrócone nazwy plików, to możesz wyłuskać sobie je w ten sposób: if(GetOpenFileName(&ofn)) { int y=0; int t=0; TCHAR SciezkaDoPliku[MAX_PATH] = ""; TCHAR NazwaPliku[MAX_PATH] = ""; for(int x=0;x<strlen(szFileName);x++) { if(szFileName[x]!=' ') { NazwaPliku[y]=szFileName[x]; y++; } else { if(t==0) { int xx; for(xx=0;xx<strlen(NazwaPliku);xx++) { SciezkaDoPliku[xx]=NazwaPliku[xx]; } SciezkaDoPliku[xx]='\\'; SciezkaDoPliku[xx+1]='�'; t++; y=0; } else { NazwaPliku[y]='\r'; NazwaPliku[y+1]='\n'; NazwaPliku[y+2]='�'; SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) SciezkaDoPliku); SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) NazwaPliku); y=0; } } } SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) SciezkaDoPliku); SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) NazwaPliku); } Kod nie jest pierwszej jakości i może zawierać masę błędów ponieważ pisałem go w pośpiechu i jestem za leniwy, aby mu się przyglądać Pozdrawiam! PS oczywiście u mnie działa poprawnie przynajmniej tak mi się wydaje Link do komentarza Udostępnij na innych stronach More sharing options...
gong Napisano Maj 10, 2008 Autor Zgłoś Share Napisano Maj 10, 2008 Ja napisałem wcześniej rozwiązanie bez flagi EXPLORER może się komuś przyda..natomiast rozwiązania najlepszego nadal nie mam... To tylko analiza stringa i wysyłąnie nazw plków do ListBoxa..przy czym w linii jest pełna ścieżka do katalogu...a dalej wybrane pliki. int n=0; string list[10]; path2files(str,list,n); FILE *plik=NULL; fopen_s(&plik,"test.txt","w"); for (int i=0;i<n;i++) { SendMessageA(lb01, LB_ADDSTRING, 0, (LPARAM)list[i].c_str()); fprintf (plik, "path: %s\n", list[i].c_str()); } void path2files(char *str,string list[],int &z) { static int n=0; while (pos>0) { char *bufer=new char[256]; pos=str1.find(' ',0); int len=str1.copy(bufer,pos,1); bufer[len]=''; list[n]=bufer; str1.erase(1,pos); delete[] bufer; n++; } z=n; }; Aha no i nadal nie wiem jak przejść do nowego wiersza w MULTIEDICIE...np chce zapisac 2 stringi w 2 linijkach Editu...to jest zdecydowanie prostsze..już zacząłem szukać..ale jakby ktoś pamiętał...z góry dziękuje... Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Maj 10, 2008 Zgłoś Share Napisano Maj 10, 2008 Masz to wyżej, sprawdź! Link do komentarza Udostępnij na innych stronach More sharing options...
gong Napisano Maj 10, 2008 Autor Zgłoś Share Napisano Maj 10, 2008 OK...dzięki pozdrwaiam Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.