コード例 #1
0
ファイル: WindowClasses.cpp プロジェクト: eladkarako/locate32
void CMDIChildWnd::ActivateFrame(int nCmdShow)
{
	BOOL bVisibleThen=(GetStyle()&WS_VISIBLE)!=0;
	
	if (nCmdShow == -1)
	{
		BOOL bMaximized;
		m_pParent->MDIGetActive(&bMaximized);

		DWORD dwStyle=GetStyle();
		if (bMaximized || (dwStyle&WS_MAXIMIZE))
			nCmdShow=SW_SHOWMAXIMIZED;
		else if (dwStyle&WS_MINIMIZE)
			nCmdShow=SW_SHOWMINIMIZED;
	}

	CFrameWnd::ActivateFrame(nCmdShow);

	::SendMessage(m_pParent->m_hWndMDIClient,WM_MDIREFRESHMENU,0,0);

	BOOL bVisibleNow=(GetStyle()&WS_VISIBLE)!=0;
	if (bVisibleNow==bVisibleThen)
		return;

	if (!bVisibleNow)
	{
		HWND hWnd=(HWND)::SendMessage(m_pParent->m_hWndMDIClient,WM_MDIGETACTIVE,0,0);
		if (hWnd!=m_hWnd)
			return;
		
		m_pParent->MDINext();

		hWnd=(HWND)::SendMessage(m_pParent->m_hWndMDIClient,WM_MDIGETACTIVE,0,0);
		if (hWnd==m_hWnd)
			OnMDIActivate(NULL,m_hWnd);
	}
	else
		OnMDIActivate(m_hWnd,NULL);
}
コード例 #2
0
ファイル: WINMDI.CPP プロジェクト: VectorDM/VC98
void CMDIChildWnd::ActivateFrame(int nCmdShow)
{
	BOOL bVisibleThen = (GetStyle() & WS_VISIBLE) != 0;
	CMDIFrameWnd* pFrameWnd = GetMDIFrame();
	ASSERT_VALID(pFrameWnd);

	// determine default show command
	if (nCmdShow == -1)
	{
		// get maximized state of frame window (previously active child)
		BOOL bMaximized;
		pFrameWnd->MDIGetActive(&bMaximized);

		// convert show command based on current style
		DWORD dwStyle = GetStyle();
		if (bMaximized || (dwStyle & WS_MAXIMIZE))
			nCmdShow = SW_SHOWMAXIMIZED;
		else if (dwStyle & WS_MINIMIZE)
			nCmdShow = SW_SHOWMINIMIZED;
	}

	// finally, show the window
	CFrameWnd::ActivateFrame(nCmdShow);

	// update the Window menu to reflect new child window
	CMDIFrameWnd* pFrame = GetMDIFrame();
	::SendMessage(pFrame->m_hWndMDIClient, WM_MDIREFRESHMENU, 0, 0);

	// Note: Update the m_bPseudoInactive flag.  This is used to handle the
	//  last MDI child getting hidden.  Windows provides no way to deactivate
	//  an MDI child window.

	BOOL bVisibleNow = (GetStyle() & WS_VISIBLE) != 0;
	if (bVisibleNow == bVisibleThen)
		return;

	if (!bVisibleNow)
	{
		// get current active window according to Windows MDI
		HWND hWnd = (HWND)::SendMessage(pFrameWnd->m_hWndMDIClient,
			WM_MDIGETACTIVE, 0, 0);
		if (hWnd != m_hWnd)
		{
			// not active any more -- window must have been deactivated
			ASSERT(!m_bPseudoInactive);
			return;
		}

		// check next window
		ASSERT(hWnd != NULL);
		pFrameWnd->MDINext();

		// see if it has been deactivated now...
		hWnd = (HWND)::SendMessage(pFrameWnd->m_hWndMDIClient,
			WM_MDIGETACTIVE, 0, 0);
		if (hWnd == m_hWnd)
		{
			// still active -- fake deactivate it
			ASSERT(hWnd != NULL);
			OnMDIActivate(FALSE, NULL, this);
			m_bPseudoInactive = TRUE;   // so MDIGetActive returns NULL
		}
	}
	else if (m_bPseudoInactive)
	{
		// if state transitioned from not visible to visible, but
		//  was pseudo deactivated -- send activate notify now
		OnMDIActivate(TRUE, this, NULL);
		ASSERT(!m_bPseudoInactive); // should get set in OnMDIActivate!
	}
}