На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Creating a Tab Control



The example in this section creates a tab control and displays it in the client area of the application's main window. The application displays a third window (a static control) in the display area of the tab control. The parent window positions and sizes the tab control and static control when it processes the WM_SIZE message.

There are seven tabs, one for each day of the week. When the user selects a tab, the application displays the name of the corresponding day in the static control. The following global variables are used in this example.

// Global variables

HINSTANCE g_hinst; // handle of application instance
char g_achTemp[256]; // temporary buffer for strings
HWND g_hwndMain; // main application window
HWND g_hwndTab; // tab control
HWND g_hwndDisplay; // handle of static control in
// tab control's display area


The following function creates the tab control and adds a tab for each day of the week. The names of the days are defined as string resources, consecutively numbered starting with IDS_FIRSTDAY (defined in the application's header file). Both the parent window and the tab control must have the WS_CLIPSIBLINGS window style. The application's initialization function calls this function after creating the main window.

// DoCreateTabControl - creates a tab control, sized to fit the
// specified parent window's client area, and adds some tabs.
// Returns the handle of the tab control.
// hwndParent - parent window (the application's main window)

HWND WINAPI DoCreateTabControl(HWND hwndParent)
{
RECT rcClient;
HWND hwndTab;
TC_ITEM tie;
int i;

// Get the dimensions of the parent window's client area, and
// create a tab control child window of that size.

GetClientRect(hwndParent, &rcClient);
InitCommonControls();
hwndTab = CreateWindow(
WC_TABCONTROL, "",
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, NULL, g_hinst, NULL
);
if (hwndTab == NULL)
return NULL;

// Add tabs for each day of the week.
tie.mask = TCIF_TEXT | TCIF_IMAGE;
tie.iImage = -1;
tie.pszText = g_achTemp;


for (i = 0; i < 7; i++) {
LoadString(g_hinst, IDS_FIRSTDAY + i,
g_achTemp, sizeof(g_achTemp));
if (TabCtrl_InsertItem(hwndTab, i, &tie) == -1) {
DestroyWindow(hwndTab);
return NULL;
}
}
return hwndTab;
}


The following function creates the static control that occupies the tab control's display area. The application's initialization function calls this function after creating the main window and the tab control.

// DoCreateDisplayWindow - creates a child window (a static
// control) to occupy the tab control's display area.
// Returns the handle of the static control.
// hwndParent - parent window (the application's main window)

HWND WINAPI DoCreateDisplayWindow(HWND hwndParent)
{
HWND hwndStatic = CreateWindow("STATIC", "",
WS_CHILD | WS_VISIBLE | WS_BORDER,
0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
hwndParent, NULL, g_hinst, NULL);


return hwndStatic;
}


Following are the relevant portions of the application's window procedure. The application processes the WM_SIZE message to position and size the tab control and the static control. To determine the appropriate position and size for the static control, this example sends the tab control a TCM_ADJUSTRECT message (by using the TabCtrl_AdjustRect macro).
When a tab is selected, the tab control sends a WM_NOTIFY message, specifying the TCN_SELCHANGE notification message. The application processes this notification message by setting the text of the static control.

// MainWindowProc - processes the message for the main window class.
// The return value depends on the message.
// hwnd - handle of the window
// uMsg - identifier for the message
// wParam - message-specific parameter
// lParam - message-specific parameter

LRESULT CALLBACK MainWindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg) {
case WM_SIZE: {
HDWP hdwp;

RECT rc;

// Calculate the display rectangle, assuming the
// tab control is the size of the client area.
SetRect(&rc, 0, 0,
LOWORD(lParam), HIWORD(lParam));
TabCtrl_AdjustRect(g_hwndTab, FALSE, &rc);

// Size the tab control to fit the client area.
hdwp = BeginDeferWindowPos(2);
DeferWindowPos(hdwp, g_hwndTab, NULL, 0, 0,

LOWORD(lParam), HIWORD(lParam),
SWP_NOMOVE | SWP_NOZORDER
);

// Position and size the static control to fit the
// tab control's display area, and make sure the
// static control is in front of the tab control.
DeferWindowPos(hdwp,
g_hwndDisplay, HWND_TOP, rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top, 0

);
EndDeferWindowPos(hdwp);
}
break;

case WM_NOTIFY:
switch (HIWORD(wParam)) {
case 0:
.
. // menu command processing
.

case TCN_SELCHANGE: {
int iPage = TabCtrl_GetCurSel(g_hwndTab);
LoadString(g_hinst, IDS_FIRSTDAY + iPage,

g_achTemp, sizeof(g_achTemp));
SendMessage(g_hwndDisplay, WM_SETTEXT, 0
(LPARAM) g_achTemp);
}
break;
}
break;

.
. // additional message processing
.

default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Создание Управления Таб.



Пример в этой секции создает управление таб. и отображает это в области клиента прикладного основного окна. Приложение отображает третье окно ( статическое управление) в дисплейной области управления таб.. Родительское окно позиционирует и измеряет управление таб. и статического управления когда оно обрабатывает сообщение WM_SIZE.

Есть семь таб., за каждого дня недели. Когда потребитель выбирается таб., приложение отображает имя соответствующего дня на статическом управлении. Следующие глобальные переменные использованы в этом примере.

// Глобальные переменные

g_hinst HINSTANCE; // ручка прикладного символа примера g_achTemp[256]; // временный буфер для строк HWND g_hwndMain; // основное прикладное окно HWND g_hwndTab; // управление таб. HWND g_hwndDisplay; // ручка статического управления в // управляющей дисплейной области таб.


Следующее функции создает управление таб. и добавляет таб. в течение каждого дня недели. Имена дней определены как ресурсы строки, последовательно нумерованного начинать с IDS_FIRSTDAY (определенное в прикладном файле заголовка). Как родительское окно так и управление таб. должны иметь стиль окна WS_CLIPSIBLINGS. Прикладная функция инициализации вызывает эту функцию после создания основного окна.

// DoCreateTabControl - СОЗДАЕТ управление таб., измеренное, чтобы устанавливать // определенную область клиента родительского окна и добавлять некоторые таб..
// Возврат ручка управления таб..
// hwndParent - Родительское окно ( прикладное основное окно)

HWND WINAPI DoCreateTabControl(HWND hwndParent)
{
RECT rcClient;
HWND hwndTab;
соединение TC_ITEM;
int i;

// Получите измерения области клиента родительского окна, и // создавать окно управляющего ребенка таб. этого размера.

GetClientRect(hwndParent, &rcClient);
InitCommonControls();
hwndTab = CreateWindow( WC_TABCONTROL, "", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 0, 0, rcClient.right, rcClient.bottom, hwndParent, НЕДЕЙСТВИТЕЛЬНЫЙ, g_hinst, НЕДЕЙСТВИТЕЛЬНЫЙ
);
если (hwndTab == НЕДЕЙСТВИТЕЛЬНЫЙ) обратный НЕДЕЙСТВИТЕЛЬНЫЙ;

// Добавьте таб. в течение каждого дня недели.
tie.mask = TCIF_TEXT | TCIF_IMAGE;
tie.iImage = -1;
tie.pszText = g_achTemp;


для (i = 0; я < 7; я++) { LoadString(g_hinst, IDS_FIRSTDAY + я, g_achTemp, sizeof(g_achTemp));
если (TabCtrl_InsertItem(hwndTab, я, &соединение) == -1) { DestroyWindow(hwndTab);
возвращайте НЕДЕЙСТВИТЕЛЬНЫЙ;
}
}
возвращайте hwndTab;
}


Следующее функции создает статическое управление, которое занимает управляющую дисплейную область таб.. Прикладная функция инициализации вызывает этой функции после создания основного окна и управление таб..

// DoCreateDisplayWindow - СОЗДАЕТ окно ребенка ( статическое // управление), чтобы занимать управляющую дисплейную область таб..
// Возврат ручка статического управления.
// hwndParent - Родительское окно ( прикладное основное окно)

HWND WINAPI DoCreateDisplayWindow(HWND hwndParent)
{
HWND hwndStatic = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, hwndParent, НЕДЕЙСТВИТЕЛЬНЫЙ, g_hinst, НЕДЕЙСТВИТЕЛЬНЫЙ);


возвращайте hwndStatic;
}


