作者shoaming (修明)
看板Programming
标题[问题]设定起始资料路径 SHBrowseForFolder
时间Tue Mar 13 11:59:18 2012
请问板上的大大们,我想用SHBrowseForFolder打开Folder browser。
但是,我想要设定起始的目录,
因此用BrowseCallbackProc去收BFFM_INITIALIZED将lpData的值做起始路径
下面的程式码在VS2003,无法成功设定起始资料夹。
但,在VS2005却是可以。
有板上的大大们,知道为什麽吗?
下面是我的程式码
static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
{
if (NULL != lpData)
{
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
}
}break;
}
return 0; // The function should always return 0.
}
void CSHBrowser2003Dlg::OnBnClickedOk()
{
wchar_t path[MAX_PATH] = {0};
// TODO: Add your control notification handler code here
BROWSEINFOW info;
ZeroMemory(&info, sizeof(BROWSEINFO));
info.hwndOwner = NULL;
info.lpszTitle = L"Try it";
info.ulFlags = BIF_NEWDIALOGSTYLE | BIF_VALIDATE | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;
info.lpfn = BrowseCallbackProc;
info.lParam = (LPARAM) L"C:\Users\Public\Videos";
LPITEMIDLIST pidl;
if ((pidl = ::SHBrowseForFolderW(&info)) != NULL)
{
LPMALLOC pMalloc;
//Retrieve a pointer to the shell's IMalloc interface
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
// free the PIDL that SHBrowseForFolder returned to us.
pMalloc->Free(pidl);
// release the shell's IMalloc interface
(void)pMalloc->Release();
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.50.53.228