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

📄 resorgprojectsview.cpp

📁 一个vc中管理资源文件ID的插件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	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++)
		{
			IGenericProject* pProject = m_arrayProjects[n];
			if (NULL != pProject)
			{
				CString sProject = Workspace.GetName(pProject);

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

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

	GetListCtrl().SetRedraw(TRUE);
}


void CResOrgProjectsView::Clear(void)
{
	for (int n = 0; n < m_arrayProjects.GetSize(); n++)
	{
		IGenericProject* 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)
{
	IGenericProject* pItem1 = (IGenericProject*)lParam1;
	IGenericProject* pItem2 = (IGenericProject*)lParam2;

	int nResult = 0;		// Default => Equal

	if ( (NULL != pItem1) && (NULL != pItem2) )
	{
		int nColumn			= LOWORD(lParamSort);
		BOOL bSortAscending	= HIWORD(lParamSort);

		switch (nColumn)
		{
			case 0:
				{
					CString sItem1 = Workspace.GetName(pItem1);
					CString sItem2 = Workspace.GetName(pItem2);

					nResult = lstrcmpi(sItem1, sItem2);

					if ( (sItem1.IsEmpty()) || (sItem2.IsEmpty()) )
					{
						nResult = -nResult;			// Modify sort so a blank entry is HIGHER than one with something in it
					}
				}
				break;

			default:
				return 0;
	   	}
		if (!bSortAscending)
		{
			nResult = -nResult;			// Sneaky way to reverse sort order...
		}
	}
	return nResult;
}


CDocument* CResOrgProjectsView::OpenProject(const CString& sProject)
{
	CDocument* pDoc = NULL;

	// TO DO: Extract rc file name, then symbol file name
	// Open symbols file
	CString sResourceFile = Workspace.GetResourceFileName(sProject);
	if (!sResourceFile.IsEmpty())
	{
		CString sSymbolFile = ::GetSymbolFileName(sResourceFile);
		if (!sSymbolFile.IsEmpty())
		{
			pDoc = GetDocument()->GetOpenDocument(sSymbolFile);
			if (NULL != pDoc)
			{
				// If the file is already open, just activate it
				GetDocument()->SetActiveDocument(pDoc);
			}
			else
			{
				// ...otherwise, we have to open it...

				// To Do: convert to flash box
				//AfxMessageBox( "Displaying symbols for: " + sSymbolFile);

				Workspace.CloseResourceFile(sResourceFile);

				pDoc = AfxGetApp()->OpenDocumentFile(sSymbolFile);
			}
		}
		else
		{
			ASSERT(FALSE);		// Unable to identify symbol file
		}
	}
	else
	{
		ASSERT(FALSE);		// Unable to identify RC file
	}
	return pDoc;
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgProjectsView message handlers

void CResOrgProjectsView::OnSize(UINT nType, int cx, int cy) 
{
	CResOrgProjectsView_BASE::OnSize(nType, cx, cy);
	
	if (m_bInitialised)
	{
		AutoSizeColumn();
	}
}


//	Context Menu handler
void CResOrgProjectsView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	UNREFERENCED_PARAMETER(pWnd);

	// Make sure window is active
	GetParentFrame()->ActivateFrame();

	// Convert to client coordinates for hit testing
	// Note that TrackPopupMenu() expects its coordinates to be screen, not client!
	CPoint ptClient = point;
	ScreenToClient(&ptClient);

	UINT nFlags = 0;
	int nIndex = GetListCtrl().HitTest(ptClient, &nFlags);
	
	if (nIndex >= 0)
	{
		CCJMenu menu;
		if (menu.LoadMenu(IDM_PRJ_CONTEXT_MENU))
		{
			menu.LoadToolbar(IDM_PRJ_CONTEXT_MENU);

			CMenu* pPopup = menu.GetSubMenu(0);
			ASSERT(NULL != pPopup);

			pPopup->SetDefaultItem(ID_PROJ_OPEN);
			pPopup->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,
								   point.x,
								   point.y,
								   AfxGetMainWnd()); // route commands through main window
			return;
		}
	}
	Default();									// Default message handling if we didn't do anything
}



void CResOrgProjectsView::OnDblClick(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
{
	*pResult = 0;

	OnCmdOpenProject();
}


void CResOrgProjectsView::OnCmdOpenProject(void)
{
	if (GetListCtrl().GetSelectedCount() > 0)
	{
		CResOrgProjectsDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);

		if (NULL != pDoc)
		{
			POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
			while (pos != NULL)
			{
				int nItem = GetListCtrl().GetNextSelectedItem(pos);
				if (nItem >= 0)
				{
					CString sProject = GetListCtrl().GetItemText(nItem, 0);

					if (NULL == OpenProject(sProject) )
					{
						CString sMsg;
						sMsg.Format(IDP_PRJ_NO_SYM_FILE, sProject);

						AfxMessageBox(	sMsg,
										MB_OK | MB_ICONEXCLAMATION);
					}
				}
			}
		}
	}
}


void CResOrgProjectsView::OnCmdRenumberProject(void)
{
	if (GetListCtrl().GetSelectedCount() > 0)
	{
		CResOrgProjectsDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);

		if (NULL != pDoc)
		{
			POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
			while (pos != NULL)
			{
				int nItem = GetListCtrl().GetNextSelectedItem(pos);
				if (nItem >= 0)
				{
					CString sProject = GetListCtrl().GetItemText(nItem, 0);

					CResOrgSymbolsDoc* pDoc = dynamic_cast<CResOrgSymbolsDoc*>( OpenProject(sProject) );
					if (NULL != pDoc)
					{
						if (pDoc->GetSymbolBuffer()->GetSymbolCount() > 0)
						{
							AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_TOOLS_RENUMBER);
						}
						else
						{
							AfxMessageBox(	_T("This file contains no symbols"),
											MB_OK | MB_ICONSTOP);
						}
					}
				}
			}
		}
	}
}


void CResOrgProjectsView::OnUpdateRenumberProject(CCmdUI* pCmdUI)
{
	pCmdUI->Enable( GetListCtrl().GetSelectedCount() == 1);
}

⌨️ 快捷键说明

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