Элемент ЗАКЛАДКИ (набор страниц)

Страницы работы

Содержание работы

ЛЕКЦИЯ  5

  1. Элемент ЗАКЛАДКИ (набор страниц)

Создадим в ресурсах две формы, которые будут выполнять роль закладок:

На одной форме вставим например CHECK BOX:

Обратите внимание, что стартовая точка положения формы по Y установлена в 20. Это нужно, чтобы форма при появлении на окне не закрыла закладки окна.

На второй форма для примера нанесем два флажка:

На главной форме создадим дополнительную кнопку Форма Z, при нажатии которой будет вызываться форма с закладками:

В тексте главной программы вставим обработчик нажатия кнопки в следующем виде:

//Обработка сообщения о нажатии кнопки Форма Z

case IDC_BUTTON_ZAKL:

FormaZakladki();

break;

он вызывает процедуру открытия окна с закладками. Для примера эта процедура написана в отдельном файле с именем formaZ.c, вставленном в проект:

текст этого файла обеспечивает создание и начальное управление окном с закладками. Не пугайтесь. Внимательно прочитайте текст с пояснениями, наберите и откомпилируйте его.

Файл formaZ.c

#include  <windows.h>

#include  <commctrl.h>

#include  "resource.h"

//нам понадобится описатель программы. Он во внешней переменной

extern  HINSTANCE ghInstance;

void FormaZakladki(HWND);

//процедура обработки сообщений окна с закладками

LRESULT CALLBACK TabControlWndProc(HWND, UINT, UINT, LONG);

//процедура обработки сообщений окна одной закладки

//вообще-то у каждого окна закладки должна быть своя процедура обработки сообщений

//однако чисто для примера сдесь сделано не так

BOOL CALLBACK DialogProc(HWND hDlg, UINT Message, UINT wParam, LONG lParam);

//Текст процедуры создания окна с закладками

void FormaZakladki(HWND hWndDlg)

{

WNDCLASS WndClass;

MSG Msg;

HWND hWnd;

char szClassName[]="TabControl";

//опишем и создадим окно, в котором будут работать закладки

//далее по тексту обращайте внимание на выделенные операторы

//все остальное – обычное оконное приложение

WndClass.style = CS_HREDRAW | CS_VREDRAW;

WndClass.lpfnWndProc=TabControlWndProc;

WndClass.cbClsExtra=0;

WndClass.cbWndExtra=0;

WndClass.hInstance=ghInstance;

WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION);

WndClass.hCursor=LoadCursor(NULL, IDC_ARROW);

WndClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);

WndClass.lpszMenuName="";

WndClass.lpszClassName=szClassName;

if (!RegisterClass(&WndClass))

{          MessageBox(NULL,"Не регистрируется окно", "ERROR", MB_OK);

return;

}

hWnd=CreateWindow(szClassName, "Пример окна с закладками",

WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME &

~WS_MAXIMIZEBOX,

CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,

hWndDlg, NULL, ghInstance, NULL);

if (!hWnd) {MessageBox(NULL,"Не создается окно", "ERROR", MB_OK); return;}

//инициируются элементы управления диалога, если раньше этого не делалось

//InitCommonControls();

ShowWindow(hWnd, 0);

UpdateWindow(hWnd);

while(GetMessage(&Msg, NULL, 0,0))

{          TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

return;

}

//Процедура обработки сообщений окна с закладками

LRESULT CALLBACK TabControlWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)

{

HWND hTabControlWnd;

RECT Rect;

LPNMHDR lpNMHdr;

LPTOOLTIPTEXT lpToolTipText;

static HWND hDlg = 0;

int nTab;

TC_ITEM TC_Item;

switch (Message)

{

case WM_CREATE:

//под размер созданного окна

            GetClientRect(hWnd, &Rect);

//создается окно, имеющее закладки (свойство - WC_TABCONTROL)

            hTabControlWnd = CreateWindow(WC_TABCONTROL, "", WS_VISIBLE |

                                                           WS_TABSTOP | WS_CHILD | TCS_TOOLTIPS,

                                                            0,0,Rect.right, Rect.bottom,

                                                            hWnd, NULL, ghInstance, NULL);

// заполняется структура закладки 1

            TC_Item.mask = TCIF_TEXT;

            TC_Item.iImage = 0;

            TC_Item.pszText = "Страница 1";

//и закладка добавляется к окну

            TabCtrl_InsertItem(hTabControlWnd, 0, &TC_Item);

// заполняется структура закладки 2

            TC_Item.pszText = "Страница 2";

//и закладка добавляется к окну

            TabCtrl_InsertItem(hTabControlWnd, 1, &TC_Item);

// заполняется структура закладки 3

            TC_Item.pszText = "Страница 3";

            TabCtrl_InsertItem(hTabControlWnd, 2, &TC_Item);

//заполняем структуру листа картинок, которые будут украшать закладки

            himl = ImageList_LoadBitmap (ghInstance,

                                     MAKEINTRESOURCE (IDB_BITMAP1),

                                     16, //размер картинки по горизонтали в пикселях (по вертикали

// размер берется по имеющемуся рисунку

                                     2,  //число картинок в загруженном bitmape

                                     CLR_NONE  ) ;

//Привязка картинок к окну с закладками

            TabCtrl_SetImageList(hTabControlWnd, himl);

//на экране создается изображение диалогового окна первой закладки

hDlg=CreateDialog(ghInstance,  MAKEINTRESOURCE (IDD_ZAKL01), hTabControlWnd, DialogProc);

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hWnd,Message, wParam, lParam);

}

//обобщенная процедура обработки сообщений от окон закладок

//(ничего не делает, потому и пригодна для всех)

BOOL CALLBACK DialogProc(HWND hDlg, UINT Message, UINT wParam, LONG lParam)

{

switch (Message)

{

}

return 0;

}

После компилирования, и запуска программы должно получится что-то вроде:

Обратите внимание на иконки в закладках. Они получены из ресурса bitmap с индексом IDB_BITMAP1:

Назначение параметров использованных функций, полей использованных структур смотрите, естественно, в MSDN.

Похожие материалы

Информация о работе