Класс - разделитель окна
Автор: Ran Wainstein
Introduction
Обычно для разделения окна в "T"-образном
виде требуется использовать обычный сплиттер, но
когда необходимо быстро это сделать, то приходит
на помощь класс CExSplitter3Wnd class , который
позволяет разбивать окно на три части любой
конфигурации:
PATTERN_5 и PATTERN_6 созданы обычным путём, а остальные
варианты с помощью этого класса.
Для создания одного из предложенных вариантов
разбиения необходимо :
- Отменить функцию OnCreateClient в Вашем SDI MainFrame.
- Создать новый объект
CExSplitter3Wnd
- Установить стиль и инициализировать видимые
размеры
- вызвать функцию задания разбивки со следующими
параметрами :
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)
{
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);
|