Exemplo n.º 1
0
void CResizableSheet::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	MinMaxInfo(lpMMI);

	CTabCtrl* pTab = GetTabControl();
	if (!pTab)
		return;

	int nCount = GetPageCount();
	for (int idx = 0; idx < nCount; ++idx)
	{
		if (IsWizard())	// wizard mode
		{
			// use pre-calculated margins
			CRect rectExtra(-CPoint(m_sizePageTL), -CPoint(m_sizePageBR));
			// add non-client size
			::AdjustWindowRectEx(&rectExtra, GetStyle(), !(GetStyle() & WS_CHILD) &&
				::IsMenu(GetMenu()->GetSafeHmenu()), GetExStyle());
			ChainMinMaxInfo(lpMMI, *GetPage(idx), rectExtra.Size());
		}
		else	// tab mode
		{
			ChainMinMaxInfoCB(lpMMI, *GetPage(idx));
		}
	}
}
void CResizableSheetEx::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	MinMaxInfo(lpMMI);

	CTabCtrl* pTab = GetTabControl();
	if (!pTab)
		return;

	int nCount = GetPageCount();
	for (int idx = 0; idx < nCount; ++idx)
	{
		if (IsWizard())	// wizard mode
		{
			// use pre-calculated margins
			CRect rectExtra(-CPoint(m_sizePageTL), -CPoint(m_sizePageBR));
			// add non-client size
			::AdjustWindowRectEx(&rectExtra, GetStyle(), !(GetStyle() & WS_CHILD) &&
				::IsMenu(GetMenu()->GetSafeHmenu()), GetExStyle());
			ChainMinMaxInfo(lpMMI, *GetPage(idx), rectExtra.Size());
		}
		else if (IsWizard97())	// wizard 97
		{
			// use pre-calculated margins
			CRect rectExtra(-CPoint(m_sizePageTL), -CPoint(m_sizePageBR));

			if (!(GetPage(idx)->m_psp.dwFlags & PSP_HIDEHEADER))
			{
				// add header vertical offset
				CRect rectLine, rectSheet;
				GetTotalClientRect(&rectSheet);
				GetAnchorPosition(ID_WIZLINEHDR, rectSheet, rectLine);

				rectExtra.top = -rectLine.bottom;
			}
			// add non-client size
			::AdjustWindowRectEx(&rectExtra, GetStyle(), !(GetStyle() & WS_CHILD) &&
				::IsMenu(GetMenu()->GetSafeHmenu()), GetExStyle());
			ChainMinMaxInfo(lpMMI, *GetPage(idx), rectExtra.Size());
		}
		else	// tab mode
		{
			ChainMinMaxInfoCB(lpMMI, *GetPage(idx));
		}
	}
}
Exemplo n.º 3
0
void CResizableFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	MinMaxInfo(lpMMI);

	CView* pView = GetActiveView();
	if (pView == NULL)
		return;

	ChainMinMaxInfo(lpMMI, this, pView);
}
Exemplo n.º 4
0
void CResizableMDIChild::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	// MDI should call default implementation
	CMDIChildWnd::OnGetMinMaxInfo(lpMMI);

	MinMaxInfo(lpMMI);

	CWnd* pView = GetDlgItem(AFX_IDW_PANE_FIRST);//GetActiveView();
	if (pView != NULL)
		ChainMinMaxInfo(lpMMI, this, pView);
}
void CResizableMDIFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
	// MDI should call default implementation
	CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);

	MinMaxInfo(lpMMI);

	BOOL bMaximized = FALSE;
	CMDIChildWnd* pChild = MDIGetActive(&bMaximized);
	if (pChild != NULL && bMaximized)
		ChainMinMaxInfo(lpMMI, this, pChild);
}
Exemplo n.º 6
0
void CResizableMinMax::ChainMinMaxInfo(LPMINMAXINFO lpMMI, CWnd* pParentFrame, CWnd* pWnd)
{
    // get the extra size from child to parent
    CRect rectClient, rectWnd;
    if ((pParentFrame->GetStyle() & WS_CHILD) && pParentFrame->IsZoomed())
        pParentFrame->GetClientRect(rectWnd);
    else
        pParentFrame->GetWindowRect(rectWnd);
    pParentFrame->RepositionBars(0, 0xFFFF,
        AFX_IDW_PANE_FIRST, CWnd::reposQuery, rectClient);
    CSize sizeExtra = rectWnd.Size() - rectClient.Size();

    ChainMinMaxInfo(lpMMI, pWnd->GetSafeHwnd(), sizeExtra);
}
void CResizableSplitterWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
    if ((GetStyle() & SPLS_DYNAMIC_SPLIT) &&
        GetRowCount() == 1 && GetColumnCount() == 1)
    {
        CWnd* pPane = GetActivePane();
        if (pPane != NULL)
        {
            // get the extra size from child to parent
            CRect rectClient, rectWnd;
            GetWindowRect(rectWnd);
            pPane->GetWindowRect(rectClient);
            CSize sizeExtra = rectWnd.Size() - rectClient.Size();

            ChainMinMaxInfo(lpMMI, pPane->m_hWnd, sizeExtra);
        }
    }
    else if (!(GetStyle() & SPLS_DYNAMIC_SPLIT))
    {
        ASSERT(m_nCols > 0 && m_nRows > 0);

        CSize sizeMin(0,0), sizeMax(0,0);
        for (int col = 0; col < m_nCols; ++col)
        {
            // calc min and max width for each column
            int min = 0;
            int max = LONG_MAX;
            for (int row = 0; row < m_nRows; ++row)
            {
                CWnd* pWnd = GetPane(row, col);
                // ask the child window for track size
                MINMAXINFO mmiChild = *lpMMI;
                mmiChild.ptMinTrackSize.x = 0;
                mmiChild.ptMaxTrackSize.x = LONG_MAX;
                ::SendMessage(pWnd->GetSafeHwnd(), WM_GETMINMAXINFO, 0, (LPARAM)&mmiChild);
                max = __min(max, mmiChild.ptMaxTrackSize.x);
                min = __max(min, mmiChild.ptMinTrackSize.x);
            }
            // sum all column widths
            if (sizeMax.cx == LONG_MAX || max == LONG_MAX)
                sizeMax.cx = LONG_MAX;
            else
                sizeMax.cx += max + m_cxSplitterGap;
            sizeMin.cx += min + m_cxSplitterGap;
        }
        for (int row = 0; row < m_nRows; ++row)
        {
            // calc min and max height for each row
            int min = 0;
            int max = LONG_MAX;
            for (int col = 0; col < m_nCols; ++col)
            {
                CWnd* pWnd = GetPane(row, col);
                // ask the child window for track size
                MINMAXINFO mmiChild = *lpMMI;
                mmiChild.ptMinTrackSize.y = 0;
                mmiChild.ptMaxTrackSize.y = LONG_MAX;
                ::SendMessage(pWnd->GetSafeHwnd(), WM_GETMINMAXINFO, 0, (LPARAM)&mmiChild);
                max = __min(max, mmiChild.ptMaxTrackSize.y);
                min = __max(min, mmiChild.ptMinTrackSize.y);
            }
            // sum all row heights
            if (sizeMax.cy == LONG_MAX || max == LONG_MAX)
                sizeMax.cy = LONG_MAX;
            else
                sizeMax.cy += max + m_cySplitterGap;
            sizeMin.cy += min + m_cySplitterGap;
        }
        // adjust total size: add the client border and
        // we counted one splitter more than necessary
        sizeMax.cx += 2*m_cxBorder - m_cxSplitterGap;
        sizeMax.cy += 2*m_cyBorder - m_cySplitterGap;
        sizeMin.cx += 2*m_cxBorder - m_cxSplitterGap;
        sizeMin.cy += 2*m_cyBorder - m_cySplitterGap;
        // add non-client size
        CRect rectExtra(0,0,0,0);
        ::AdjustWindowRectEx(&rectExtra, GetStyle(), !(GetStyle() & WS_CHILD) &&
            ::IsMenu(GetMenu()->GetSafeHmenu()), GetExStyle());
        sizeMax += rectExtra.Size();
        sizeMin += rectExtra.Size();
        // set minmax info
        lpMMI->ptMinTrackSize.x = __max(lpMMI->ptMinTrackSize.x, sizeMin.cx);
        lpMMI->ptMinTrackSize.y = __max(lpMMI->ptMinTrackSize.y, sizeMin.cy);
        lpMMI->ptMaxTrackSize.x = __min(lpMMI->ptMaxTrackSize.x, sizeMax.cx);
        lpMMI->ptMaxTrackSize.y = __min(lpMMI->ptMaxTrackSize.y, sizeMax.cy);
    }
}