799 lines
19 KiB
C
799 lines
19 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
||
|
//
|
||
|
// File: uiutil.h
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// UIUtil.h
|
||
|
//
|
||
|
// HISTORY
|
||
|
// 08-Nov-99 JeffJon Creation.
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef __UIUTIL_H_
|
||
|
#define __UIUTIL_H_
|
||
|
|
||
|
#include "resource.h"
|
||
|
|
||
|
#include <htmlhelp.h>
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// Forward Declarations
|
||
|
//
|
||
|
class CDSComponentData;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CHelpDialog
|
||
|
|
||
|
class CHelpDialog : public CDialog
|
||
|
{
|
||
|
// Construction
|
||
|
public:
|
||
|
CHelpDialog(UINT uIDD, CWnd* pParentWnd);
|
||
|
CHelpDialog(UINT uIDD);
|
||
|
~CHelpDialog();
|
||
|
|
||
|
protected:
|
||
|
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
virtual void DoContextHelp (HWND hWndControl);
|
||
|
afx_msg void OnWhatsThis();
|
||
|
afx_msg BOOL OnHelp(WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
private:
|
||
|
HWND m_hWndWhatsThis;
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CHelpPropertyPage
|
||
|
|
||
|
class CHelpPropertyPage : public CPropertyPage
|
||
|
{
|
||
|
// Construction
|
||
|
public:
|
||
|
CHelpPropertyPage(UINT uIDD);
|
||
|
~CHelpPropertyPage();
|
||
|
|
||
|
protected:
|
||
|
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
virtual void DoContextHelp (HWND hWndControl);
|
||
|
afx_msg void OnWhatsThis();
|
||
|
afx_msg BOOL OnHelp(WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
private:
|
||
|
HWND m_hWndWhatsThis;
|
||
|
};
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// CDialogEx
|
||
|
//
|
||
|
class CDialogEx : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
CDialogEx(UINT nIDTemplate, CWnd * pParentWnd = NULL);
|
||
|
HWND HGetDlgItem(INT nIdDlgItem);
|
||
|
void SetDlgItemFocus(INT nIdDlgItem);
|
||
|
void EnableDlgItem(INT nIdDlgItem, BOOL fEnable = TRUE);
|
||
|
void HideDlgItem(INT nIdDlgItem, BOOL fHideItem = TRUE);
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// CPropertyPageEx_Mine
|
||
|
//
|
||
|
class CPropertyPageEx_Mine : public CPropertyPage
|
||
|
{
|
||
|
public:
|
||
|
CPropertyPageEx_Mine(UINT nIDTemplate);
|
||
|
HWND HGetDlgItem(INT nIdDlgItem);
|
||
|
void SetDlgItemFocus(INT nIdDlgItem);
|
||
|
void EnableDlgItem(INT nIdDlgItem, BOOL fEnable = TRUE);
|
||
|
void HideDlgItem(INT nIdDlgItem, BOOL fHideItem = TRUE);
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////////
|
||
|
// Error reporting helpers
|
||
|
//
|
||
|
void ReportError(HRESULT hr, int nStr, HWND hWnd);
|
||
|
|
||
|
//
|
||
|
// The message specified in dwMessageId must be in the DSADMIN module. It may
|
||
|
// contain FormatMessage-style insertion strings. If lpArguments is specified,
|
||
|
// then %1 and up are the arguments specified by lpArguments.
|
||
|
// Return value and fuStyle are the same as for MessageBox.
|
||
|
//
|
||
|
int ReportMessageEx(HWND hWnd,
|
||
|
DWORD dwMessageId,
|
||
|
UINT fuStyle = MB_OK | MB_ICONINFORMATION,
|
||
|
PVOID* lpArguments = NULL,
|
||
|
int nArguments = 0,
|
||
|
DWORD dwTitleId = 0,
|
||
|
LPCTSTR pszHelpTopic = NULL,
|
||
|
MSGBOXCALLBACK lpfnMsgBoxCallback = NULL );
|
||
|
|
||
|
//
|
||
|
// This is like ReportMessageEx except that %1 is the code for the HRESULT, and
|
||
|
// %2 and up are the arguments specified by lpArguments (if any).
|
||
|
//
|
||
|
int ReportErrorEx(HWND hWnd,
|
||
|
DWORD dwMessageId,
|
||
|
HRESULT hr,
|
||
|
UINT fuStyle = MB_OK | MB_ICONINFORMATION,
|
||
|
PVOID* lpArguments = NULL,
|
||
|
int nArguments = 0,
|
||
|
DWORD dwTitleId = 0,
|
||
|
BOOL TryADsIErrors = TRUE);
|
||
|
|
||
|
const INT S_MB_YES_TO_ALL = 0x928L;
|
||
|
int SpecialMessageBox (HWND hwnd,
|
||
|
LPWSTR pwszMessage,
|
||
|
LPWSTR pwszTitle,
|
||
|
DWORD fuStyle = S_MB_YES_TO_ALL);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
// CMultiselectErrorDialog
|
||
|
//
|
||
|
class CMultiselectErrorDialog : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
CMultiselectErrorDialog(CDSComponentData* pComponentData)
|
||
|
: m_pComponentData(pComponentData),
|
||
|
m_pErrorArray(NULL),
|
||
|
m_pPathArray(NULL),
|
||
|
m_ppNodeList(NULL),
|
||
|
m_nErrorCount(0),
|
||
|
m_hImageList(NULL),
|
||
|
CDialog(IDD_MULTISELECT_ERROR_DIALOG) {}
|
||
|
~CMultiselectErrorDialog() {}
|
||
|
|
||
|
HRESULT Initialize(CUINode** ppNodeList,
|
||
|
HRESULT* pErrorArray,
|
||
|
UINT nErrorCount,
|
||
|
PCWSTR pszTitle,
|
||
|
PCWSTR pszCaption,
|
||
|
PCWSTR pszHeader);
|
||
|
|
||
|
HRESULT Initialize(PWSTR* pPathArray,
|
||
|
PWSTR* pClassArray,
|
||
|
HRESULT* pErrorArray,
|
||
|
UINT nErrorCount,
|
||
|
PCWSTR pszTitle,
|
||
|
PCWSTR pszCaption,
|
||
|
PCWSTR pszHeader);
|
||
|
private:
|
||
|
CMultiselectErrorDialog(const CMultiselectErrorDialog&) {}
|
||
|
CMultiselectErrorDialog& operator=(const CMultiselectErrorDialog&) {}
|
||
|
|
||
|
protected:
|
||
|
void UpdateListboxHorizontalExtent();
|
||
|
|
||
|
public:
|
||
|
virtual BOOL OnInitDialog();
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
private:
|
||
|
CDSComponentData* m_pComponentData;
|
||
|
|
||
|
CUINode** m_ppNodeList;
|
||
|
PWSTR* m_pPathArray;
|
||
|
PWSTR* m_pClassArray;
|
||
|
HRESULT* m_pErrorArray;
|
||
|
UINT m_nErrorCount;
|
||
|
CString m_szTitle;
|
||
|
CString m_szCaption;
|
||
|
CString m_szColumnHeader;
|
||
|
|
||
|
HIMAGELIST m_hImageList;
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CProgressDialogBase
|
||
|
//
|
||
|
class CProgressDialogBase : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
static UINT s_nNextStepMessage;
|
||
|
|
||
|
CProgressDialogBase(HWND hParentWnd);
|
||
|
|
||
|
BOOL Aborted() { return !m_bDone; }
|
||
|
void SetStepCount(UINT n)
|
||
|
{
|
||
|
ASSERT(n > 0);
|
||
|
m_nSteps = n;
|
||
|
}
|
||
|
|
||
|
UINT GetStepCount() { return m_nSteps; }
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
UINT m_nTitleStringID;
|
||
|
|
||
|
// overrides
|
||
|
virtual void OnStart()=0;
|
||
|
virtual BOOL OnStep(UINT i)=0;
|
||
|
virtual void OnEnd()=0;
|
||
|
|
||
|
// message handlers
|
||
|
virtual BOOL OnInitDialog();
|
||
|
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
|
||
|
afx_msg void OnClose();
|
||
|
afx_msg LONG OnNextStepMessage( WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
private:
|
||
|
CProgressCtrl m_progressCtrl;
|
||
|
CString m_szProgressFormat;
|
||
|
|
||
|
UINT m_nSteps; // number of steps to perform
|
||
|
UINT m_nCurrStep; // current step, in range m_nSteps, 0
|
||
|
BOOL m_bDone; // TRUE= reached completion
|
||
|
|
||
|
void _SetProgressText();
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////
|
||
|
// CMultipleDeletionConfirmationUI
|
||
|
//
|
||
|
class CMultipleDeletionConfirmationUI
|
||
|
{
|
||
|
public:
|
||
|
CMultipleDeletionConfirmationUI()
|
||
|
{
|
||
|
m_hwnd = NULL;
|
||
|
m_answerall = IDNO;
|
||
|
m_answer = IDNO;
|
||
|
}
|
||
|
|
||
|
void SetWindow(HWND hwnd)
|
||
|
{
|
||
|
ASSERT(hwnd != NULL);
|
||
|
m_hwnd = hwnd;
|
||
|
}
|
||
|
|
||
|
BOOL IsYesToAll() { return (m_answer == IDC_BUTTON_YESTOALL);}
|
||
|
|
||
|
BOOL CanDeleteSubtree(HRESULT hr, LPCWSTR lpszName, BOOL* pbContinue)
|
||
|
{
|
||
|
*pbContinue = TRUE;
|
||
|
if (m_answerall != IDC_BUTTON_YESTOALL)
|
||
|
{
|
||
|
PVOID apv[1] = {(LPWSTR)lpszName};
|
||
|
m_answer = ReportErrorEx (m_hwnd,IDS_12_MULTI_OBJECT_HAS_CHILDREN,hr,
|
||
|
S_MB_YES_TO_ALL | MB_ICONWARNING, apv, 1);
|
||
|
if (m_answer == IDC_BUTTON_YESTOALL)
|
||
|
{
|
||
|
m_answerall = m_answer;
|
||
|
m_answer = IDYES;
|
||
|
}
|
||
|
else if (m_answer == IDCANCEL)
|
||
|
{
|
||
|
m_answer = IDNO;
|
||
|
*pbContinue = FALSE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_answer = IDYES;
|
||
|
}
|
||
|
return m_answer == IDYES;
|
||
|
}
|
||
|
|
||
|
BOOL ErrorOnSubtreeDeletion(HRESULT hr, LPCWSTR lpszName)
|
||
|
{
|
||
|
if (m_answerall == IDC_BUTTON_YESTOALL)
|
||
|
{
|
||
|
return TRUE; // can continue, no need for asking
|
||
|
}
|
||
|
|
||
|
PVOID apv[1] = {(LPWSTR)lpszName};
|
||
|
m_answer = ReportErrorEx (m_hwnd,IDS_12_SUBTREE_DELETE_FAILED,hr,
|
||
|
MB_YESNO | MB_ICONINFORMATION, apv, 1);
|
||
|
|
||
|
if (m_answer == IDNO)
|
||
|
{
|
||
|
return FALSE; // stop deletion process
|
||
|
}
|
||
|
return TRUE; // can continue
|
||
|
}
|
||
|
|
||
|
BOOL ErrorOnDeletion(HRESULT hr, LPCWSTR lpszName)
|
||
|
{
|
||
|
PVOID apv[1] = {(LPWSTR)lpszName};
|
||
|
ReportErrorEx (m_hwnd,IDS_12_DELETE_FAILED,hr,
|
||
|
MB_OK | MB_ICONERROR, apv, 1);
|
||
|
if (m_answer == IDNO)
|
||
|
{
|
||
|
return FALSE; // stop deletion process
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (m_answer == IDC_BUTTON_YESTOALL)
|
||
|
{
|
||
|
m_answerall = m_answer;
|
||
|
}
|
||
|
}
|
||
|
return TRUE; // can continue
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
HWND m_hwnd;
|
||
|
UINT m_answerall;
|
||
|
UINT m_answer;
|
||
|
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
// CMultipleProgressDialogBase
|
||
|
//
|
||
|
|
||
|
class CMultipleProgressDialogBase : public CProgressDialogBase
|
||
|
{
|
||
|
public:
|
||
|
CMultipleProgressDialogBase(HWND hParentWnd, CDSComponentData* pComponentData)
|
||
|
: m_phrArray(NULL),
|
||
|
m_pPathArray(NULL),
|
||
|
m_pClassArray(NULL),
|
||
|
m_nErrorCount(0),
|
||
|
m_pComponentData(pComponentData),
|
||
|
CProgressDialogBase(hParentWnd)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
virtual ~CMultipleProgressDialogBase();
|
||
|
|
||
|
HRESULT AddError(HRESULT hr,
|
||
|
PCWSTR pszPath,
|
||
|
PCWSTR pszClass);
|
||
|
|
||
|
virtual void GetCaptionString(CString& szCaption) = 0;
|
||
|
protected:
|
||
|
virtual void OnEnd();
|
||
|
|
||
|
CDSComponentData* m_pComponentData;
|
||
|
CStringList m_szObjPathList;
|
||
|
private:
|
||
|
//
|
||
|
// Error reporting structures
|
||
|
//
|
||
|
HRESULT* m_phrArray;
|
||
|
PWSTR* m_pPathArray;
|
||
|
PWSTR* m_pClassArray;
|
||
|
UINT m_nErrorCount;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
// CMultipleDeleteProgressDialog
|
||
|
//
|
||
|
class CMultipleDeleteHandlerBase;
|
||
|
|
||
|
class CMultipleDeleteProgressDialog : public CMultipleProgressDialogBase
|
||
|
{
|
||
|
public:
|
||
|
CMultipleDeleteProgressDialog(HWND hParentWnd,
|
||
|
CDSComponentData* pComponentData,
|
||
|
CMultipleDeleteHandlerBase* pDeleteHandler)
|
||
|
: CMultipleProgressDialogBase(hParentWnd, pComponentData)
|
||
|
{
|
||
|
m_pDeleteHandler = pDeleteHandler;
|
||
|
m_hWndOld = NULL;
|
||
|
m_nTitleStringID = IDS_PROGRESS_DEL;
|
||
|
}
|
||
|
|
||
|
virtual void GetCaptionString(CString& szCaption)
|
||
|
{
|
||
|
VERIFY(szCaption.LoadString(IDS_MULTI_DELETE_ERROR_CAPTION));
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
// overrides
|
||
|
virtual void OnStart();
|
||
|
virtual BOOL OnStep(UINT i);
|
||
|
virtual void OnEnd();
|
||
|
|
||
|
private:
|
||
|
CMultipleDeleteHandlerBase* m_pDeleteHandler;
|
||
|
HWND m_hWndOld;
|
||
|
};
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMultipleMoveProgressDialog
|
||
|
//
|
||
|
class CMoveHandlerBase;
|
||
|
|
||
|
class CMultipleMoveProgressDialog : public CMultipleProgressDialogBase
|
||
|
{
|
||
|
public:
|
||
|
CMultipleMoveProgressDialog(HWND hParentWnd,
|
||
|
CDSComponentData* pComponentData,
|
||
|
CMoveHandlerBase* pMoveHandler)
|
||
|
: CMultipleProgressDialogBase(hParentWnd, pComponentData)
|
||
|
{
|
||
|
m_pMoveHandler = pMoveHandler;
|
||
|
m_hWndOld = NULL;
|
||
|
m_nTitleStringID = IDS_PROGRESS_MOV;
|
||
|
}
|
||
|
|
||
|
virtual void GetCaptionString(CString& szCaption)
|
||
|
{
|
||
|
VERIFY(szCaption.LoadString(IDS_MULTI_MOVE_ERROR_CAPTION));
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
// overrides
|
||
|
virtual void OnStart();
|
||
|
virtual BOOL OnStep(UINT i);
|
||
|
virtual void OnEnd();
|
||
|
|
||
|
private:
|
||
|
CMoveHandlerBase* m_pMoveHandler;
|
||
|
HWND m_hWndOld;
|
||
|
};
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
// CMoreInfoMessageBox
|
||
|
//
|
||
|
class CMoreInfoMessageBox : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
CMoreInfoMessageBox(HWND hWndParent, IDisplayHelp* pIDisplayHelp, BOOL bCancelBtn)
|
||
|
: CDialog(bCancelBtn ? IDD_MSGBOX_OKCANCEL_MOREINFO : IDD_MSGBOX_OK_MOREINFO,
|
||
|
CWnd::FromHandle(hWndParent)),
|
||
|
m_spIDisplayHelp(pIDisplayHelp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void SetURL(LPCWSTR lpszURL) { m_szURL = lpszURL;}
|
||
|
void SetMessage(LPCWSTR lpsz)
|
||
|
{
|
||
|
m_szMessage = lpsz;
|
||
|
}
|
||
|
|
||
|
// message handlers and MFC overrides
|
||
|
virtual BOOL OnInitDialog()
|
||
|
{
|
||
|
SetDlgItemText(IDC_STATIC_MESSAGE, m_szMessage);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
afx_msg void OnMoreInfo()
|
||
|
{
|
||
|
TRACE(L"ShowTopic(%s)\n", (LPCWSTR)m_szURL);
|
||
|
HRESULT hr = m_spIDisplayHelp->ShowTopic((LPWSTR)(LPCWSTR)m_szURL);
|
||
|
if( hr != S_OK )
|
||
|
{
|
||
|
HtmlHelp( NULL,
|
||
|
(LPCWSTR)m_szURL,
|
||
|
HH_DISPLAY_TOPIC,
|
||
|
NULL );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
private:
|
||
|
CComPtr<IDisplayHelp> m_spIDisplayHelp;
|
||
|
CString m_szMessage;
|
||
|
CString m_szURL;
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMoveServerDialog
|
||
|
//
|
||
|
class CMoveServerDialog : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
CMoveServerDialog(LPCTSTR lpcszBrowseRootPath, HICON hIcon, CWnd* pParent = NULL);
|
||
|
|
||
|
// Dialog Data
|
||
|
//{{AFX_DATA(CMoveServerDialog)
|
||
|
enum { IDD = IDD_MOVE_SERVER };
|
||
|
CString m_strServer;
|
||
|
//}}AFX_DATA
|
||
|
|
||
|
CString m_strTargetContainer;
|
||
|
CString m_strBrowseRootPath;
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
// message handlers
|
||
|
virtual BOOL OnInitDialog();
|
||
|
virtual void OnOK();
|
||
|
void OnDblclkListview(NMHDR* pNMHDR, LRESULT* pResult) ;
|
||
|
|
||
|
// CWnd overrides
|
||
|
|
||
|
afx_msg
|
||
|
void
|
||
|
OnDestroy();
|
||
|
|
||
|
private:
|
||
|
HICON m_hIcon;
|
||
|
HWND listview;
|
||
|
HIMAGELIST listview_imagelist;
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CConfirmOperationDialog
|
||
|
//
|
||
|
class CDSNotifyHandlerTransaction;
|
||
|
|
||
|
class CConfirmOperationDialog : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CConfirmOperationDialog(HWND hParentWnd, CDSNotifyHandlerTransaction* pTransaction);
|
||
|
void SetStrings(LPCWSTR lpszOperation, LPCWSTR lpszAssocData)
|
||
|
{
|
||
|
m_lpszOperation = lpszOperation;
|
||
|
m_lpszAssocData = lpszAssocData;
|
||
|
}
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
// overrides
|
||
|
|
||
|
// message handlers
|
||
|
virtual BOOL OnInitDialog();
|
||
|
void UpdateListBoxHorizontalExtent();
|
||
|
virtual void OnCancel()
|
||
|
{
|
||
|
EndDialog(IDNO);
|
||
|
}
|
||
|
|
||
|
afx_msg void OnYes();
|
||
|
|
||
|
afx_msg void OnNo()
|
||
|
{
|
||
|
EndDialog(IDNO);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
|
||
|
UINT m_nTitleStringID;
|
||
|
LPCWSTR m_lpszOperation;
|
||
|
LPCWSTR m_lpszAssocData;
|
||
|
|
||
|
CDSNotifyHandlerTransaction* m_pTransaction;
|
||
|
CCheckListBox m_extensionsList;
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
// Name Formating classes
|
||
|
//
|
||
|
// CNameFormatterBase
|
||
|
|
||
|
class CNameFormatterBase
|
||
|
{
|
||
|
private:
|
||
|
|
||
|
class CToken
|
||
|
{
|
||
|
public:
|
||
|
CToken()
|
||
|
{
|
||
|
m_bIsParam = FALSE;
|
||
|
m_nIndex = -1;
|
||
|
}
|
||
|
BOOL m_bIsParam;
|
||
|
INT m_nIndex;
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
CNameFormatterBase()
|
||
|
{
|
||
|
_Init();
|
||
|
}
|
||
|
virtual ~CNameFormatterBase()
|
||
|
{
|
||
|
_Clear();
|
||
|
}
|
||
|
|
||
|
HRESULT Initialize(IN MyBasePathsInfo* pBasePathInfo,
|
||
|
IN LPCWSTR lpszClassName,
|
||
|
IN UINT nStringID);
|
||
|
|
||
|
BOOL Initialize(IN LPCWSTR lpszFormattingString);
|
||
|
|
||
|
void SetMapping(IN LPCWSTR* lpszArgMapping, IN int nArgCount);
|
||
|
void Format(OUT CString& szBuffer, IN LPCWSTR* lpszArgArr);
|
||
|
|
||
|
private:
|
||
|
static HRESULT _ReadFromDS(IN MyBasePathsInfo* pBasePathInfo,
|
||
|
IN LPCWSTR lpszClassName,
|
||
|
OUT CString& szFormatString);
|
||
|
|
||
|
void _Init()
|
||
|
{
|
||
|
m_lpszFormattingString = NULL;
|
||
|
|
||
|
m_tokenArray = NULL;
|
||
|
m_lpszConstArr = NULL;
|
||
|
m_lpszParamArr = NULL;
|
||
|
m_mapArr = NULL;
|
||
|
|
||
|
m_tokenArrCount = 0;
|
||
|
m_constArrCount = 0;
|
||
|
m_paramArrCount = 0;
|
||
|
}
|
||
|
void _Clear()
|
||
|
{
|
||
|
if (m_lpszFormattingString != NULL)
|
||
|
{
|
||
|
delete[] m_lpszFormattingString;
|
||
|
m_lpszFormattingString = 0;
|
||
|
}
|
||
|
if (m_tokenArray != NULL)
|
||
|
{
|
||
|
delete[] m_tokenArray;
|
||
|
m_tokenArray = 0;
|
||
|
m_tokenArrCount = 0;
|
||
|
}
|
||
|
|
||
|
if (m_constArrCount != 0 && m_lpszConstArr)
|
||
|
{
|
||
|
delete[] m_lpszConstArr;
|
||
|
m_lpszConstArr = 0;
|
||
|
m_constArrCount = 0;
|
||
|
}
|
||
|
|
||
|
if (m_paramArrCount != 0 && m_lpszParamArr)
|
||
|
{
|
||
|
delete[] m_lpszParamArr;
|
||
|
m_lpszParamArr = 0;
|
||
|
m_paramArrCount = 0;
|
||
|
}
|
||
|
|
||
|
if (m_mapArr != NULL)
|
||
|
{
|
||
|
delete[] m_mapArr;
|
||
|
m_mapArr = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void _AllocateMemory(LPCWSTR lpszFormattingString);
|
||
|
|
||
|
LPWSTR m_lpszFormattingString;
|
||
|
|
||
|
|
||
|
CToken* m_tokenArray;
|
||
|
LPCWSTR* m_lpszConstArr;
|
||
|
LPCWSTR* m_lpszParamArr;
|
||
|
int* m_mapArr;
|
||
|
|
||
|
int m_tokenArrCount;
|
||
|
int m_constArrCount;
|
||
|
int m_paramArrCount;
|
||
|
|
||
|
};
|
||
|
|
||
|
class CUserNameFormatter : public CNameFormatterBase
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
HRESULT Initialize(IN MyBasePathsInfo* pBasePathInfo,
|
||
|
IN LPCWSTR lpszClassName)
|
||
|
{
|
||
|
static LPCWSTR lpszMapping[] = {L"givenName", L"initials", L"sn"};
|
||
|
static const int nArgs = 3;
|
||
|
|
||
|
HRESULT hr = CNameFormatterBase::Initialize(pBasePathInfo,
|
||
|
lpszClassName,
|
||
|
IDS_FORMAT_USER_NAME);
|
||
|
if (FAILED(hr))
|
||
|
{
|
||
|
return hr;
|
||
|
}
|
||
|
SetMapping(lpszMapping, nArgs);
|
||
|
return S_OK;
|
||
|
}
|
||
|
void FormatName(OUT CString& szBuffer,
|
||
|
IN LPCWSTR lpszFirstName,
|
||
|
IN LPCWSTR lpszInitials,
|
||
|
IN LPCWSTR lpszLastName)
|
||
|
{
|
||
|
LPCWSTR lpszArgs[3];
|
||
|
lpszArgs[0] = lpszFirstName;
|
||
|
lpszArgs[1] = lpszInitials;
|
||
|
lpszArgs[2] = lpszLastName;
|
||
|
|
||
|
CNameFormatterBase::Format(szBuffer, lpszArgs);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// List View utilities
|
||
|
//
|
||
|
struct TColumnHeaderItem
|
||
|
{
|
||
|
UINT uStringId; // Resource Id of the string
|
||
|
INT nColWidth; // % of total width of the column (0 = autowidth, -1 = fill rest of space)
|
||
|
};
|
||
|
|
||
|
void ListView_AddColumnHeaders(HWND hwndListview,
|
||
|
const TColumnHeaderItem rgzColumnHeader[]);
|
||
|
|
||
|
int ListView_AddString(HWND hwndListview,
|
||
|
const LPCTSTR psz,
|
||
|
LPARAM lParam = 0);
|
||
|
|
||
|
int ListView_AddStrings(HWND hwndListview,
|
||
|
const LPCTSTR rgzpsz[],
|
||
|
LPARAM lParam = 0);
|
||
|
|
||
|
void ListView_SelectItem(HWND hwndListview, int iItem);
|
||
|
int ListView_GetSelectedItem(HWND hwndListview);
|
||
|
int ListView_FindString(HWND hwndListview, LPCTSTR szTextSearch);
|
||
|
|
||
|
void ListView_SetItemString(HWND hwndListview,
|
||
|
int iItem,
|
||
|
int iSubItem,
|
||
|
IN const CString& rstrText);
|
||
|
|
||
|
int ListView_GetItemString(HWND hwndListview,
|
||
|
int iItem,
|
||
|
int iSubItem,
|
||
|
OUT CString& rstrText);
|
||
|
|
||
|
LPARAM ListView_GetItemLParam(HWND hwndListview,
|
||
|
int iItem,
|
||
|
OUT int * piItem = NULL);
|
||
|
|
||
|
int ListView_FindLParam(HWND hwndListview,
|
||
|
LPARAM lParam);
|
||
|
|
||
|
int ListView_SelectLParam(HWND hwndListview,
|
||
|
LPARAM lParam);
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
// Dialog Utilities
|
||
|
//
|
||
|
|
||
|
HWND HGetDlgItem(HWND hdlg, INT nIdDlgItem);
|
||
|
void SetDlgItemFocus(HWND hdlg, INT nIdDlgItem);
|
||
|
void EnableDlgItem(HWND hdlg, INT nIdDlgItem, BOOL fEnable = TRUE);
|
||
|
void HideDlgItem(HWND hdlg, INT nIdDlgItem, BOOL fHideItem = TRUE);
|
||
|
|
||
|
void EnableDlgItemGroup(HWND hdlg,
|
||
|
const UINT rgzidCtl[],
|
||
|
BOOL fEnableAll = TRUE);
|
||
|
|
||
|
void HideDlgItemGroup(HWND hdlg,
|
||
|
const UINT rgzidCtl[],
|
||
|
BOOL fHideAll = TRUE);
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Combo box Utilities
|
||
|
//
|
||
|
|
||
|
int ComboBox_AddString(HWND hwndCombobox, UINT uStringId);
|
||
|
void ComboBox_AddStrings(HWND hwndCombobox, const UINT rgzuStringId[]);
|
||
|
|
||
|
int ComboBox_FindItemByLParam(HWND hwndComboBox, LPARAM lParam);
|
||
|
int ComboBox_SelectItemByLParam(HWND hwndComboBox, LPARAM lParam);
|
||
|
LPARAM ComboBox_GetSelectedItemLParam(HWND hwndComboBox);
|
||
|
|
||
|
|
||
|
#endif // __UIUTIL_H_
|