Следующее является важными частями прикладной процедуры окна. Приложение обрабатывает сообщение WM_SIZE, чтобы позиционироваться и размер управление таб. и статическое управление. Чтобы определять подходящую позицию и размер для статического управления, этот пример посылает, таб. управляет сообщением TCM_ADJUSTRECT (используя макро TabCtrl_AdjustRect).
Когда таб. выбрано, управление таб. посылает сообщение WM_NOTIFY, определяющее сообщение уведомления TCN_SELCHANGE. Приложение обрабатывает это сообщение уведомления устанавливая текст статического управления.

// MainWindowProc - ОБРАБАТЫВАЕТ сообщение для основного класса окна.
// Обратная величина зависит от сообщения.
// hwnd - ручка окна // uMsg - идентификатор для сообщения // wParam - сообщений-специфический параметр // lParam - сообщений-специфический параметр

LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
)
{
ключ (uMsg) { случай WM_SIZE: { HDWP hdwp;

rc RECT;

// Вычислите дисплейный прямоугольник, принимая, что // управление таб. является размером области клиента.
SetRect(&rc, 0, 0, LOWORD(lParam), HIWORD(lParam));
TabCtrl_AdjustRect(g_hwndTab, ЛОЖЬ, &rc);

// Размер управление таб., чтобы устанавливать область клиента.
hdwp = BeginDeferWindowPos(2);
DeferWindowPos(hdwp, g_hwndTab, НЕДЕЙСТВИТЕЛЬНЫЙ, 0, 0,

LOWORD(lParam), HIWORD(lParam), SWP_NOMOVE | SWP_NOZORDER
);

// Позиция и размер статическое управление, чтобы устанавливать // управляющую дисплейную область таб. и убеждаться что // статическое управление - перед управлением таб..
DeferWindowPos(hdwp, g_hwndDisplay, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0

);
EndDeferWindowPos(hdwp);
}
прерывание;

случай WM_NOTIFY: ключ (HIWORD(wParam)) { случай 0:
.
. // командная обработка меню
.

случай TCN_SELCHANGE: { int iPage = TabCtrl_GetCurSel(g_hwndTab);
LoadString(g_hinst, IDS_FIRSTDAY iPage +,

g_achTemp, sizeof(g_achTemp));
SendMessage(g_hwndDisplay, WM_SETTEXT, 0 (LPARAM) g_achTemp);
}
прерывание;
}
прерывание;

.
. // дополнительная обработка сообщения
.

умолчание:
возвращайте DefWindowProc(hwnd, uMsg, wParam, lParam);
}
возврат 0;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz