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

📄 resorgsymbolslistview.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				CResourceSymbolManager* pMngr = GetDocument()->GetSymbolBuffer();

				if ( (NULL != pMngr) && (NULL == m_ctrlSymbols.GetSymbolManager() ) )
				{
					if (Options.FilterMultiFileSymbolsDisplays() &&
						pMngr->IsKindOf(RUNTIME_CLASS(CResourceSymbolManagerMultiFile) ) &&
						(pMngr->GetProblemSymbolCount() > 0) )
					{
						m_ctrlSymbols.ShowProblemSymbolsOnly(true);
					}
				}

				m_ctrlSymbols.AddSymbols(pMngr);		// Sledgehammer approach - slow but effective
			}
			break;
		
		case SYM_ADDED:
			m_ctrlSymbols.AddSymbol( (CResourceSymbol*)pHint );
			m_ctrlSymbols.Sort();
			break;

		case SYM_CHANGED:
			m_ctrlSymbols.UpdateSymbol( (CResourceSymbol*)pHint );
			m_ctrlSymbols.Sort();
			break;

		case SYM_DELETED:
			m_ctrlSymbols.RemoveSymbol( (CResourceSymbol*)pHint );
			break;

		default:
			break;
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView printing

BOOL CResOrgSymbolsListView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}


void CResOrgSymbolsListView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}


void CResOrgSymbolsListView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView diagnostics

#ifdef _DEBUG
void CResOrgSymbolsListView::AssertValid(void) const
{
	CResOrgSymbolsListView_BASE::AssertValid();
}


void CResOrgSymbolsListView::Dump(CDumpContext& dc) const
{
	CResOrgSymbolsListView_BASE::Dump(dc);
}


CResOrgSymbolsDoc* CResOrgSymbolsListView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CResOrgSymbolsDoc)));
	return (CResOrgSymbolsDoc*)m_pDocument;
}
#endif //_DEBUG


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView implementation

void CResOrgSymbolsListView::Initialise(void)
{
	if (!m_bInitialised)
	{
		m_ctrlSymbols.Initialise(TRUE);

		m_bInitialised = TRUE;
	}
}

			
void CResOrgSymbolsListView::ConfigureScrollbars(void)
{
	SCROLLINFO infoHorz;
	m_ctrlSymbols.GetScrollInfo(SB_HORZ, &infoHorz);

	SetScrollInfo(SB_HORZ, &infoHorz, true);

	SCROLLINFO infoVert;
	m_ctrlSymbols.GetScrollInfo(SB_VERT, &infoVert);

	SetScrollInfo(SB_VERT, &infoVert, true);
}


BOOL CResOrgSymbolsListView::ConfirmDelete(const CString& sSymbol /*= _T("")*/ ) const
{
	CNGMessageBox dlg;

	if (!sSymbol.IsEmpty())
	{
		dlg.FormatMsgEx(MAKEINTRESOURCE(IDP_SYM_DELETE_WARNING_EX),
						_T("RTF"),
						sSymbol);
	}
	else
	{
		dlg.SetMsgEx( MAKEINTRESOURCE(	IDP_SYM_DELETE_WARNING),
										_T("RTF") );
	}
	dlg.SetRtf();
	dlg.SetStandardIcon(IDI_WARNING);
	dlg.AddButton(IDYES, FALSE, FALSE, _T("&Yes") );
	dlg.AddButton(IDNO, TRUE, TRUE, _T("&No") );

	return (IDYES == dlg.DoModal());
}


BOOL CResOrgSymbolsListView::IsValueUnique(	CResourceSymbol* pSymbol,
											UINT uValue)
{
	BOOL bUnique = TRUE;

	if ( (NULL != GetDocument()->GetSymbolBuffer()) && (NULL != pSymbol) )
	{
		CResourceSymbolList listSymbols;
		GetDocument()->GetSymbolBuffer()->GetSymbols(uValue, listSymbols);

		POSITION pos = listSymbols.GetHeadPosition();
		while (pos != NULL)
		{
			CResourceSymbol* pNextSymbol = listSymbols.GetNext(pos);
			if (pNextSymbol != NULL)
			{
				if (pNextSymbol != pSymbol)
				{
					bUnique = FALSE;
					break;
				}
			}
		}
	}
	return bUnique;
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView message handlers

int CResOrgSymbolsListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	int nResult = CResOrgSymbolsListView_BASE::OnCreate(lpCreateStruct);
	
	if (-1 != nResult)
	{
		if (!m_ctrlSymbols.Create(	WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS,
									CRect(0,0,0,0),
									this,
									IDC_RESORG_SYMBOLS))
		{
			TRACE( _T("Failed to create symbols list control.\n"));

			return -1;
		}
	}
	return nResult;
}


void CResOrgSymbolsListView::OnSize(UINT nType, int cx, int cy) 
{
	CResOrgSymbolsListView_BASE::OnSize(nType, cx, cy);
	
	if (m_ctrlSymbols.GetSafeHwnd() != NULL)
	{
		m_ctrlSymbols.SetWindowPos(	NULL,
									0,
									0,
									cx,
									cy,
									SWP_SHOWWINDOW|SWP_NOZORDER
									);

		ConfigureScrollbars();
	}
}


LRESULT CResOrgSymbolsListView::OnMsgSetScrollInfo(WPARAM wParam, LPARAM lParam)
{
	int eBar					= (int)wParam;
	LPSCROLLINFO pScrollInfo	= (LPSCROLLINFO)lParam;

	switch (eBar)
	{
		case SB_VERT:
			m_nLastVPos = pScrollInfo->nPos;
			SetScrollInfo(eBar, pScrollInfo);
			break;

		case SB_HORZ:
			m_nLastHPos = pScrollInfo->nPos;
			SetScrollInfo(eBar, pScrollInfo);
			break;

		default:
			ASSERT(false);
			break;
	}
	return 0L;
}


void CResOrgSymbolsListView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	UNREFERENCED_PARAMETER(nPos);
    
	// Get the minimum, maximum and current scroll-box positions.
	SCROLLINFO info;
	pScrollBar->GetScrollInfo(&info); 

	int nNewPosition = m_nLastHPos;

    // Act on the scroll bar operation
	switch (nSBCode)
	{
		case SB_TOP:							// Scroll to top
			nNewPosition = info.nMin;
			break;

		case SB_PAGEUP:							// Scroll one page up.
			nNewPosition = m_nLastHPos - info.nPage;
			break;

		case SB_LINEUP:							// Scroll up
			nNewPosition = m_nLastHPos - 1;
			break;

		case SB_BOTTOM:							// Scroll to bottom
			nNewPosition = info.nMax;
			break;

		case SB_LINEDOWN:						// Scroll down
			if (m_nLastHPos + info.nPage <= info.nMax)
			{
				nNewPosition = m_nLastHPos + 1;
			}
			break;

		case SB_PAGEDOWN:						// Scroll one page down.
			if (m_nLastHPos + info.nPage <= info.nMax)
			{
				nNewPosition = m_nLastHPos + info.nPage;
			}
			break;

		case SB_THUMBPOSITION:					// Scroll to absolute position. nTrackPos is the position
			nNewPosition = info.nTrackPos;		// of the scroll box at the end of the drag operation.
			break;

		case SB_THUMBTRACK:						// Drag scroll box to specified position. nTrackPos is the
			nNewPosition = info.nTrackPos;		// position that the scroll box has been dragged to.
			break;

		case SB_ENDSCROLL:
			nNewPosition = info.nPos;
			break;

		default:
			ASSERT(false);
			break;
	}

	if (nNewPosition < info.nMin)
	{
		nNewPosition = info.nMin;
	}
	else if (nNewPosition > info.nMax)
	{
		nNewPosition = info.nMax;
	}

	int nScrollBy = nNewPosition - m_nLastHPos;

	m_nLastHPos = nNewPosition;

	if (0 != nScrollBy)
	{
		m_ctrlSymbols.Scroll( CSize(nScrollBy, 0 ) );

		SetScrollPos(SB_HORZ, nNewPosition, true);
	}
}


