'SplitterWnd'에 해당되는 글 1건

  1. 2007.07.31 [팁] SplitterWnd 에서 Pane을 Swap 시키기 1

[팁] SplitterWnd 에서 Pane을 Swap 시키기

개발 2007. 7. 31. 10:41

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
WTL 7.5 버전을 사용중인데.. SplitterWnd에 Pane 을 서로 교환(Swap)할 수 있는 기능이 없다.
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();
}

좀 깔끔하지는 않지만.. 일단 해결..


: