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]
[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 |