void CResOrgSymbolsListView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	UNREFERENCED_PARAMETER(nPos);
    
	// Get the minimum, maximum and current scroll-box positions.
	SCROLLINFO info;
	pScrollBar->GetScrollInfo(&info); 

	int nNewPosition = m_nLastVPos;

    // Act on the scroll bar operation
	switch (nSBCode)
	{
		case SB_TOP:							// Scroll to top
			nNewPosition = info.nMin;
			break;

		case SB_PAGEUP:							// Scroll one page up.
			nNewPosition = m_nLastVPos - info.nPage;
			break;

		case SB_LINEUP:							// Scroll up
			nNewPosition = m_nLastVPos - 1;
			break;

		case SB_BOTTOM:							// Scroll to bottom
			nNewPosition = info.nMax;
			break;

		case SB_LINEDOWN:						// Scroll down
			if (m_nLastVPos + info.nPage <= info.nMax)
			{
				nNewPosition = m_nLastVPos + 1;
			}
			break;

		case SB_PAGEDOWN:						// Scroll one page down.
			if (m_nLastVPos + info.nPage <= info.nMax)
			{
				nNewPosition = m_nLastVPos + info.nPage;
			}
			break;

		case SB_THUMBPOSITION:					// Scroll to absolute position. nTrackPos is the position
			nNewPosition = info.nTrackPos;		// of the scroll box at the end of the drag operation.
			break;

		case SB_THUMBTRACK:						// Drag scroll box to specified position. nTrackPos is the
			nNewPosition = info.nTrackPos;		// position that the scroll box has been dragged to.
			break;

		case SB_ENDSCROLL:
			nNewPosition = info.nPos;
			break;

		default:
			ASSERT(false);
			break;
	}

	if (nNewPosition < info.nMin)
	{
		nNewPosition = info.nMin;
	}
	else if (nNewPosition > info.nMax)
	{
		nNewPosition = info.nMax;
	}

	int nScrollBy = nNewPosition - m_nLastVPos;

	m_nLastVPos = nNewPosition;

	if (0 != nScrollBy)
	{
		CRect rectItem;
		m_ctrlSymbols.GetItemRect(m_ctrlSymbols.GetTopIndex(), rectItem, LVIR_BOUNDS);

		m_ctrlSymbols.Scroll( CSize(0, nScrollBy * rectItem.Height() ) );

		SetScrollPos(SB_VERT, nNewPosition, true);
	}
}


//	Context Menu handler
void CResOrgSymbolsListView::OnContextMenu(CWnd* /*pWnd*/, CPoint point) 
{
	// Make sure window is active
	GetParentFrame()->ActivateFrame();

	CCJMenu menu;
	if (menu.LoadMenu(IDM_SYM_CONTEXT_MENU))
	{
		menu.LoadToolbar(IDR_MAINFRAME);

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

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


void CResOrgSymbolsListView::OnItemChangedListCtrl(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
{
	*pResult = 0;

	ConfigureScrollbars();
}

	
/******************************************************************************
 *	Called when the user double clicks on an item in the list
 *
 ******************************************************************************/

void CResOrgSymbolsListView::OnDblClickListCtrl(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
{
	*pResult = 0;

	OnCmdSymbolProperties();
}


void CResOrgSymbolsListView::OnCmdAutosizeColumns(void)
{
	m_ctrlSymbols.AutoSizeColumn();
}


/******************************************************************************
 *	Handlers for Edit|Select All menu command
 *
 ******************************************************************************/

void CResOrgSymbolsListView::OnCmdEditSelectAll(void) 
{
#if 0
	CMapStringToPtr* pMap = GetDocument()->GetSymbolMap();

⌨️ 快捷键说明

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