📄 filedlghelper.cpp
字号:
////////////////////////////////////////////////////////////////
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual C++ 6.0 for Windows XP and probably Windows 2000 too.
//
#include "StdAfx.h"
#include "FileDlgHelper.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////
// test whether pathname is directory
//
static BOOL IsFolder(LPCTSTR pathname)
{
struct _stat st;
return _stat(pathname, &st)==0 && (st.st_mode & _S_IFDIR);
}
CFileDlgHelper::CFileDlgHelper()
{
}
CFileDlgHelper::~CFileDlgHelper()
{
}
//////////////////
// Initialize: subclass appropriate windows
//
void CFileDlgHelper::Init(CFileDialog* pDlg)
{
// cubclass dialog
ASSERT(pDlg);
m_pDlg = pDlg;
m_dlghook.HookWindow(pDlg);
// subclass dialog's owner/parent
CWnd* pWnd = pDlg->GetParent();
ASSERT(pWnd);
pWnd = pWnd->GetParent();
ASSERT(pWnd);
m_ownerhook.Init(pWnd, pDlg);
// hook up
m_dlghook.m_pHelper = this;
m_ownerhook.m_pHelper = this;
}
//////////////////
// Get name of item -- what you see in the list control
//
CString CFileDlgHelper::GetItemName(int i)
{
return GetListCtrl()->GetItemText(i,0);
}
//////////////////
// Find out if item is a folder.
//
BOOL CFileDlgHelper::IsItemFolder(int i)
{
// Concatenate current folder name with item name to get full path name.
// This won't work in general--the item could be a link or shell
// object--but then IsFolder returns FALSE anyway, correctly.
//
CString path = m_pDlg->GetFolderPath();
int len = path.GetLength();
if (len==0 || path[len-1] != '\\')
path += '\\';
path += GetItemName(i);
return IsFolder(path);
}
//////////////////
// Get underlying list control
//
CListCtrl* CFileDlgHelper::GetListCtrl()
{
ASSERT(m_pDlg);
CWnd* pWnd = m_pDlg->GetParent()->GetDlgItem(lst2);
ASSERT(pWnd);
CListCtrl* plc = (CListCtrl*)pWnd->GetDlgItem(1);
ASSERT(plc);
#ifdef DEBUG
char classname[32];
::GetClassName(plc->m_hWnd, classname, sizeof(classname));
ASSERT(strcmp(classname,"SysListView32")==0);
#endif
return plc;
}
//////////////////
// virtual window proc to trap dialog messages
//
LRESULT CFileDialogHook::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
{
if (msg==WM_COMMAND || msg==WM_NOTIFY) {
m_pHelper->m_bUpdateUI = TRUE;
}
return CSubclassWnd::WindowProc(msg, wp, lp);
}
void CFileDialogOwnerHook::Init(CWnd* pOwner, CFileDialog* pDlg)
{
HookWindow(pOwner);
m_pDlg = pDlg;
m_hwndParent = pDlg->GetParent()->m_hWnd;
ASSERT(m_hwndParent);
}
//////////////////
// virtual window proc to trap dialog parent messages
//
LRESULT CFileDialogOwnerHook::WindowProc(UINT msg,
WPARAM wp, LPARAM lp)
{
if (msg==WM_ENTERIDLE && (HWND)lp==m_hwndParent) {
if (m_pHelper->m_bUpdateUI) {
m_pDlg->UpdateDialogControls(m_pDlg, FALSE);
m_pHelper->m_bUpdateUI=FALSE;
}
}
return CSubclassWnd::WindowProc(msg, wp, lp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -