⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resorgprojectsview.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
 *
 *               Resource ID Organiser Add-In for Visual C++ .NET
 *
 * (c) Copyright 2000-2003 by Anna-Jayne Metcalfe (resorg@annasplace.me.uk)
 *                         All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Filename    : ResOrgProjectsView.cpp
 *
 *  Description : CResOrgProjectsView - project workspace list view class
 *
 *  Compiler    : Microsoft Visual C++ .NET 2002
 *                                                                       
 *  Target                                                               
 *  Environment : Windows 2000/XP
 *
 *  NOTE:
 *
 *    This software is provided "as is" free for personal use. All
 *    title and copyrights in and to the software, including but not
 *    limited to any images, text, etc. incorporated into it, are
 *    owned by Anna-Jayne Metcalfe, except where acknowledged otherwise.
 *
 *    Your may freely to use this code in your own products, PROVIDED
 *    this notice is not removed or modified.
 *
 *
 *    Visit http://www.annasplace.me.uk/resorg for latest updates
 *
 ************************************************************************
 *
 *   MODIFICATION HISTORY:
 *
 *           This is a controlled document. See project configuration
 *           control tool for latest version and full version history.
 *
 *    $Archive: /Projects/AddIns/ResOrg/ResOrgNETAddIn/ResOrgProjectsView.cpp $
 *   $Revision: 6 $
 *       $Date: 7/03/03 15:35 $
 *     $Author: Anna $
 *
 *    $History: ResOrgProjectsView.cpp $
 * 
 * *****************  Version 6  *****************
 * User: Anna         Date: 7/03/03    Time: 15:35
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * Added "Open Files Together" capability (as seen in the VC 6 version)
 * 
 * *****************  Version 5  *****************
 * User: Anna         Date: 17/12/02   Time: 15:40
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * CResOrgProjectsView::OnInitialUpdate() now only subclasses the header
 * control if a WinXP theme isn't active
 * 
 * *****************  Version 4  *****************
 * User: Anna         Date: 25/11/02   Time: 15:27
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * Changed website address in banner
 * 
 * *****************  Version 3  *****************
 * User: Anna         Date: 22/10/02   Time: 14:15
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * Changed name/email address (at last!)
 * 
 * *****************  Version 2  *****************
 * User: Andy         Date: 1/08/02    Time: 16:42
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * Renamed the module to ResOrgNETAddIn
 * 
 * *****************  Version 1  *****************
 * User: Andy         Date: 10/06/02   Time: 17:16
 * Created in $/Projects/AddIns/ResOrg/ResOrgAddInVc7
 *
 * $Nokeywords: $
 *
 ************************************************************************/

#include "StdAfx.h"
#include "ResOrgNETAddIn_Res.h"

#include "ResOrgAddInApp.h"
#include "ResOrgProjectsDoc.h"

#include "ResOrgProjectsView.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView

IMPLEMENT_DYNCREATE(CResOrgProjectsView, CResOrgProjectsView_BASE)

BEGIN_MESSAGE_MAP(CResOrgProjectsView, CResOrgProjectsView_BASE)
	//{{AFX_MSG_MAP(CResOrgProjectsView)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(						ID_PROJ_OPEN,				OnCmdOpenProject)
	ON_COMMAND(						ID_PROJ_OPEN_MULTIPLE,		OnCmdOpenProjectsTogether)
	ON_UPDATE_COMMAND_UI(			ID_PROJ_OPEN_MULTIPLE,		OnUpdateOpenProjectsTogether)
	ON_COMMAND(						ID_PROJ_RENUMBER,			OnCmdRenumberProject)
	ON_UPDATE_COMMAND_UI(			ID_PROJ_RENUMBER,			OnUpdateRenumberProject)
	ON_COMMAND(						ID_PROJ_PROPERTIES,			OnCmdProjectProperties)
	ON_UPDATE_COMMAND_UI(			ID_PROJ_PROPERTIES,			OnUpdateProjectProperties)
		//}}AFX_MSG_MAP

	// The following are outside of ClassWizard's reach as it can't understand
	// them....
	ON_NOTIFY_REFLECT(	NM_DBLCLK,								OnDblClick)

END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView construction/destruction

CResOrgProjectsView::CResOrgProjectsView(void)
{
	m_bInitialised		= FALSE;
	m_nSortColumn		= 0;
	m_bSortAscending	= true;
}


CResOrgProjectsView::~CResOrgProjectsView(void)
{
	Clear();
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView 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 CResOrgProjectsView::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style = (cs.style & ~LVS_TYPEMASK) | LVS_REPORT /*| LVS_SINGLESEL*/ | LVS_SHOWSELALWAYS;

	return CResOrgProjectsView_BASE::PreCreateWindow(cs);
}


