Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

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


Автор: 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);
 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS