mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
6.6 KiB
278 lines
6.6 KiB
// ListViewColumn.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ResultsPaneView.h"
|
|
#include "ResultsPane.h"
|
|
#include "ListViewColumn.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CListViewColumn
|
|
|
|
IMPLEMENT_DYNCREATE(CListViewColumn, CCmdTarget)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
|
|
CListViewColumn::CListViewColumn()
|
|
{
|
|
EnableAutomation();
|
|
|
|
m_pOwnerResultsView = NULL;
|
|
m_iWidth = -1;
|
|
m_dwFormat = 0L;
|
|
|
|
// To keep the application running as long as an OLE automation
|
|
// object is active, the constructor calls AfxOleLockApp.
|
|
|
|
AfxOleLockApp();
|
|
}
|
|
|
|
CListViewColumn::~CListViewColumn()
|
|
{
|
|
// To terminate the application when all objects created with
|
|
// with OLE automation, the destructor calls AfxOleUnlockApp.
|
|
|
|
AfxOleUnlockApp();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Create/Destroy
|
|
|
|
bool CListViewColumn::Create(CResultsPaneView* pOwnerView, const CString& sTitle, int nWidth /*= 100*/, DWORD dwFormat /*= LVCFMT_LEFT*/)
|
|
{
|
|
TRACEX(_T("CListViewColumn::Create\n"));
|
|
TRACEARGn(pOwnerView);
|
|
|
|
SetOwnerResultsView(pOwnerView);
|
|
SetTitle(sTitle);
|
|
SetWidth(nWidth);
|
|
SetFormat(dwFormat);
|
|
|
|
return true;
|
|
}
|
|
|
|
void CListViewColumn::Destroy()
|
|
{
|
|
TRACEX(_T("CListViewColumn::Destroy\n"));
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Owner ResultsView Members
|
|
|
|
CResultsPaneView* CListViewColumn::GetOwnerResultsView()
|
|
{
|
|
TRACEX(_T("CListViewColumn::GetOwnerResultsView\n"));
|
|
|
|
if( GfxCheckObjPtr(m_pOwnerResultsView,CResultsPaneView) )
|
|
return m_pOwnerResultsView;
|
|
|
|
TRACE(_T("WARNING : m_pOwnerResultsView pointer was not valid.\n"));
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void CListViewColumn::SetOwnerResultsView(CResultsPaneView* pView)
|
|
{
|
|
TRACEX(_T("CListViewColumn::SetOwnerResultsView\n"));
|
|
TRACEARGn(pView);
|
|
|
|
if( ! GfxCheckObjPtr(pView, CResultsPaneView) )
|
|
{
|
|
m_pOwnerResultsView = NULL;
|
|
TRACE(_T("WARNING : pView argument is an invalid pointer.\n"));
|
|
return;
|
|
}
|
|
|
|
m_pOwnerResultsView = pView;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Title Members
|
|
|
|
CString CListViewColumn::GetTitle()
|
|
{
|
|
TRACEX(_T("CListViewColumn::GetTitle\n"));
|
|
|
|
return m_sTitle;
|
|
}
|
|
|
|
void CListViewColumn::SetTitle(const CString& sTitle)
|
|
{
|
|
TRACEX(_T("CListViewColumn::SetTitle\n"));
|
|
TRACEARGs(sTitle);
|
|
|
|
m_sTitle = sTitle;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Width Members
|
|
|
|
int CListViewColumn::GetWidth()
|
|
{
|
|
TRACEX(_T("CListViewColumn::GetWidth\n"));
|
|
|
|
return m_iWidth;
|
|
}
|
|
|
|
void CListViewColumn::SetWidth(int iWidth)
|
|
{
|
|
TRACEX(_T("CListViewColumn::SetWidth\n"));
|
|
TRACEARGn(iWidth);
|
|
|
|
if( iWidth < 0 )
|
|
{
|
|
TRACE(_T("WARNING : Attempt to set column width to negative value.\n"));
|
|
return;
|
|
}
|
|
|
|
if( iWidth > 2000 )
|
|
{
|
|
TRACE(_T("WARNING : Attempt to set column width to a value greater than 2000 pixels.\n"));
|
|
return;
|
|
}
|
|
|
|
m_iWidth = iWidth;
|
|
}
|
|
|
|
void CListViewColumn::SaveWidth(CResultsPane* pResultsPane, int iColumnIndex)
|
|
{
|
|
TRACEX(_T("CListViewColumn::SaveWidth\n"));
|
|
TRACEARGn(pResultsPane);
|
|
TRACEARGn(iColumnIndex);
|
|
|
|
if( ! GfxCheckObjPtr(pResultsPane,CResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : Invalid pointer passed.\n"));
|
|
return;
|
|
}
|
|
|
|
LPHEADERCTRL2 pIHeaderCtrl = pResultsPane->GetHeaderCtrlPtr();
|
|
|
|
if( ! GfxCheckPtr(pIHeaderCtrl,IHeaderCtrl2) )
|
|
{
|
|
TRACE(_T("FAILED : HeaderCtrl pointer is invalid.\n"));
|
|
return;
|
|
}
|
|
|
|
HRESULT hr = pIHeaderCtrl->GetColumnWidth(iColumnIndex,&m_iWidth);
|
|
|
|
pIHeaderCtrl->Release();
|
|
|
|
if( ! CHECKHRESULT(hr) )
|
|
{
|
|
TRACE(_T("FAILED : IHeaderCtrl2::GetColumnWidth failed.\n"));
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Format Members
|
|
|
|
DWORD CListViewColumn::GetFormat()
|
|
{
|
|
TRACEX(_T("CListViewColumn::GetFormat\n"));
|
|
|
|
return m_dwFormat;
|
|
}
|
|
|
|
void CListViewColumn::SetFormat(DWORD dwFormat)
|
|
{
|
|
TRACEX(_T("CListViewColumn::SetFormat\n"));
|
|
TRACEARGn(dwFormat);
|
|
|
|
m_dwFormat = dwFormat;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Column Members
|
|
|
|
bool CListViewColumn::InsertColumn(CResultsPane* pResultsPane, int iColumnIndex)
|
|
{
|
|
TRACEX(_T("CListViewColumn::InsertColumn"));
|
|
TRACEARGn(pResultsPane);
|
|
TRACEARGn(iColumnIndex);
|
|
|
|
if( ! GfxCheckObjPtr(pResultsPane,CResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : pResultsPane is not a valid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
LPHEADERCTRL2 lpHeaderCtrl = pResultsPane->GetHeaderCtrlPtr();
|
|
|
|
if( ! GfxCheckPtr(lpHeaderCtrl,IHeaderCtrl2) )
|
|
{
|
|
TRACE(_T("FAILED : lpHeaderCtrl is not a valid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
HRESULT hr = lpHeaderCtrl->InsertColumn(iColumnIndex,GetTitle(),GetFormat(),GetWidth());
|
|
|
|
if( ! CHECKHRESULT(hr) )
|
|
{
|
|
TRACE(_T("FAILED : IHeaderCtrl::InsertColumn failed.\n "));
|
|
return false;
|
|
}
|
|
|
|
lpHeaderCtrl->Release();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
void CListViewColumn::OnFinalRelease()
|
|
{
|
|
// When the last reference for an automation object is released
|
|
// OnFinalRelease is called. The base class will automatically
|
|
// deletes the object. Add additional cleanup required for your
|
|
// object before calling the base class.
|
|
|
|
CCmdTarget::OnFinalRelease();
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CListViewColumn, CCmdTarget)
|
|
//{{AFX_MSG_MAP(CListViewColumn)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BEGIN_DISPATCH_MAP(CListViewColumn, CCmdTarget)
|
|
//{{AFX_DISPATCH_MAP(CListViewColumn)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
//}}AFX_DISPATCH_MAP
|
|
END_DISPATCH_MAP()
|
|
|
|
// Note: we add support for IID_IListViewColumn to support typesafe binding
|
|
// from VBA. This IID must match the GUID that is attached to the
|
|
// dispinterface in the .ODL file.
|
|
|
|
// {BA13F0BF-9446-11D2-BD49-0000F87A3912}
|
|
static const IID IID_IListViewColumn =
|
|
{ 0xba13f0bf, 0x9446, 0x11d2, { 0xbd, 0x49, 0x0, 0x0, 0xf8, 0x7a, 0x39, 0x12 } };
|
|
|
|
BEGIN_INTERFACE_MAP(CListViewColumn, CCmdTarget)
|
|
INTERFACE_PART(CListViewColumn, IID_IListViewColumn, Dispatch)
|
|
END_INTERFACE_MAP()
|
|
|
|
// {BA13F0C0-9446-11D2-BD49-0000F87A3912}
|
|
IMPLEMENT_OLECREATE_EX(CListViewColumn, "SnapIn.ListViewColumn", 0xba13f0c0, 0x9446, 0x11d2, 0xbd, 0x49, 0x0, 0x0, 0xf8, 0x7a, 0x39, 0x12)
|
|
|
|
BOOL CListViewColumn::CListViewColumnFactory::UpdateRegistry(BOOL bRegister)
|
|
{
|
|
if (bRegister)
|
|
return AfxOleRegisterServerClass(m_clsid, m_lpszProgID, m_lpszProgID, m_lpszProgID, OAT_DISPATCH_OBJECT);
|
|
else
|
|
return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CListViewColumn message handlers
|