На главную

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, Enumerating, and Sizing Child Windows



You can divide a window's client area into different functional areas by using child windows. Creating a child window is like creating a main window ѕ you use the CreateWindowEx function. To create a window of an application-defined window class, you must register the window class and provide a window procedure before creating the child window. You must give the child window the WS_CHILD style and specify a parent window for the child window when you create it.

The following example divides the client area of an application's main window into three functional areas by creating three child windows of equal size. Each child window is the same height as the main window's client area, but each is one-third its width. The main window creates the child windows in response to the WM_CREATE message, which the main window receives during its own window-creation process. Because each child window has the WS_BORDER style, each has a thin line border. Also, because the WS_VISIBLE style is not specified, each child window is initially hidden. Notice also that each child window is assigned a child-window identifier.

The main window sizes and positions the child windows in response to the WM_SIZE message, which the main window receives when its size changes. In response to WM_SIZE, the main window retrieves the dimensions of its client area by using the GetWindowRect function and then passes the dimensions to the EnumChildWindows function. EnumChildWindows passes the handle of each child window, in turn, to the application-defined EnumChildProc callback function. This function sizes and positions each child window by calling the MoveWindow function; the size and position are based on the dimensions of the main window's client area and the identifier of the child window. Afterward, EnumChildProc calls the ShowWindow function to make the window visible.

#define ID_FIRSTCHILD 100
#define ID_SECONDCHILD 101
#define ID_THIRDCHILD 102

LONG APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam)
HWND hwnd;
UINT uMsg;
UINT wParam;
LONG lParam;
{
RECT rcClient;
int i;

switch(uMsg) {
case WM_CREATE: // creating main window

// Create three invisible child windows.

for (i = 0; i < 3; i++)
CreateWindowEx(
0,
"ChildWClass",

(LPCTSTR) NULL,
WS_CHILD | WS_BORDER,
0,0,0,0,
hwnd,
(HMENU) (int) (ID_FIRSTCHILD + i),
hinst,
NULL);

return 0;

case WM_SIZE: // main window changed size

// Get the dimensions of the main window's client
// area, and enumerate the child windows. Pass the
// dimensions to the child windows during enumeration.


GetClientRect(hwnd, &rcClient);
EnumChildWindows(hwnd, EnumChildProc,
(LPARAM) &rcClient);
return 0;
.
. // Process other messages.
.

}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

BOOL CALLBACK EnumChildProc(hwndChild, lParam)
HWND hwndChild;
LPARAM lParam;
{
LPRECT rcParent;
int i, idChild;

// Retrieve the child-window identifier. Use it to set the

// position of the child window.

idChild = GetWindowLong(hwndChild, GWL_ID);

if (idChild == ID_FIRSTCHILD)
i = 0;
else if (idChild == ID_SECONDCHILD)
i = 1;
else
i = 2;

// Size and position the child window.

rcParent = (LPRECT) lParam;
MoveWindow(hwndChild,
(rcParent->right / 3) * i,
0,
rcParent->right / 3,
rcParent->bottom,
TRUE);


// Make sure the child window is visible.

ShowWindow(hwndChild, SW_SHOW);

return TRUE;
}



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

Создание, перечисляющий, и Измеряя Окно Ребенка



Вы можете поделить область клиента окна в другие функциональные области используя окно ребенка. Создание окна ребенка является похожий созданием основного окна U Вы используете функцию CreateWindowEx. Чтобы создавать окно определенного прикладного класса окна, Вы должны зарегистрировать класс окна и обеспечивать процедуру окна перед созданием окна ребенка. Вы должны дать окну ребенка стиль WS_CHILD и определять родительское окно для окна ребенка когда Вы создаете это.

Следующий пример делит область клиента прикладного основного окна в три функциональных области создавая три окна ребенка равного размера. Каждое окно ребенка является той же высотой как областью клиента основного окна, но каждое - один-третья ширина. Основное окно создает окно ребенка в ответ на сообщение WM_CREATE, которое основное окно получает в течение своего собственного окна-создания процесса. Поскольку каждое окно ребенка имеет стиль WS_BORDER, каждое имеет тонкую границу линии. Также, поскольку стиль WS_VISIBLE не определен, каждое окно ребенка первоначально исчезнуто. Уведомление также, что каждое окно ребенка назначено ребенок-окно идентификатора.

Основное окно измеряет и позиционирует окно ребенка в ответ на сообщение WM_SIZE, которое основное окно получает когда размер изменяется. В ответ на WM_SIZE, основное окно извлекает измерения своей области клиента используя функцию GetWindowRect затем передает измерения в функцию EnumChildWindows. EnumChildWindows ПЕРЕДАЕТ ручку каждого окна ребенка, в свою очередь, в определенную прикладную функцию возврата EnumChildProc. Эта функция измеряет и позиционирует каждое окно ребенка вызывая функцию MoveWindow; размер и позиция основаны в измерениях области клиента основного окна и идентификатор окна ребенка. Впоследствии, EnumChildProc вызывает функцию ShowWindow, чтобы делать окном видимым.

#define ID_FIRSTCHILD 100 #define ID_SECONDCHILD 101 #define ID_THIRDCHILD 102

ДОЛГО (ДЛИНОЙ) APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam) HWND hwnd;
UINT uMsg;
UINT wParam;
ДОЛГО (ДЛИНОЙ) lParam;
{
RECT rcClient;
int i;

ключ(uMsg) {
случай WM_CREATE: // основное окно создания

// Создайте три невидимых окна ребенка.

для (i = 0; я < 3; я++) CreateWindowEx(
0,
"ChildWClass",

(LPCTSTR) НЕДЕЙСТВИТЕЛЬНЫЙ, WS_CHILD | WS_BORDER,
0,0,0,0,
hwnd,
(HMENU) (int) (ID_FIRSTCHILD + Я), hinst, НЕДЕЙСТВИТЕЛЬНЫЙ);

возврат 0;

случай WM_SIZE: // основное окно изменяло размер

// Получите измерения основного клиента / окна/ области и перечисляйте окно ребенка. Передайте // измерения в окно ребенка в течение перечисления.


GetClientRect(hwnd, &rcClient);
EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient);
возврат 0;
.
. // Процесс другие сообщения.
.

}
возвращайте DefWindowProc(hwnd, uMsg, wParam, lParam);
}

BOOL CALLBACK EnumChildProc(hwndChild, lParam) HWND hwndChild;
LPARAM lParam;
{
LPRECT rcParent;
int я, idChild;

// Извлеките ребенка-окна идентификатора. Используйте это, чтобы устанавливать the

// позиция окна ребенка.

idChild = GetWindowLong(hwndChild, GWL_ID);

если (idChild == ID_FIRSTCHILD) i = 0;
еще если (idChild == ID_SECONDCHILD) i = 1;
еще i = 2;

// Размер и позиционирует окно ребенка.

rcParent = (LPRECT) lParam;
MoveWindow(hwndChild, (rcParent->right / 3) * Я,
0,
rcParent->right / 3, rcParent->bottom, ИСТИНА);


// Убедитесь что окно ребенка видимое.

ShowWindow(hwndChild, SW_SHOW);

возвращайтесь ВЕРНО;
}



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