• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

SHBrowseForFolder产生的对话框的标题怎么设定?

afantict 2008-11-25 04:17:48
因为要做成多语言的版本,我要自己指定这个标题。
...全文
136 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
afantict 2008-11-26
刚来上班
谢谢大伙回复
先试一下啊
回复
cnzdgs 2008-11-25
定义一个回调函数,在BFFM_INITIALIZED时用SetWindowText设置。
回复
ilovedrv 2008-11-25
处理回调函数的BFFM_INITIALIZED

调用 ::SetWindowText(hwnd, pDlg->m_lpszCaption);
回复
ilovedrv 2008-11-25

int CALLBACK CPathDialog::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam, LPARAM pData)
{
CPathDialog* pDlg = (CPathDialog*)pData;

switch(uMsg)
{
case BFFM_INITIALIZED:
{
// RECT rc;
// HWND hEdit;
// HFONT hFont;

pDlg->m_hWnd = hwnd;

if(pDlg->m_lpszCaption!=NULL)
{
::SetWindowText(hwnd, pDlg->m_lpszCaption);
}

VERIFY(pDlg->m_PathDialogSub.SubclassWindow(hwnd));
::ShowWindow(::GetDlgItem(hwnd, IDC_STATUSTEXT), SW_HIDE);
/* ::GetWindowRect(::GetDlgItem(hwnd, IDC_FOLDERTREE), &rc);
rc.bottom = rc.top - 4;
rc.top = rc.bottom - 23;
::ScreenToClient(hwnd, (LPPOINT)&rc);
::ScreenToClient(hwnd, ((LPPOINT)&rc)+1);
hEdit = ::CreateWindowEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T(""),
WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_AUTOHSCROLL,
rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
hwnd, NULL, NULL, NULL);
::SetWindowLong(hEdit, GWL_ID, IDC_NEW_EDIT_PATH);
::ShowWindow(hEdit, SW_SHOW);

hFont = (HFONT)::SendMessage(hwnd, WM_GETFONT, 0, 0);
::SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); */

LPCTSTR lpszPath = pDlg->m_lpszInitialPath;
TCHAR szTemp[MAX_PATH];
if(lpszPath==NULL || !CFileFinder::IsDirExist(lpszPath) )
{
::GetCurrentDirectory(MAX_PATH, szTemp );
lpszPath = szTemp;
}
// WParam is TRUE since you are passing a path.
// It would be FALSE if you were passing a pidl.
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,
(LPARAM)lpszPath);
break;
}
case BFFM_SELCHANGED:
{
char szSelection[MAX_PATH];
if(!::SHGetPathFromIDList((LPITEMIDLIST)lParam, szSelection) ||
szSelection[1]!=':')
{
szSelection[0] = '\0';
::SendMessage(hwnd, BFFM_ENABLEOK, 0, FALSE);
}
else
{
::SendMessage(hwnd, BFFM_ENABLEOK, 0, TRUE);
}
::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szSelection);
// ::SetWindowText(::GetDlgItem(hwnd, IDC_NEW_EDIT_PATH), szSelection);
break;
}
case BFFM_VALIDATEFAILED:
{
CString str((LPCTSTR)lParam);
break;
}
default:
break;
}
return 0;
}
回复
zzz822163 2008-11-25
[Quote=引用 4 楼 chehw 的回复:]
如果是对话框标题栏的标题,试一下自定义BrowseCallbackProc,
处理BFFM_INITIALIZED消息, 用SetWindowText(hWnd, szTitle); 来设置.
[/Quote]
就这样哈
static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);

int CALLBACK CcsdndialogDlg::BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if ( uMsg == BFFM_INITIALIZED)
::SetWindowText(hwnd, "Select A Folder");
return 0;
}

void CcsdndialogDlg::OnBnClickedButton3()
{
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.ulFlags=BIF_BROWSEINCLUDEFILES;
bi.lpszTitle="hahaha";
bi.lpfn=BrowseCallbackProc;
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
TCHAR * path = new TCHAR[MAX_PATH];
if(pidl != NULL)
{
SHGetPathFromIDList(pidl,path);
// MessageBox(NULL,path,TEXT("Choose"),MB_OK);
if(SUCCEEDED(SHGetMalloc(&pMalloc)))//
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
else
{
//MessageBox(NULL,TEXT("选择为空"),TEXT("Choose"),MB_OK);
}
delete path;//
}
回复
chehw 2008-11-25
如果是对话框标题栏的标题,试一下自定义BrowseCallbackProc,
处理BFFM_INITIALIZED消息, 用SetWindowText(hWnd, szTitle); 来设置.
回复
孤客天涯 2008-11-25
同意1楼的
BROWSEINFO bi;
char buffer[MAX_PATH];
ZeroMemory(buffer, MAX_PATH);
bi.hwndOwner =GetSafeHwnd();
bi.pidlRoot = NULL;
//bi.pszDisplayName =LPWSTR(buffer);//NULL;
bi.pszDisplayName = buffer;//NULL;
bi.lpszTitle = NULL; //这里你指定标题就行了
bi.ulFlags =BIF_BROWSEFORCOMPUTER && BIF_RETURNONLYFSDIRS;
bi.lpfn =NULL;
bi.lParam =0;//NULL;
bi.iImage = 0;

LPITEMIDLIST pidl = NULL;
BOOL bSuccess=FALSE;

if(pidl = SHBrowseForFolder(&bi))
回复
afantict 2008-11-25
lpszTitle不是标题,我看过msdn了,也试过。

回复
KeSummer 2008-11-25
它的参数
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

里面的lpszTitle就是标题了。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-11-25 04:17
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……