Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

9.3.3. Створення видів у архітектурі «Документ-Вид» (переключення видів з використанням функції ShowWindow)

Приклад створення та переключення декількох видів за допомогою функції ShowWindow знаходиться у папці DISK\Structure\Dpred2.

Створимо додаток з назвою Dpred2, з такими ж параметрами як у попередньому пункті 9.3.2., тільки класів виду буде на 1 більше.

У класі CMainFrame додамо підключення файлів-заголовків:

#include "DpredView1.h"

#include "DpredView2.h"

А також вказівки на вікна:

class CMainFrame : public CFrameWnd

{

.............................................................

CDpredView0 * p0;

CDpredView1 * p1;

CDpredView2 * p2;

int p_view;

.............................................................

};

Змінна p_view необхідна для переключення кнопок на панелі, вона використовується у функції OnCreateClient класу CMainFrame. На рис. 9.11 наведено схему підключення класів вікон у додатку Dpred2.

Рис. 9.11. Схема підключення вікон виду у додатку Dpred2

Функція InitInstance із класу CDpredApp прийме такий вид:

BOOL CDpredApp::InitInstance()

{

.............................................................

CMainFrame* frm = (CMainFrame*)m_pMainWnd;

frm->p0 = (CDpredView0*)frm->GetActiveView();

frm->p1 = new CDpredView1;

frm->p1->pDoc = (CDpredDoc*)frm->GetActiveDocument();

frm->p1->Create (NULL,

NULL,

AFX_WS_DEFAULT_VIEW,

frm->rectDefault,

frm,

AFX_IDW_PANE_FIRST+1,

NULL);

frm->GetActiveDocument()->AddView(frm->p1);

frm->p1->ShowWindow(SW_HIDE);

frm->p2 = new CDpredView2;

frm->p2->pDoc = (CDpredDoc*)frm->GetActiveDocument();

frm->p2->Create (NULL,

NULL,

AFX_WS_DEFAULT_VIEW,

frm->rectDefault,

frm,

AFX_IDW_PANE_FIRST+2,

NULL);

frm->GetActiveDocument()->AddView(frm->p2);

frm->p2->ShowWindow(SW_HIDE);

frm->p_view = 0;

return TRUE;

}

В цій функції створюються одразу три вікна, одне з яких виводиться на екран, а інші сховані, але знаходяться у пам’яті.

Для зміни вікон видів використаємо функції ShowWindow та SetDlgCtrlID, які вже були описані у п. 9.2.2. Додамо в клас CMainFrame функції OnView0, OnView1, OnView2 для виклику вікон виду:

void CMainFrame::OnView0()

{

((CDpredDoc*)GetActiveDocument())->str

= "Представление 0";

p_view = 0;

p0->ShowWindow(SW_HIDE);

p1->ShowWindow(SW_HIDE);

p2->ShowWindow(SW_HIDE);

p1->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);

p2->SetDlgCtrlID(AFX_IDW_PANE_FIRST+2);

p0->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

p0->ShowWindow(SW_SHOW);

RecalcLayout();

}

void CMainFrame::OnView1()

{

((CDpredDoc*)GetActiveDocument())->str

= " Представление 1";

p_view = 1;

p0->ShowWindow(SW_HIDE);

p1->ShowWindow(SW_HIDE);

p2->ShowWindow(SW_HIDE);

p0->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);

p2->SetDlgCtrlID(AFX_IDW_PANE_FIRST+2);

p1->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

p1->ShowWindow(SW_SHOW);

RecalcLayout();

}

void CMainFrame::OnView2()

{

((CDpredDoc*)GetActiveDocument())->str

= " Представление 2";

p_view = 2;

p0->ShowWindow(SW_HIDE);

p1->ShowWindow(SW_HIDE);

p2->ShowWindow(SW_HIDE);

p0->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);

p1->SetDlgCtrlID(AFX_IDW_PANE_FIRST+2);

p2->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

p2->ShowWindow(SW_SHOW);

RecalcLayout();

}

Вікнам даються різні ідентифікатори, але як уже було сказано, що лише вікна з AFX_IDW_PANE_FIRST виводяться на екран, тому потрібному вікну вказується саме ця константа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]