Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VC++ - GetOpenFileName nece da radi.

[es] :: C/C++ programiranje :: VC++ - GetOpenFileName nece da radi.

[ Pregleda: 2228 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

neb
RS

Član broj: 30960
Poruke: 463
62.108.111.*



+1 Profil

icon VC++ - GetOpenFileName nece da radi.14.05.2006. u 10:44 - pre 218 meseci
Izvorni kod koji saljem je deo MSFN dokumentacije
uspesno se kompajlira bez gresaka
ali kada pokusam da izvrsim donju krajnju funkciju
GetOpenFileName
ona javlja da nije uspesno izvrsena
file dialog prozor se ne otvara

kod koji sam isprobao izgleda ovako

Platform SDK: Windows User Interface
Opening a File
Code:

{
OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
        0, (LPSECURITY_ATTRIBUTES) NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        (HANDLE) NULL);
}

 
Odgovor na temu

nikoladsp
nikola radovanovic
trenutno-developer
novi sad

Član broj: 5455
Poruke: 193
*.ADSL.neobee.net.



Profil

icon Re: VC++ - GetOpenFileName nece da radi.24.05.2006. u 09:04 - pre 218 meseci
cao.
pretpostavljam da ti treba putanja do fajla pomocu open/save dijaloga?ako je to tacno, ovo ce ti uraditi posao:

Code:

LPCTSTR lpszFilter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*||";
DWORD dwStyle = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT ;

CFileDialog dialog(TRUE, NULL, NULL, dwStyle, lpszFilter, this);
if (dialog.DoModal() == IDOK)
{                
  CString strPath = dialog.m_ofn.lpstrFile; // putanja do odabranog fajla
  
  // dalja obrada... 
}


ps. ovo je za open file dijalog; za save file dijalog izmena je

Code:

//...
CFileDialog dialog(FALSE, NULL, NULL, dwStyle, lpszFilter, this); // FALSE-jedina izmena
//...

ja sam panker sa diplomom kod moje mame...
 
Odgovor na temu

neb
RS

Član broj: 30960
Poruke: 463
62.108.117.*



+1 Profil

icon Re: VC++ - GetOpenFileName nece da radi.25.05.2006. u 08:27 - pre 217 meseci
Probacu pa cu javiti ako bude bilo problema.

Hvala.
 
Odgovor na temu

neb
RS

Član broj: 30960
Poruke: 463
62.108.117.*



+1 Profil

icon Re: VC++ - GetOpenFileName nece da radi.25.05.2006. u 10:38 - pre 217 meseci
Uradio sam i dialog je uspesno otvoren?

Zasto moj kod koji sam naveo nije bio ispravan tj. nije radio
uzet je bukvalno "copy/paste" iz MSDN dokumentacije?
 
Odgovor na temu

nikoladsp
nikola radovanovic
trenutno-developer
novi sad

Član broj: 5455
Poruke: 193
*.ADSL.neobee.net.



Profil

icon Re: VC++ - GetOpenFileName nece da radi.25.05.2006. u 15:20 - pre 217 meseci
to stvarno ne bih znao.
pretpostavljam da moze biti zbog 2 stvari:
1. los handle na window (vidim da si koristio hwnd- dali si ga inicijalizovao?)
2. cini mi se da ti string za filtere nije dobar.

morao bih pokusati to da uradim kod sebe (gledacu danas-sutra da to uradim).

ako mozes da koristis MFC/ATL/WTL preporucio bih ti da koristis onaj kod sto sam ti ostavio, ako ne nesto cemo namuljati sa onim tvojim.

pozdrav.

ja sam panker sa diplomom kod moje mame...
 
Odgovor na temu

nikoladsp
nikola radovanovic
trenutno-developer
novi sad

Član broj: 5455
Poruke: 193
*.ADSL.neobee.net.



Profil

icon Re: VC++ - GetOpenFileName nece da radi.25.05.2006. u 15:44 - pre 217 meseci
zaboravio si jedan red:


Code:


//...
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';  // <------------- Ovaj red fali
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All Files (*.*)";
//...


