<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ordner wählen mit fester Startposition des Dialoges]]></title><description><![CDATA[<p>Ok, mir ist kein passender Titel eingefallen, aber es geht im Wesentlichen<br />
darum den Pfad &quot;d:\testdateien\north&quot; anzeigen zu lassen.<br />
Der User soll einen der Ordner darunter auswählen können<br />
(z.B. d:\testdateien\north\max-muster).</p>
<p>Mein Problem an der Sache ist, dass ich nur CSIDL verwenden kann,<br />
aber eigentlich den obigen Pfad als Startposition des &quot;Ordner-suchen&quot;-<br />
Dialoges vorgeben muss.</p>
<p>Ich muss scheinbar eine Alternative zu SHGetSpecialFolderLocation finden.<br />
Aber welche, damit es noch mit pidlRoot harmoniert (LPCITEMIDLIST)?</p>
<pre><code class="language-cpp">BROWSEINFO bi;
	ZeroMemory(&amp;bi, sizeof(BROWSEINFO));
	TCHAR szDiplayName[MAX_PATH];
	ZeroMemory(szDiplayName, MAX_PATH);
	LPITEMIDLIST lpStartFolder = NULL;
	SHGetSpecialFolderLocation(GetSafeHwnd(), 0, &amp;lpStartFolder);

	bi.hwndOwner = GetSafeHwnd();
//	bi.lpfn = BrowseCallbackProc;
	bi.pszDisplayName = szDiplayName;
	bi.lpszTitle = _T(&quot;Ordner wählen:&quot;);
	bi.ulFlags = BIF_VALIDATE|BIF_USENEWUI|BIF_NEWDIALOGSTYLE;
	bi.pidlRoot = lpStartFolder;

	LPITEMIDLIST pIDList = SHBrowseForFolder(&amp;bi);
	LPMALLOC pMalloc = NULL;
	SHGetMalloc(&amp;pMalloc);

	if(pIDList != NULL){
		SHGetPathFromIDList(pIDList, m_csLocation.GetBuffer(MAX_PATH));
		m_csLocation.ReleaseBuffer();
		pMalloc-&gt;Free(pIDList);
	}

	pMalloc-&gt;Free(lpStartFolder);
	pMalloc-&gt;Release();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/206655/ordner-wählen-mit-fester-startposition-des-dialoges</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 08:39:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206655.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Feb 2008 11:23:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ordner wählen mit fester Startposition des Dialoges on Wed, 27 Feb 2008 11:23:01 GMT]]></title><description><![CDATA[<p>Ok, mir ist kein passender Titel eingefallen, aber es geht im Wesentlichen<br />
darum den Pfad &quot;d:\testdateien\north&quot; anzeigen zu lassen.<br />
Der User soll einen der Ordner darunter auswählen können<br />
(z.B. d:\testdateien\north\max-muster).</p>
<p>Mein Problem an der Sache ist, dass ich nur CSIDL verwenden kann,<br />
aber eigentlich den obigen Pfad als Startposition des &quot;Ordner-suchen&quot;-<br />
Dialoges vorgeben muss.</p>
<p>Ich muss scheinbar eine Alternative zu SHGetSpecialFolderLocation finden.<br />
Aber welche, damit es noch mit pidlRoot harmoniert (LPCITEMIDLIST)?</p>
<pre><code class="language-cpp">BROWSEINFO bi;
	ZeroMemory(&amp;bi, sizeof(BROWSEINFO));
	TCHAR szDiplayName[MAX_PATH];
	ZeroMemory(szDiplayName, MAX_PATH);
	LPITEMIDLIST lpStartFolder = NULL;
	SHGetSpecialFolderLocation(GetSafeHwnd(), 0, &amp;lpStartFolder);

	bi.hwndOwner = GetSafeHwnd();
//	bi.lpfn = BrowseCallbackProc;
	bi.pszDisplayName = szDiplayName;
	bi.lpszTitle = _T(&quot;Ordner wählen:&quot;);
	bi.ulFlags = BIF_VALIDATE|BIF_USENEWUI|BIF_NEWDIALOGSTYLE;
	bi.pidlRoot = lpStartFolder;

	LPITEMIDLIST pIDList = SHBrowseForFolder(&amp;bi);
	LPMALLOC pMalloc = NULL;
	SHGetMalloc(&amp;pMalloc);

	if(pIDList != NULL){
		SHGetPathFromIDList(pIDList, m_csLocation.GetBuffer(MAX_PATH));
		m_csLocation.ReleaseBuffer();
		pMalloc-&gt;Free(pIDList);
	}

	pMalloc-&gt;Free(lpStartFolder);
	pMalloc-&gt;Release();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1463871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463871</guid><dc:creator><![CDATA[Shell32off]]></dc:creator><pubDate>Wed, 27 Feb 2008 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Ordner wählen mit fester Startposition des Dialoges on Wed, 27 Feb 2008 12:54:29 GMT]]></title><description><![CDATA[<p>Rudimentär:</p>
<pre><code class="language-cpp">SHGetDesktopFolder(&amp;psf); 
psf-&gt;ParseDisplayName(NULL,NULL,root,NULL,&amp;pidl,NULL); 
bi.pidlRoot = pidl; 
pidl = SHBrowseForFolder(&amp;bi);
</code></pre>
<p>pidls und andere Zeiger aber auch bitte wieder freigeben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463975</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 27 Feb 2008 12:54:29 GMT</pubDate></item></channel></rss>