Beispiel #1
0
void CViewContainer::SwitchView(EMainView a_view)
{
	if(a_view >= _MAIN_VIEW_MAX || m_curViewType == a_view)
	{
		return;
	}

	m_curViewType = a_view;

	SendMessage(WM_SETREDRAW, 0);

	switch(a_view)
	{
	case MAIN_VIEW_RENDERED: m_curViewCtrl = m_renderControl; break;
	case MAIN_VIEW_CLASSIC: m_curViewCtrl = m_classicControl; break;
	case MAIN_VIEW_TEXTONLY: m_curViewCtrl = m_textOnlyControl; break;
	}

	if(!m_curViewCtrl->ControlCreated())
	{
		RECT l_viewArea = GetClientRect();
		m_curViewCtrl->CreateControl(0, 0,
			l_viewArea.right - l_viewArea.left, l_viewArea.bottom - l_viewArea.top);
		m_curViewCtrl->SetContextMenu(m_contextMenuHandle, GetParent());
	}

	if(m_nfoData && !m_curViewCtrl->HasNfoData())
	{
		::SetCursor(::LoadCursor(NULL, IDC_WAIT));
		CurAssignNfo();
		::SetCursor(::LoadCursor(NULL, IDC_ARROW));
	}

	if(m_resized)
	{
		OnAfterResize(true);
	}

	m_renderControl->Show(a_view == MAIN_VIEW_RENDERED);
	m_classicControl->Show(a_view == MAIN_VIEW_CLASSIC);
	m_textOnlyControl->Show(a_view == MAIN_VIEW_TEXTONLY);

#if 0
	// we have three controls so we can't reset this here, or
	// 1. load NFO
	// 2. switch to 3rd view
	// 3. switch to 2nd view
	// 4. switch to first view
	// 5. resize window
	// 6. switch to 2nd view
	// 7. switch to 3rd view
	// would cause a wrong control size of the 3rd view control.
	m_resized = false;
#endif

	SendMessage(WM_SETREDRAW, 1);
	::RedrawWindow(GetHwnd(), NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
}
//---------------------------------------------------------------------------
void __fastcall TFormMachine::FormResize(TObject *Sender)
{
  ImageBuffer->Picture->Bitmap->Width  = ClientWidth;
  ImageBuffer->Picture->Bitmap->Height = ClientHeight;
  OnAfterResize();
}
Beispiel #3
0
LRESULT CViewContainer::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_SIZE:
		OnAfterResize(false);
		m_resized = true;
		break;
	case WM_ERASEBKGND:
		// intercept message to avoid flicker during resize
		return 1;
	case WM_PAINT:
		if(m_showInfoBar)
		{
			// we need to paint the splitter manually because
			// we intercept WM_ERASEBKGND.
			RECT l_viewArea = GetClientRect();
			int l_nfoAreaHeight = l_viewArea.bottom - l_viewArea.top - m_infoBarHeight;

			PAINTSTRUCT l_ps;
			HDC l_dc = ::BeginPaint(GetHwnd(), &l_ps);

			RECT l_rect = { 0, l_nfoAreaHeight - ::GetSystemMetrics(SM_CYSIZEFRAME),
				l_viewArea.right - l_viewArea.left, l_nfoAreaHeight };
			::FillRect(l_dc, &l_rect, ::GetSysColorBrush(COLOR_BTNFACE));

			::EndPaint(GetHwnd(), &l_ps);

			return 0;
		}
		else break;
	case WM_LBUTTONDOWN:
		if(IsYOnSplitter(GET_Y_LPARAM(lParam)))
		{
			m_infoBarResizing = true;
			::SetCursor(::LoadCursor(NULL, IDC_SIZENS));
			SetCapture();
		}
		break;
	case WM_LBUTTONUP:
		if(IsYOnSplitter(GET_Y_LPARAM(lParam)))
		{
			m_infoBarResizing = false;
			::SetCursor(::LoadCursor(NULL, IDC_ARROW));
			ReleaseCapture();
		}
		break;
	case WM_MOUSEMOVE:
		if(m_infoBarResizing)
		{
			RECT l_client = GetClientRect();
			int l_infoBarHeight = (l_client.bottom - l_client.top -
				::GetSystemMetrics(SM_CYSIZEFRAME) / 2) - GET_Y_LPARAM(lParam);

			if(l_infoBarHeight > INFOBAR_MINIMUM_HEIGHT && l_infoBarHeight < l_client.bottom - l_client.top - INFOBAR_MINIMUM_HEIGHT)
			{
				m_infoBarHeight = l_infoBarHeight;
				OnAfterResize(false);
			}
		}
		else if(IsYOnSplitter(GET_Y_LPARAM(lParam)))
		{
			m_cursor = IDC_SIZENS;
		}
		else
		{
			m_cursor = IDC_ARROW;
		}
		break;
	case WM_CAPTURECHANGED:
		m_infoBarResizing = false;
		break;
	case WM_SETCURSOR:
		return CUtilWin32GUI::GenericOnSetCursor(m_cursor, lParam);
	}

	return WndProcDefault(uMsg, wParam, lParam);
}