sada bi posle uspesnog otvaranja fajla trebalo da mozes da imas pristup fajlu preko hf, samo ne zaboravi da ga zatvoris kada ti ne bude trebao. takodje inicijalizuj hwnd-za svaki slucaj ne verujem da nisi dobro uradio copy-paste, pa pretpostavljam da je greska u dokumentaciji, ako si iz blizine Novog Sada mogu ti narezati MSDN iz dec. 2005 na jedan DVD samo mi posalji emajl na [email protected]

pozdrav.
nikola
ja sam panker sa diplomom kod moje mame...
 
Odgovor na temu

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: VC++ - GetOpenFileName nece da radi.27.05.2006. u 13:22 - pre 217 meseci
@neb : Primer iz MSDN dokumentacije je dobar, samo ti je potrebno da hWnd bude validan handle do prozora. Oni u svakom primeru stavljaju takve promenljive, tj. kao lokalne čisto zbog formalnosti, a time podrazumevaju da je taj hanlde već alociran i validan.

Ono što ti ja prelažem da uradiš je sledeće :
Code:

// gore si inicirao ofn i sada ovo ...
if (!GetOpenFileName(&ofn)){
  DWORD dwError = ComDlgExtendedError();
  if (dwError != 0){  // ako korisnik nije pritisnuo Cancel dugme
    LPVOID lpMsg = NULL;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
      NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPTSTR)&lpMsg, 0, NULL);
    MessageBox(0, (LPCTSTR)lpMsg, "Greška", MB_OK);
    LocalFree((HLOCAL)lpMsg):
    return FALSE;
  }
}
// ovde otvori fajl...

Dakle, ako GetOpenFileName vrati grešku, izbaciće ti tačno poruku o tome šta je pri njenom izvršavanju pošlo naopako. U MSDN dokumentaciji imaš čitav spisak povratnih vrednosti Common Dialog funkcija.
Obično je to pogrešno inicirana ofn promenljiva.

Ja sam recimo koristio ovakav kod :
Code:

HWND hMojGlavniProzor;  // globalna
//....
LPCTSTR szOpenFileExtensions = \
"C/C++ Files ( *.c,*.cpp, *.cxx )\0*.c;*.cpp;*.cxx\0"
"Header Files ( *.h, *.hpp )\0*.h;*.hpp\0"
"All Files\0*.*\0";
{
  static char FileName[MAX_PATH]; 
  static char FileNameShort[MAX_PATH/4];
  static char FileDir[MAX_PATH];
  
  OPENFILENAME ofn;
  WORD nFileOffset = 0;
  WORD nFilterIndex = 1;
  
  ZeroMemory(&ofn, sizeof(ofn));
  
  char szCaption[MAX_LOADSTRING];
  ZeroMemory(szCaption, sizeof(szCaption));
  LoadString(hMojProgram, IDS_STRING_OPENDIALOGTITLE, szCaption, MAX_LOADSTRING);
  
  ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
  ofn.hwndOwner = hMojGlavniProzor;
#if (_WIN32_WINNT >= 0x0500)
  ofn.FlagsEx = OFN_EX_NOPLACESBAR;
#endif
  ofn.lpstrFileTitle = FileNameShort;
  ofn.lpstrFile = FileName;
  ofn.lpstrInitialDir = FileDir;
  ofn.lpstrTitle = szCaption;
  ofn.lStructSize = sizeof(ofn);
  ofn.nFileOffset = nFileOffset;
  ofn.nFilterIndex = nFilterIndex;
  ofn.nMaxFile = MAX_PATH;
  ofn.nMaxFileTitle = MAX_PATH/4;
  ofn.lpstrFilter = szOpenFileExtensions;
  
  if (!GetOpenFileName(&ofn)) //.......
}

With no lovin' in our souls and no money in our coats you can't say we're satisfied
 
Odgovor na temu

neb
RS

Član broj: 30960
Poruke: 463
*.co.yu
Via: [es] mailing liste



+1 Profil

icon Re: VC++ - GetOpenFileName nece da radi.27.05.2006. u 18:47 - pre 217 meseci
>
>

Za sada sve radi
kako treba
videcu sta cu
ako se ponovo
desi novi
problem.

Kod koji si
poslao cu
pregledati i
razmisliti.

Ipak hvala na
ovoliko
ponudjenih
odgovora.
 
Odgovor na temu

[es] :: C/C++ programiranje :: VC++ - GetOpenFileName nece da radi.

[ Pregleda: 2228 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.