📄 resorgprojectslistctrlvc7.cpp
字号:
// ResOrgProjectsListCtrlVc7.cpp : implementation file
//
#include "stdafx.h"
#include "ResOrgNETAddInToolWindows.h"
#include "ResOrgNETProjectsListCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7
IMPLEMENT_DYNAMIC(CResOrgProjectsListCtrlVc7, CResOrgProjectsListCtrlVc7_BASE)
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7 construction/destruction
CResOrgProjectsListCtrlVc7::CResOrgProjectsListCtrlVc7(void)
{
m_bInitialised = FALSE;
m_nSortColumn = 0;
m_bSortAscending = true;
}
CResOrgProjectsListCtrlVc7::~CResOrgProjectsListCtrlVc7(void)
{
Clear();
m_AutomationHelper.SetDTE(NULL);
}
/******************************************************************************
* Message Map implementation
*
******************************************************************************/
BEGIN_MESSAGE_MAP(CResOrgProjectsListCtrlVc7, CResOrgProjectsListCtrlVc7_BASE)
ON_WM_SIZE()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7 overrides
/******************************************************************************
* This method is called by the framework before the creation of the
* window attached to this CWnd object.
*
* This override is used to modify the window styles here to set the List
* control style to report view.
*
* This is achieved by masking out the view style using LVS_TYPEMASK
* and setting the LVS_REPORT style. LVS_SINGLESEL is also set to allow
* only single selections.
*
* Note that we DON'T want the LVS_SORTASCENDING style as this sorts items
* by item text and in this case we cannot have a comparison function.
*
******************************************************************************/
BOOL CResOrgProjectsListCtrlVc7::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style = (cs.style & ~LVS_TYPEMASK) | LVS_REPORT /*| LVS_SINGLESEL*/ | LVS_SHOWSELALWAYS;
return CResOrgProjectsListCtrlVc7_BASE::PreCreateWindow(cs);
}
bool CResOrgProjectsListCtrlVc7::SortList(int nColumn, bool bAscending)
{
m_nSortColumn = nColumn;
m_bSortAscending = bAscending;
// Resort contents if sorted before
if (m_nSortColumn >= 0)
{
CCJSortClass sorter(this, m_nSortColumn);
sorter.Sort(m_bSortAscending, DT_STRING);
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7 operations
bool CResOrgProjectsListCtrlVc7::Initialise(CComPtr<EnvDTE::_DTE> pDTE)
{
// Change style to have:
//
// 1. Flat header (requires CJListCtrl)
// 2. Full row selection (requires ComCtl32.dll v4.71)
//
if (!m_bInitialised)
{
m_AutomationHelper.SetDTE(pDTE);
CCJThemeHelper theme;
if (!theme.IsAppThemed() )
{
SubclassHeader();
}
SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT);
CRect rect;
GetClientRect(rect);
InsertColumn( 0,
_T("Project"),
LVCFMT_LEFT,
rect.Width(),
-1);
m_bInitialised = true;
return true;
}
return false;
}
void CResOrgProjectsListCtrlVc7::Clear(void)
{
if (::IsWindow(m_hWnd) )
{
DeleteAllItems();
}
for (int n = 0; n < m_arrayProjects.GetSize(); n++)
{
EnvDTE::Project* pProject = m_arrayProjects[n];
if (NULL != pProject)
{
pProject->Release();
}
}
m_arrayProjects.RemoveAll();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7 implementation
void CResOrgProjectsListCtrlVc7::FillListCtrl(void)
{
SetRedraw(FALSE);
Clear();
m_AutomationHelper.GetProjects(m_arrayProjects);
int nItem = -1;
for (int n = 0; n < m_arrayProjects.GetSize(); n++)
{
EnvDTE::Project* pProject = m_arrayProjects[n];
if (NULL != pProject)
{
CString sProject = m_AutomationHelper.GetName(pProject);
VERIFY(-1 != InsertItem(++nItem, sProject) );
SetItemData(nItem, (DWORD_PTR)pProject);
}
}
SortList(m_nSortColumn, m_bSortAscending);
SetRedraw(TRUE);
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsListCtrlVc7 message handlers
void CResOrgProjectsListCtrlVc7::OnSize(UINT nType, int cx, int cy)
{
CResOrgProjectsListCtrlVc7_BASE::OnSize(nType, cx, cy);
if (m_bInitialised)
{
AutoSizeColumn();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -