[팁] SplitterWnd 에서 Pane을 Swap 시키기
개발 2007. 7. 31. 10:41336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
WTL 7.5 버전을 사용중인데.. SplitterWnd에 Pane 을 서로 교환(Swap)할 수 있는 기능이 없다.
SwapPane() 이라는 함수가 있으면 좋을텐데..
SwapPane() 이라는 함수가 있으면 좋을텐데..
그래서 SwapPane의 기능을 아래처럼 구현 해보았다.
if( m_wndSplitter.GetSplitterPane(SPLIT_PANE_TOP) == m_wndHeadline )
{
m_wndSplitter.SetSplitterPane(SPLIT_PANE_TOP, m_wndSection);
m_wndSplitter.SetSplitterPane(SPLIT_PANE_BOTTOM, m_wndHeadline); }
else
{
m_wndSplitter.SetSplitterPane(SPLIT_PANE_TOP, m_wndHeadline);
m_wndSplitter.SetSplitterPane(SPLIT_PANE_BOTTOM, m_wndSection);
}
그러나 atlsplit.h의 소스에 아래처럼 되어있어서 ATLASSERT가 발생하였다..
bool SetSplitterPane(int nPane, HWND hWnd, bool bUpdate = true) { ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT); if(nPane != SPLIT_PANE_LEFT && nPane != SPLIT_PANE_RIGHT) return false; m_hWndPane[nPane] = hWnd; ATLASSERT(m_hWndPane[SPLIT_PANE_LEFT] == NULL ||
m_hWndPane[SPLIT_PANE_RIGHT] == NULL ||
m_hWndPane[SPLIT_PANE_LEFT] != m_hWndPane[SPLIT_PANE_RIGHT]); if(bUpdate) UpdateSplitterLayout(); return true; }
음.. 그래서 그냥 아래처럼 처리하였다..
좀 깔끔하지는 않지만.. 일단 해결..if( m_wndSplitter.GetSplitterPane(SPLIT_PANE_TOP) == m_wndHeadline ) { m_wndSplitter.m_hWndPane[SPLIT_PANE_TOP] = m_wndSection; m_wndSplitter.m_hWndPane[SPLIT_PANE_BOTTOM] = m_wndHeadline; m_wndSplitter.UpdateSplitterLayout(); } else { m_wndSplitter.m_hWndPane[SPLIT_PANE_TOP] = m_wndHeadline; m_wndSplitter.m_hWndPane[SPLIT_PANE_BOTTOM] = m_wndSection; m_wndSplitter.UpdateSplitterLayout(); }