File Open Dialog nur für Ordner

Habe viel versucht. Muß eigendlich auch richtig sein, da ich bis dieser Dialog beendet ist auf dem Haupt-Dialog nichts machen kann.

Versucht habe ich u.a.:

browseInfo.hwndOwner = GetSafeHwnd( ) ;
browseInfo.hwndOwner = AfxGetApp()->m_pMainWnd->m_hWnd;


Noch was: Alt-Taste reicht, dann ist es vorne:

Gruß Robert
 
Zuletzt bearbeitet:
Habe festgestellt, das dies ein grundsätzliches Problem ist. Selbst eine einfache MessageBox bleibt im Hintergrund.

In anderen Projekten ist das nicht der F all. Also habe ich dort etwas verbockt.:confused:

In dem Dialog habe ich ein CStatic mit einem OpenGl-Fenster lasse ich das nicht erzeugen geht alles klar.

Code:
void COpenGLControl::Create( CRect rect, CWnd* pParentWnd) 
{		
	int BackBufferWidth  = GetSystemMetrics(SM_CXSCREEN);
	rect.right=BackBufferWidth-9;
	nVerhaeltnis=(float)(rect.right - rect.left)/(float)(rect.bottom-rect.top);
	CString className = AfxRegisterWndClass(
		CS_HREDRAW | CS_VREDRAW | CS_OWNDC,
		NULL,
		(HBRUSH)GetStockObject(BLACK_BRUSH),
		NULL);

	CreateEx(
		0,
		className,
		"OpenGL",
		WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
		rect,
		pParentWnd,
		0);
	pParentWnd, nID, pContext);
}
 
Zuletzt bearbeitet:
Es ist zwar schon etwas her, habe das Problem jetzt gelößt. Sollte jemand auch mal solche Schwierigkeiten haben:

Vorher: openGLControl.ShowWindow(SW_HIDE);
Nachher: openGLControl.ShowWindow(SW_SHOW);

Ist zwar eine Krücke, aber es funktioniert.

Gruß Robert
 
Zuletzt bearbeitet:
Ich kann mich nur wundern, dass man für solch eine Standard-Funktion ein Extra-Programm schreiben muss. Microsoft könnte dem GetOpenFileName() doch ein GetOpenDirectoryName() beilegen. :confused:
 
Hallo,

ich habe ein kleine Problem der hier genannten Lösung. Soweit funktioniert alles, aber ich möchte gerne abfragen, ob ich überhaupt Schreib- und Leserechte auf das Verzeichnis habe, das ich mit dem Dialog auswähle.

Wie mache ich das?

Code:
	static BROWSEINFO bi;	
	TCHAR				 szPath[MAX_PATH];
	LPMALLOC			 lpMalloc;

	bi.hwndOwner      = GetSafeHwnd();					
  	bi.pidlRoot       = NULL; 
  	bi.pszDisplayName = szPath;  
	bi.lpszTitle      = "Bitte wählen Sie das Zielverzeichnis"; 
  	bi.ulFlags        = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
  	bi.lpfn           = NULL;           
  	bi.lParam         = 0;    
  	bi.iImage         = 0;    

	ITEMIDLIST *pidl;	
	pidl = SHBrowseForFolder(&bi);

	if (pidl)
	{
		if(SHGetPathFromIDList (pidl, szPath)) 
		{
			CStrTargetDirectory = szPath;
			UpdateData(FALSE);

			DirectoryInfo* di = new DirectoryInfo(CStrTargetDirectory);

			if(!di->Exists)
			{
				CButtonIncludeSubdirectories.EnableWindow(FALSE);
				MessageBox("Verzeichnis existiert nicht", "Warnung", MB_OK);
			}
		}
		SHGetMalloc(&lpMalloc);
		lpMalloc->Free(pidl);
	}
 
Zuletzt bearbeitet:
Habs rausgefunden :)

Habe die Attribute jetzt über das DirectoryInfo abgefragt. Hier wird jetzt z.B. gefragt, ob das Verzeichnis eines der Attribute "System", "Schreibgeschützt" oder "Versteckt" gesetzt hat. In dem Fall wird abgebrochen.

Code:
DirectoryInfo* di = new DirectoryInfo(CStrTargetDirectory);

if((di->Attributes & (FileAttributes::System | FileAttributes::ReadOnly | FileAttributes::Hidden)) != 0)
{
	MessageBox("Zugriff auf das Verzeichnis verweigert", "Warnung", MB_OK);
}
 
Zuletzt bearbeitet:
Zurück