void CResOrgProjectsView::OnInitialUpdate(void)
{
	// Change style to have:
	//
	//	1.	Flat header (requires CJListCtrl)
	//	2.	Full row selection (requires ComCtl32.dll v4.71)
	//
	if (!m_bInitialised)
	{
		CCJThemeHelper theme;
		if (!theme.IsAppThemed() )
		{
			SubclassHeader();
		}
		SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT);

		CRect rect;
		GetClientRect(rect);

		GetListCtrl().InsertColumn(0,
									_T("Project"),
									LVCFMT_LEFT,
									rect.Width(),
									-1);
		m_bInitialised = TRUE;
	}
	CResOrgProjectsView_BASE::OnInitialUpdate();
}


void CResOrgProjectsView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint)
{
	UNREFERENCED_PARAMETER(pSender);
	UNREFERENCED_PARAMETER(pHint);

	switch (lHint)
	{
		case CLEAR_WORKSPACE:
			GetListCtrl().DeleteAllItems();
			Clear();
			break;

		case SHOW_WORKSPACE:
			GetListCtrl().DeleteAllItems();
			Clear();

			Workspace.GetProjects(m_arrayProjects);
			FillListCtrl();

			// If there's only one project, open its symbol
			// file automatically
			if (m_arrayProjects.GetSize() == 1)
			{
				EnvDTE::Project* pProject = m_arrayProjects[0];
				if (NULL != pProject)
				{
					CString sProject = Workspace.GetName(pProject);

					ASSERT(!sProject.IsEmpty());

					if (!sProject.IsEmpty())
					{
						OpenProject(sProject,
									Options.WarnIfNextSymbolValuesInUse() );
					}
				}
			}
			break;


		default:
			GetListCtrl().DeleteAllItems();
			Clear();

			Workspace.GetProjects(m_arrayProjects);
			FillListCtrl();

			break;
	}
	GetListCtrl().EnableWindow( (m_arrayProjects.GetSize() > 0) );
}	


void CResOrgProjectsView::OnDraw(CDC* /*pDC*/)
{
	CResOrgProjectsDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: add draw code for native data here
}


bool CResOrgProjectsView::SortList(int nColumn, bool bAscending)
{
	m_nSortColumn		= nColumn;
	m_bSortAscending	= bAscending;

	// Resort contents if sorted before
	if (m_nSortColumn >= 0)
	{
		DWORD lParam = MAKELONG(m_nSortColumn, m_bSortAscending);

		GetListCtrl().SortItems(ListViewCompareProc, lParam);

		return true;
	}
	return false;
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView diagnostics

#ifdef _DEBUG
void CResOrgProjectsView::AssertValid(void) const
{
	CResOrgProjectsView_BASE::AssertValid();
}


void CResOrgProjectsView::Dump(CDumpContext& dc) const
{
	CResOrgProjectsView_BASE::Dump(dc);
}


CResOrgProjectsDoc* CResOrgProjectsView::GetDocument(void) // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CResOrgProjectsDoc)));

	return (CResOrgProjectsDoc*)m_pDocument;
}
#endif //_DEBUG


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView implementation

void CResOrgProjectsView::FillListCtrl(void)
{
	GetListCtrl().SetRedraw(FALSE);

	GetListCtrl().DeleteAllItems();

	CResOrgProjectsDoc* pDoc = GetDocument();
	if (NULL != pDoc)
	{
		int nItem = -1;

		for (int n = 0; n < m_arrayProjects.GetSize(); n++)
		{
			EnvDTE::Project* pProject = m_arrayProjects[n];
			if (NULL != pProject)
			{
				CString sProject = Workspace.GetName(pProject);

				VERIFY(-1 != GetListCtrl().InsertItem(++nItem, sProject) );

				GetListCtrl().SetItemData(nItem, (DWORD_PTR)pProject);
			}
		}
	}
	SortList(m_nSortColumn, m_bSortAscending);

	GetListCtrl().SetRedraw(TRUE);
}


void CResOrgProjectsView::Clear(void)
{
	for (int n = 0; n < m_arrayProjects.GetSize(); n++)
	{
		EnvDTE::Project* pProject = m_arrayProjects[n];
		if (NULL != pProject)
		{
			pProject->Release();
		}
	}
	m_arrayProjects.RemoveAll();
}


/******************************************************************************
 *	Static callback function for List Control sorting
 *
 *	The list control will then repeatedly call this to determine how to sort
 *	its data
 *
 ******************************************************************************/

int CALLBACK CResOrgProjectsView::ListViewCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	EnvDTE::Project* pItem1 = (EnvDTE::Project*)lParam1;
	EnvDTE::Project* pItem2 = (EnvDTE::Project*)lParam2;

	int nResult = 0;		// Default => Equal

	if ( (NULL != pItem1) && (NULL != pItem2) )
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -