📄 folderdialogstatustext.h
字号:
#ifndef __FolderDialogStatusText_h__
#define __FolderDialogStatusText_h__
#pragma once
#ifndef __cplusplus
#error ATL requires C++ compilation (use a .cpp suffix)
#endif
#ifndef __ATLAPP_H__
#error FolderDialogStatusText.h requires atlapp.h to be included first
#endif
#ifndef __ATLWIN_H__
#error FolderDialogStatusText.h requires atlwin.h to be included first
#endif
#ifndef __ATLWIN_H__
#error FolderDialogStatusText.h requires atlwin.h to be included first
#endif
#ifndef __ATLDLGS_H__
#error FolderDialogStatusText.h requires atldlgs.h to be included first
#endif
class CFolderDialogStatusText :
public CFolderDialogImpl<CFolderDialogStatusText>
{
protected:
// Typedefs
typedef CFolderDialogImpl<CFolderDialogStatusText> baseClass;
public:
// Enumerations
enum DialogIds
{
// NOTE: Dialog IDs found using SPY++
_IDC_STATUSTEXT = 0x00003741,
_IDC_TITLE = 0x00003742,
};
// Constructor
CFolderDialogStatusText(HWND hWndParent = NULL, LPCTSTR lpstrTitle = NULL, UINT uFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT)
: baseClass(hWndParent, lpstrTitle, uFlags)
{
}
// Overrides from base class
void OnInitialized()
{
// NOTE: We compensate for the issue where BIF_STATUSTEXT
// isn't honored if BIF_NEWDIALOGSTYLE is present.
// Some would say its a bug, some would say its by design...
if((m_bi.ulFlags & BIF_NEWDIALOGSTYLE) == BIF_NEWDIALOGSTYLE &&
(m_bi.ulFlags & BIF_STATUSTEXT) == BIF_STATUSTEXT)
{
int fontHeight = 11; // 8 point Tahoma at 96 DPI
CWindow title = ::GetDlgItem(m_hWnd, _IDC_TITLE);
RECT rcTitle = {0};
if(title)
{
CFontHandle titleFont = title.GetFont();
CLogFont logFont;
titleFont.GetLogFont(logFont);
if(logFont.lfHeight < 0)
fontHeight = -1*logFont.lfHeight;
title.GetWindowRect(&rcTitle);
::MapWindowPoints(NULL, title.GetParent(), (LPPOINT)&rcTitle, 2);
rcTitle.top -= 1;
rcTitle.bottom -= fontHeight + 1;
title.SetWindowPos(NULL, &rcTitle, (SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW));
}
CWindow status = ::GetDlgItem(m_hWnd, _IDC_STATUSTEXT);
if(status)
{
status.EnableWindow(TRUE);
status.ModifyStyle(0,SS_PATHELLIPSIS|SS_NOPREFIX);
rcTitle.top = rcTitle.bottom + 2;
rcTitle.bottom = rcTitle.top + fontHeight + (fontHeight/2);
status.SetWindowPos(NULL, &rcTitle, (SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW));
}
// NOTE: We'd really like to have the status window resize appropriately
// when the dialog resizes, but currently that doesn't happen.
}
}
void OnSelChanged(LPITEMIDLIST pItemIDList)
{
if((m_bi.ulFlags & BIF_STATUSTEXT) == BIF_STATUSTEXT)
{
TCHAR sNewFolder[MAX_PATH+1] = {0};
if(::SHGetPathFromIDList(pItemIDList,sNewFolder))
{
if((m_bi.ulFlags & BIF_NEWDIALOGSTYLE) == BIF_NEWDIALOGSTYLE)
::SetDlgItemText(m_hWnd, _IDC_STATUSTEXT, sNewFolder);
else
this->SetStatusText(sNewFolder);
}
}
}
};
#endif // __FolderDialogStatusText_h__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -