Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Gourhal
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 15
1

Создание окон

13.02.2013, 10:55. Просмотров 1276. Ответов 1
Метки нет (Все метки)

Нужно сделать, чтобы дочерние окна в этой программе были 1/4 размера главного окна. Никак не могу это сделать, если присутствует функция CascadeWindows(hWnd,MDITILE_HORIZONTAL,NULL,NULL,NULL)... Если ее убираю, то размеры выставляются. Как сделать, чтобы вместе с этой функцией я мог изменить размеры дочерних окон?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <windows.h>
HINSTANCE hInst;
// Прототип функції вікна:
LRESULT CALLBACK WinProc(HWND, UINT,
WPARAM, LONG);
// Прототип функції реєстрація нового віконного класу:
ATOM winclass();
ATOM winclassdoch();
// Прототипи функцій cтворення вікна:
HWND makeexamplewin();
HWND makeexamplewindoch();
// Головна функція:
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
//Зберегти ідентифікатор прикладної програми;
hInst= hInstance;
MSG msg ;// структура для роботи з повідомленнями;
winclass(); //Зареєструвати новий віконний клас;
HWND hWnd2=makeexamplewin(); // Створити друге вікно:
winclassdoch();
HWND hWnd1=makeexamplewindoch(); // Створити перше вікно:
HWND hWnd3=makeexamplewindoch(); // Створити третє вікно:
HWND hWnd4=makeexamplewindoch(); // Створити четверте вікно:
HWND hWnd5=makeexamplewindoch(); // Створити п'яте вікно:
ShowWindow(hWnd1, nCmdShow);// відобразити перше вікно;
ShowWindow(hWnd2, nCmdShow);// відобразити друге вікно;
ShowWindow(hWnd3, nCmdShow);// відобразити третє вікно;
ShowWindow(hWnd4, nCmdShow);// відобразити четверте вікно;
ShowWindow(hWnd5, nCmdShow);// відобразити п'яте вікно;
//Зробити вікна дочірнім другого:
SetParent( hWnd1, hWnd2);
SetParent( hWnd3, hWnd2);
SetParent( hWnd4, hWnd2);
SetParent( hWnd5, 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)
{
CascadeWindows(hWnd,MDITILE_HORIZONTAL,NULL,NULL,NULL);
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=hInst; //Дескриптор прикладної програми;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
//Дескриптор пензля для тла вікна:
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
//Покажчик на рядок з ім'ям класу вікна:
wc.lpszClassName="Examplewinclass";
//Реєструвати клас вікна:
return RegisterClass(&wc);
}
ATOM winclassdoch()
{
WNDCLASS wc; // структура класу вікна;
memset(&wc,0,sizeof(wc));
// Визначити клас вікна:
wc.lpfnWndProc=WinProc; //Ім'я віконної функції;
wc.hInstance=hInst; //Дескриптор прикладної програми;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
//Дескриптор пензля для тла вікна:
wc.hbrBackground= GetStockObject(LTGRAY_BRUSH);
//Покажчик на рядок з ім'ям класу вікна:
wc.lpszClassName="DochEx";
//Реєструвати клас вікна:
return RegisterClass(&wc);
}
// Функція cтворення головного вікна:
HWND makeexamplewin()
{
// Створити вікно:
return CreateWindow(
"Examplewinclass", // Довільне ім'я класу вікна;
"Main", // Заголовок вікна;
WS_OVERLAPPEDWINDOW,//стиль вікна;
//Задати розміри й розташування вікна, прийняті за замовчуванням:
CW_USEDEFAULT, // координата x;
CW_USEDEFAULT, // координата y;
960,//CW_USEDEFAULT, // ширина вікна;
768,//CW_USEDEFAULT, // висота вікна;
0, // дескриптор батьківського вікна;
0, // дескриптор меню (меню немає);
hInst, // дескриптор програми;
0); // додаткові дані;
}
// Функція cтворення дочірнього вікна:
HWND makeexamplewindoch()
{
// Створити вікно:
return CreateWindow(
"DochEx", // Довільне ім'я класу вікна;
"Doch", // Заголовок вікна;
WS_OVERLAPPEDWINDOW,//стиль вікна;
//Задати розміри й розташування вікна, прийняті за замовчуванням:
CW_USEDEFAULT, // координата x;
CW_USEDEFAULT, // координата y;
480,//CW_USEDEFAULT, // ширина вікна;
384,//CW_USEDEFAULT, // висота вікна;
0, // дескриптор батьківського вікна;
0, // дескриптор меню (меню немає);
hInst, // дескриптор програми;
0); // додаткові дані;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2013, 10:55
Ответы с готовыми решениями:

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

Создание окон в потоке
Просьба помочь! Окно нормально создается при нажатии на кнопку: LRESULT...

Создание диалоговых окон
Доброго времени суток, есть полное непонимание в создание диалогового окна......

создание-уничтожение окон
Вообщем проблема следующая: Создаю окно, работаю с ним, закрываю, создаю...

Создание 2-х параллельно работающих окон
Не судите строго.Недавно начал изучать visual c++.Сделал программу, но никак не...

1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26372 / 17695 / 7006
Регистрация: 22.10.2011
Сообщений: 31,149
Записей в блоге: 6
13.02.2013, 14:11 2
Gourhal, у тебя же при каждом событии (т.е., при каждом заходе в WinProc) вызывается CascadeWindows. Если вызвать её один раз, скажем, при показе главного окна - то размер будет правильным.

А вообще - непонятно зачем создавать отдельные окна, а потом им родителем назначать главное, если можно сразу создавать их как дочерние (9-ый параметр CreateWindow для этого и предназначен)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2013, 14:11

Создание 2-х типов дочерних окон
Помогите, совсем профан в этом. Не создается второе дочернее окно. В чем...

Создание своих дочерних окон
Всем здрасьте ! У меня проблема с Моими дочерними окнами. Может где надо...

Создание 2-х окон разных классов
Доброго дня! Возникла проблемка с регистрацией классов окон. Необходимо создать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru