15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Класс - разделитель окна


Автор: Ran Wainstein

Sample Image - CExSplitter3Wnd.jpg

Introduction

Обычно для разделения окна в "T"-образном виде требуется использовать обычный сплиттер, но когда необходимо быстро это сделать, то приходит на помощь класс CExSplitter3Wndclass , который позволяет разбивать окно на три части любой конфигурации:

PATTERN_5 и PATTERN_6 созданы обычным путём, а остальные варианты с помощью этого класса.

Для создания одного из предложенных вариантов разбиения необходимо :

  1. Отменить функцию OnCreateClient в Вашем SDI MainFrame.
  2. Создать новый объект CExSplitter3Wnd 
  3. Установить стиль и инициализировать видимые размеры
  4. вызвать функцию задания разбивки со следующими параметрами :
    • CWnd* pParent
    • SPLIT_PATTERN SplitPattern
    • CRuntimeClass* pFirstView
    • CRuntimeClass* pSecView
    • CRuntimeClass* pThirdView
    • CCreateContext* pContext

SPLIT_PATTERN определена как enum:

typedef enum 
{
	PATTERN_1 ,
	PATTERN_2 ,
	PATTERN_3 ,
	PATTERN_4 ,
	PATTERN_5 ,
	PATTERN_6 ,

}SPLIT_PATTERN;

Пример:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{
	// TODO: Add your specialized code here and/or call the base class
	
	m_pTopWndSplitter  = new CExSplitter3Wnd;

	m_pTopWndSplitter->SetStyle(WS_CHILD | WS_VISIBLE | WS_BORDER);
	m_pTopWndSplitter->SetFirstViewSize(CSize(100,100));
	m_pTopWndSplitter->SetSecondViewSize(CSize(100,200));
	m_pTopWndSplitter->SetThirdViewSize(CSize(100,100));
	m_pTopWndSplitter->SetPattern(this,PATTERN_1,
                  RUNTIME_CLASS(CTestSplitView),RUNTIME_CLASS(CSecView),
                  RUNTIME_CLASS(CThirdView),pContext);
	return TRUE;
}

Вы так же можете получить размеры каждого окошка путём вызова следующих функций (для каждого окошка First, second, third, имеется своя функция:

void GetFirsWndDim(int* nCurrDim,int* nMinDim);
void GetSecWndDim(int* nCurrDim,int* nMinDim);
void GetThirdWndDim(int* nCurrDim,int* nMinDim);