Example #1
0
void CChildView::OnPaint()
{
	CRect pos(0, 0, 0, 0);
	HotSpots.clear();

	CPaintDC pdc(this); // device context for painting
	CMemDC m(pdc, this);
	CDC& dc = m.GetDC();

	CRect client;
	GetClientRect(&client);

	dc.FillSolidRect(&client, crBackground);
	if (!m_pClass)
		return;

	dc.SelectObject(&Font);

	HotSpots.clear();

	DWORD classSize = m_pClass->GetMemorySize();
	Memory.SetSize(classSize);
	ReadMemory((LPVOID)m_pClass->offset, Memory.pMemory, classSize);

	ViewInfo View;
	View.Address = m_pClass->offset;
	View.pData = Memory.pMemory;
	View.Classes = &theApp.Classes;
	View.client = &client;
	View.dc = &dc;
	View.Level = 0;
	View.HotSpots = &HotSpots;
	View.bMultiSelected = (Selected.size() > 1) ? true : false;

	int ypos = m_Scroll.GetScrollPos() * FontHeight;
	if (m_Scroll.IsWindowVisible()) View.client->right -= SB_WIDTH;

	int DrawMax = m_pClass->Draw(View, 0, -ypos) + ypos;

	if (m_pClass->RequestPosition != -1)
	{
		if ((m_pClass->RequestPosition >= 0) && ((unsigned int)m_pClass->RequestPosition < theApp.Classes.size()))
		{
			int idx = -1;
			for (UINT i = 0; i < theApp.Classes.size(); i++)
			{
				CNodeClass* pClass = View.Classes->at(i);
				if (m_pClass == theApp.Classes[i])
					idx = i;
			}
			theApp.Classes.erase(theApp.Classes.begin() + idx);
			theApp.Classes.insert(theApp.Classes.begin() + m_pClass->RequestPosition, m_pClass);
		}
		m_pClass->RequestPosition = -1;
	}
	if (client.Height() < DrawMax)
	{
		SCROLLINFO si;
		si.cbSize = sizeof(SCROLLINFO);
		si.fMask = SIF_PAGE | SIF_RANGE;
		si.nMin = 0;
		si.nMax = DrawMax / FontHeight;
		si.nPage = client.Height() / FontHeight;
		m_Scroll.SetScrollInfo(&si);
		m_Scroll.ShowScrollBar(1);
	}
	else
	{
		m_Scroll.SetScrollPos(0);
		m_Scroll.ShowScrollBar(0);
	}


	// this makes tabs
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CChildFrame* pChild = (CChildFrame*)pFrame->GetActiveFrame();
	if (pChild->m_wndView.m_hWnd == this->m_hWnd)
	{
		pChild->SetWindowText(m_pClass->Name.GetString());
		pChild->SetTitle(m_pClass->Name.GetString());
		pFrame->UpdateFrameTitleForDocument(m_pClass->Name.GetString());

		//char txt[256];
		//sprintf (txt,"Total HotSpots: %i",HotSpots.size());

		//dc.SetTextColor(0xFF0000);
		//dc.SetBkColor(0x000000);
		//dc.SetBkMode(OPAQUE);
		//dc.DrawText(txt,-1,&CRect(0,0,0,0), DT_LEFT | DT_NOCLIP | DT_NOPREFIX);
	}

	//for (UINT i=0; i < HotSpots.size();i++)
	//{
	//	dc.DrawFocusRect(HotSpots[i].Rect);
	//}
}