设置文件夹对话框中的默认焦点

#include <tchar.h>
#include <windows.h>
#include <shlobj.h>

int CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
{
if (lpData)
{
SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData);
}

HWND hWndTree = FindWindowEx(hWnd, NULL, _T("SysTreeView32"), NULL);
if (!hWndTree)
hWndTree = FindWindowEx(hWnd, NULL, _T("SHBrowseForFolder ShellNameSpace Control"), NULL);
if (hWndTree)
PostMessage(hWnd, WM_NEXTDLGCTL, (WPARAM)hWndTree, 1L);

HWND hWndCaption = FindWindowEx(hWnd, NULL, _T("STATIC"), NULL);
if (hWndCaption)
{
SetWindowText(hWndCaption, _T("Please select folder"));
}
}

break;

case BFFM_SELCHANGED:
{
TCHAR szDir[MAX_PATH * sizeof(TCHAR)] = {0};

BOOL bRet = SHGetPathFromIDList((LPITEMIDLIST) lParam, szDir);
if (bRet)
{
bRet = (_taccess(szDir, 0) == 0);
}

if (!bRet)
{
EnableWindow(GetDlgItem(hWnd, IDOK), FALSE);
}
}

break;
}

return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);

BROWSEINFO bi = {0};
TCHAR szPath[MAX_PATH] = _T("C:\WINDOWS");
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_BROWSEFORCOMPUTER | BIF_RETURNONLYFSDIRS;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM)(LPCTSTR)szPath;

LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl)
{
TCHAR szFolder[MAX_PATH * sizeof(TCHAR)] = {0};

if (SHGetPathFromIDList(pidl, szFolder))
MessageBox(NULL, szFolder, _T("Selected Folder"), NULL);

CoTaskMemFree(pidl);
}

CoUninitialize();

return 0;
}

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注