Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32

Изменение размеров окна согласно введенным данным в диалоговом окне

12.08.2014, 14:07. Показов 1290. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю основное окно приложения с определенными размерами и положением. Добавил пункт меню, вызывающий диалог ввода параметров, по завершении которого хочу изменять размеры основного окна в зависимости от введенных параметров. Использую MoveWindow. Размеры основного окна меняются на долю секунды и тут же возвращаются обратно в те размеры/положение, которые были последними установленными пользователем. Как это победить?
Проще говоря, хочу менять размеры игрового поля в зависимости от введенного количества клеток как в Сапере, но чтобы положение окна (левый верхний угол) сохранялось.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.08.2014, 14:07
Ответы с готовыми решениями:

Изменение размеров рисунка при изменении размеров области вывода (окна)
Нужно сделать так, что бы рисунок менял свой размер при изменении окна... unit Unit1; interface uses Windows, Messages, SysUtils,...

Изменение размеров Image.Picture.LoadFromFile при изменении размеров окна
Подскажите, пожалуйста, какие функции для этого нужны.

Изменение размеров виджета при изменении размеров окна
Здравствуйте! Окно, созданное Qt (в моем случае QMainWindow), можно увеличивать и уменьшать в размерах. А как сделать так, чтобы...

9
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
12.08.2014, 14:09
_Ivana, создайте файл, в котором будете хранить размеры.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
12.08.2014, 14:10
Один из вариантов вы объявили переменные в которых храните размер окна не статическими. Но это только предположение. Оконную процедуру в студию.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
12.08.2014, 14:16  [ТС]
Ryuk, имхо это как-то из пушки по воробьям...
Ilot, я вообще не заводил переменных, хранящих размер окна. У меня переменные - количество клеток по горизонтали/вертикали и ширина клетки в пикселях - все глобальные. И вызываю MoveWindow с параметрами - произведение количества клеток на ширину клетки.
ЗЫ код порядка 1000 строк, хотя могу вырезать нужные куски... Может дело в стилях класса/окна?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
12.08.2014, 14:21
Цитата Сообщение от _Ivana Посмотреть сообщение
Может дело в стилях класса/окна?
Нет. Гадать на небесных кренделях смысла не вижу - нужен код процедуры.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
12.08.2014, 14:37  [ТС]
Хорошо. Для упрощения выложу код, который двигает окно в строго определенное положение. Вот код (если вырезал не все, скажите. приведу остальное)
Кликните здесь для просмотра всего текста
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
void SetGameParameters(HWND hWnd)
{
    MoveWindow(hWnd, 0, 0, 500, 500, TRUE); 
}
void RegisterSettingsDialogClass(HWND hWnd) 
{
  WNDCLASSEX wc = {0};
  wc.cbSize           = sizeof(WNDCLASSEX);
  wc.lpfnWndProc      = (WNDPROC) SettingsDialogProc;
  wc.hInstance        = hInst;
  wc.hbrBackground    = GetSysColorBrush(COLOR_3DFACE);
  wc.lpszClassName    = TEXT("DialogClass");
  RegisterClassEx(&wc);
}
void SettingsDialogBox(HWND hWnd)
{
  CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_TOPMOST,  TEXT("DialogClass"), TEXT("Dialog Box"), 
        WS_VISIBLE | WS_SYSMENU | WS_CAPTION , 100, 100, 200, 150, 
        NULL, NULL, hInst,  NULL);
}
LRESULT CALLBACK SettingsDialogProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch(msg)  
    {
    case WM_CREATE:
        CreateWindow(TEXT("button"), TEXT("Ok"),    
            WS_VISIBLE | WS_CHILD ,
            50, 50, 80, 25,        
            hWnd, (HMENU) 1, NULL, NULL);  
        break;
    case WM_COMMAND:
        SetGameParameters(hWnd);
        DestroyWindow(hWnd);
        break;
    case WM_CLOSE:
        DestroyWindow(hWnd);
        break;       
    }
    return (DefWindowProc(hWnd, msg, wParam, lParam));
}


ЗЫ у меня изменяются размеры/положение если я вешаю это изменение на нажатие клавиши основного окна. Но не меняются, если вызов из окна диалога через меню.

Добавлено через 9 минут
Простите, наверное я тупой и меняю размеры не основного окна, а открывшегося окна диалога введения параметров, которое после этого тут же закрываю ... А надо - его владельца. Сейчас подумаю как это сделать...
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
12.08.2014, 14:39
Во первых по хорошему следует убрать разрушение окна из секции обработки команд. Да и сама обработка команд у вас мягко говоря отсутствует. Глобальных переменных тоже не видно...

Добавлено через 1 минуту
Цитата Сообщение от _Ivana Посмотреть сообщение
А надо - его владельца. Сейчас подумаю как это сделать...
Передовать дескриптор родительского окна функции MoveWindow.
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
12.08.2014, 14:48  [ТС]
Спасибо, причины ошибки ясны, и что делать тоже ясно. Непонятно только откуда взять дескриптор родительского окна - не хочется его тоже делать глобальной переменной. А можно ли его получить из дескриптора окна ввода параметров - буду читать инет...

Добавлено через 3 минуты
Он у меня поступает входным параметром в SettingsDialogBox, а дальше я создаю окно ввода параметров, но никак и никуда не передаю в него дескриптор основного окна.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
12.08.2014, 14:53
Достаточно воспользоваться функцией FindWindow. Первый параметр которой имя класса окна верхнего уровня, второй имя самого окна. Возвращает нужный вам дескриптор.
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
12.08.2014, 15:04  [ТС]
Еще раз спасибо. Получается, что если я при создании окна передаю ему параметр идентификатор родительского окна, то в коллбэке нового окна я не имею прямого доступа к родительскому? Неудобно как-то, но переживу, буду искать окна по именам/классам.

Добавлено через 4 минуты
Все получилось, спасибо за науку!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2014, 15:04
Помогаю со студенческими работами здесь

Изменение размеров окна при изменении размеров виджета
Доброго времени суток, господа программисты! Возникла такая ситуация: есть окно программы, в нем виджет, который увеличивается при...

Изменение данных в ячейках в зависимости от ввода в диалоговом окне
Добрый день, Имеется файл, в котором часть ячеек неизменны, а часть нужно изменять в зависимости от того, кто открыл файл. При отркытии...

RUN TIME изменение пользователем размеров PICTURE в окне
Необходимо дать пользователю изменять размеры PICTURE в окне, примерно так же,как это мохно делать с формой. Возможно ли это взведением...

Изменение размеров окна
Здравствуйте, пишу первое приложение на OpenGl и не могу разобраться: как сделать так, чтобы окно вывода меняло размер вместе с размером...

Изменение размеров окна
моя програма виглядає так: http://img98.imageshack.us/img98/4091/screenshot1770.jpg когда я тикаю "Развернуть" то получаеца...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru