Создание дочерних окон
Добавлено: 15 фев 2007, 00:29
Помогите со следующей задачкой, а то что-то непонял как работать с дочерними окнами
Программа создаёт два простых окна и демонстрирует работу функции SetParent,
что делает первое окно дочерним второго
Задание
1)Модифицируйте программу таким образом, что б при создании главного
окна (case WM_CREATE) создавались два дочерних окна (стиль окна
WS_CHILD|WS_CAPTION|WS_VISIBLE|WS_SYSMENU) размера приблизительно 0.25 родительского окна
2)Упорядочте дочерние окна с помощью функции TileWindows:
TileWindows(hWnd, MDITILE_HORIZONTAL, NULL, NULL, NULL);
Закрытие будь-какого дочернего окна не должно приводить к закрытию родительского окна
#include <windows.h>
HINSTANCE hIn;
// Прототип функції вікна:
LRESULT CALLBACK WinProc(HWND, UINT,
WPARAM, LONG);
// Прототип функції реєстрація нового віконного класу:
ATOM winclass();
// Прототип функції cтворення вікна:
HWND makeexamplewin();
// Головна функція:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
hIn= hInstance; //Зберегти ідентифікатор прикладної програми;
MSG msg ;// структура для роботи з повідомленнями;
winclass(); //Зареєструвати новий віконний клас;
HWND hWnd1=makeexamplewin(); // Створити перше вікно:
HWND hWnd2=makeexamplewin(); // Створити друге вікно:
ShowWindow(hWnd1, nCmdShow);// відобразити перше вікно;
ShowWindow(hWnd2, nCmdShow);// відобразити друге вікно;
//Зробити перше вікно дочірнім другого:
SetParent( hWnd1, hWnd2);
//Запустити цикл обробки повідомлень:
while(GetMessage(&msg, NULL, 0, 0))
{
//Після одержання повідомлення викликати функцію WindowProc:
DispatchMessage(&msg);
}
return msg.wParam; // Повернути значення wParam;
}
//Функція вікна:
LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg,
WPARAM wParam, LONG lParam)
{
switch (Msg)
{
case WM_DESTROY:
//Виклик функції завершення програми:
PostQuitMessage(0);
break;
//У випадку всіх інших повідомлень їх обробка за замовчуванням:
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
} //Кінець оператора switch.
return 0; //Повернення в Windows;
}
// Функція реєстрації нового віконного класу:
ATOM winclass()
{
WNDCLASS wc; // структура класу вікна;
memset(&wc,0,sizeof(wc));
// Визначити клас вікна:
wc.lpfnWndProc=WinProc; //Ім'я віконної функції;
wc.hInstance=hIn; //Дескриптор прикладної програми;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
//Дескриптор пензля для тла вікна:
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
//Покажчик на рядок з ім'ям класу вікна:
wc.lpszClassName="Examplewinclass";
//Реєструвати клас вікна:
return RegisterClass(&wc);
}
// Функція cтворення вікна:
HWND makeexamplewin()
{
// Створити вікно:
return CreateWindow(
"Examplewinclass", // Довільне ім'я класу вікна;
"First and second windows", // Заголовок вікна;
WS_OVERLAPPEDWINDOW,//стиль вікна;
//Задати розміри й розташування вікна, прийняті за замовчуванням:
CW_USEDEFAULT, // координата x;
CW_USEDEFAULT, // координата y;
CW_USEDEFAULT, // ширина вікна;
CW_USEDEFAULT, // висота вікна;
0, // дескриптор батьківського вікна;
0, // дескриптор меню (меню немає);
hIn, // дескриптор програми;
0); // додаткові дані;
}
Программа создаёт два простых окна и демонстрирует работу функции SetParent,
что делает первое окно дочерним второго
Задание
1)Модифицируйте программу таким образом, что б при создании главного
окна (case WM_CREATE) создавались два дочерних окна (стиль окна
WS_CHILD|WS_CAPTION|WS_VISIBLE|WS_SYSMENU) размера приблизительно 0.25 родительского окна
2)Упорядочте дочерние окна с помощью функции TileWindows:
TileWindows(hWnd, MDITILE_HORIZONTAL, NULL, NULL, NULL);
Закрытие будь-какого дочернего окна не должно приводить к закрытию родительского окна
#include <windows.h>
HINSTANCE hIn;
// Прототип функції вікна:
LRESULT CALLBACK WinProc(HWND, UINT,
WPARAM, LONG);
// Прототип функції реєстрація нового віконного класу:
ATOM winclass();
// Прототип функції cтворення вікна:
HWND makeexamplewin();
// Головна функція:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
hIn= hInstance; //Зберегти ідентифікатор прикладної програми;
MSG msg ;// структура для роботи з повідомленнями;
winclass(); //Зареєструвати новий віконний клас;
HWND hWnd1=makeexamplewin(); // Створити перше вікно:
HWND hWnd2=makeexamplewin(); // Створити друге вікно:
ShowWindow(hWnd1, nCmdShow);// відобразити перше вікно;
ShowWindow(hWnd2, nCmdShow);// відобразити друге вікно;
//Зробити перше вікно дочірнім другого:
SetParent( hWnd1, hWnd2);
//Запустити цикл обробки повідомлень:
while(GetMessage(&msg, NULL, 0, 0))
{
//Після одержання повідомлення викликати функцію WindowProc:
DispatchMessage(&msg);
}
return msg.wParam; // Повернути значення wParam;
}
//Функція вікна:
LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg,
WPARAM wParam, LONG lParam)
{
switch (Msg)
{
case WM_DESTROY:
//Виклик функції завершення програми:
PostQuitMessage(0);
break;
//У випадку всіх інших повідомлень їх обробка за замовчуванням:
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
} //Кінець оператора switch.
return 0; //Повернення в Windows;
}
// Функція реєстрації нового віконного класу:
ATOM winclass()
{
WNDCLASS wc; // структура класу вікна;
memset(&wc,0,sizeof(wc));
// Визначити клас вікна:
wc.lpfnWndProc=WinProc; //Ім'я віконної функції;
wc.hInstance=hIn; //Дескриптор прикладної програми;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
//Дескриптор пензля для тла вікна:
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
//Покажчик на рядок з ім'ям класу вікна:
wc.lpszClassName="Examplewinclass";
//Реєструвати клас вікна:
return RegisterClass(&wc);
}
// Функція cтворення вікна:
HWND makeexamplewin()
{
// Створити вікно:
return CreateWindow(
"Examplewinclass", // Довільне ім'я класу вікна;
"First and second windows", // Заголовок вікна;
WS_OVERLAPPEDWINDOW,//стиль вікна;
//Задати розміри й розташування вікна, прийняті за замовчуванням:
CW_USEDEFAULT, // координата x;
CW_USEDEFAULT, // координата y;
CW_USEDEFAULT, // ширина вікна;
CW_USEDEFAULT, // висота вікна;
0, // дескриптор батьківського вікна;
0, // дескриптор меню (меню немає);
hIn, // дескриптор програми;
0); // додаткові дані;
}