본문 바로가기

Windows/MFC

Spiltter 윈도우의 최소 크기를 지정하기

Splitter bar에 의해서 화면을 나눌 때, Splitter bar의 움직임에 의해서 한 쪽 Pane전체가 가려지는 경우가 있다. 프로그램에 따라서, 이런 기능을 제한하고 싶은 경우가 있다. 즉, Pane이 일정 크기가 될 때까지만 Splitter bar가 움직일 수가 있도록 해 주고 싶은 경우이다. 이것은 CSplitterWnd::m_rectLimit를 이용해서 WM_MOUSEMOVE에서 제한함으로써 구현할 수가 있다. 여기에 제시된 코드는 Splitter bar의 약쪽 Pane의 최소 크기를 지정해 줄 수 있는 코드로, 한번에 3개 이상으로 쪼개진 Splitter Window에서는 작동하지 않고, 2개로 쪼개진 Splitter Window에서 작동한다. 또한, 2개로 쪼개진 Pane의 하나를 다시 2개로 쪼개서 모두 3개의 Pane를 가지는 경우 등에서는 작동한다.


[code]void CMySplitWnd::OnMouseMove(UINT nFlags, CPoint point)
{
    CRect rcBack = m_rectLimit;

    if (m_htTrack == vSplitterBox ||
        m_htTrack >= vSplitterBar1 && m_htTrack <= vSplitterBar15){
        m_rectLimit.top += m_nSMin;
        m_rectLimit.bottom -= m_nEMin;
    }
    else if (m_htTrack == hSplitterBox ||
        m_htTrack >= hSplitterBar1 && m_htTrack <= hSplitterBar15){
        m_rectLimit.left += m_nSMin;
        m_rectLimit.right -= m_nEMin;
    }
    else if (m_htTrack == bothSplitterBox ||
        (m_htTrack >= splitterIntersection1 && m_htTrack <= splitterIntersection225)){
        m_rectLimit.left += m_nSMin;
        m_rectLimit.right -= m_nEMin;
                    
        m_rectLimit.top += m_nSMin;
        m_rectLimit.bottom -= m_nEMin;
    }

    CSplitterWnd::OnMouseMove(nFlags, point);
    
    m_rectLimit = rcBack;
}[/code]

여기에서 m_nSMin은 Splitter bar의 왼쪽 Pane의 최소값이고 m_nEMin은 오른쪽 Pane의 최소값이다.

이 코드가 실행되기 위해서는 다음과 같은 코드가 CPP파일에 포함되어 있어야 한다.

[code]
enum HitTestValue
{
    noHit                 = 0,
    vSplitterBox            = 1,
    hSplitterBox            = 2,
    bothSplitterBox         = 3,        // just for keyboard
    vSplitterBar1         = 101,
    vSplitterBar15         = 115,
    hSplitterBar1         = 201,
    hSplitterBar15         = 215,
    splitterIntersection1 = 301,
    splitterIntersection225 = 525
};
[/code]

'Windows > MFC' 카테고리의 다른 글

최상위 윈도우 만들기 (TopMost)  (0) 2013.10.02
윈도우 폰트 변경 (Font)  (0) 2013.10.02
Splitter bar 크기 변경하기  (0) 2013.10.02
Splitter window 고정하기  (0) 2013.10.02
자동 줄바꿈 Word-wrapping  (0) 2013.10.02