Форум программистов, компьютерный форум CyberForum.ru

Динамическое создание форм (Не MFC) - C++

Восстановить пароль Регистрация
 
Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 11:32     Динамическое создание форм (Не MFC) #1
Допустим есть созданная форма в ресурснике, а в ней есть поле для ввода(Edit Control) и даже кнопка(Button)!
Подскажите пожалуйста, как заставить Button создать еще одно поле для ввода?
ЗЫ:Для тех, кто любит делать умный вид и спрашивать "А на каком языке?", скажу сразу(хоть и так вопрос лежит в разделе С++) на C++!
ЗЫЫ:Не MFC.
ЗЗЫЫ: Заранее благодарен за ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 11:32     Динамическое создание форм (Не MFC)
Посмотрите здесь:

C++ Создание документа в MFC и Win32
Динамическое создание компанентов C++
Динамическое создание функций C++
Динамическое создание массива C++
C++ Динамическое создание структуры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
04.08.2013, 11:47     Динамическое создание форм (Не MFC) #2
Есть два варианта. Можно сделать второе поле заранее, спрятать его (Visible = False), а при нажатии кнопки сделать видимым (ShowWindow). Либо можно по-настоящему создать это поле при обработке нажатия на кнопку функцией CreateWindow.
Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 12:03  [ТС]     Динамическое создание форм (Не MFC) #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Есть два варианта. Можно сделать второе поле заранее, спрятать его (Visible = False), а при нажатии кнопки сделать видимым (ShowWindow). Либо можно по-настоящему создать это поле при обработке нажатия на кнопку функцией CreateWindow.
К сожалению первый вариант не подходит, ибо нужно создать много кнопок, и конструктор не разрешает создать форму меньше. Я понял, что вы ничего не поняли, для этого объясняю: есть окно 400х300, нужно при нажатии на кнопку создать еще одну, на 20px ниже, чем предыдущая, и так далее одна кнопка должна создавать "столбик" кнопок. Второй способ пробовал, но к сожалению он не работал.
Попытки:
C++
1
2
3
4
        if(wParam == IDC_BUTTON2)
        {
            DWORD SecondButton = CreateWindow("button", "SecondButton", WS_VISIBLE, 20, 300, 25, 100, m_hwnd, (HMENU)1001, NULL, (LPVOID)lParam);
        }
.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
04.08.2013, 12:07     Динамическое создание форм (Не MFC) #4
Цитата Сообщение от Misterkat Посмотреть сообщение
Я понял, что вы ничего не поняли
Поди пойми при таких сумбурных "объяснениях". Какая связь между тем, что надо создать много кнопок и "конструктор не разрешает создать форму меньше" - вообще загадка. Ну и разумеется, работают оба способа, было бы желание.
Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 14:19  [ТС]     Динамическое создание форм (Не MFC) #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Поди пойми при таких сумбурных "объяснениях".
Согласен, что хуже объяснить может только пьяный.
Цитата Сообщение от Nick Alte Посмотреть сообщение
Какая связь между тем, что надо создать много кнопок и "конструктор не разрешает создать форму меньше"
Если попробовать создать кнопку с координатами 25х200, а окно попытаться "перетащить" в размер *х199, то в результате окно не станет меньше, ибо там кнопка( SetWindowPos - аналогично)!
Ладно, попытаюсь еще раз объяснить суть:
Есть окно: 400х300, допустим есть кнопка, пока вроде все ясно... При нажатии на кнопку должна появится еще одна, но с координатами предыдущей(первой)+25 px по оси Y, при следующем нажатии первой кнопки должна появиться еще одна с координатами предыдущей(второй)+25 px по оси Y и т.д.
Не работоспособность "скрывания" заключается в том, что кнопок может быть бесконечное(в разумном пределе) количество, а размер окна не должен увеличиваться(не поверите, но даже скролл есть ).

Добавлено через 1 час 52 минуты
Нуу посоны, никто помочь не может что ли?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.08.2013, 14:40     Динамическое создание форм (Не MFC) #6
Цитата Сообщение от Misterkat Посмотреть сообщение
Второй способ пробовал, но к сожалению он не работал.
"не работал" это как? где код?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 15:14     Динамическое создание форм (Не MFC)
Еще ссылки по теме:

C++ Динамическое создание переменных
C++ Создание форм в visual studio
Создание табуляции, MFC в диалоговом окне C++

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

Или воспользуйтесь поиском по форуму:
Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 15:14  [ТС]     Динамическое создание форм (Не MFC) #7
Цитата Сообщение от Jupiter Посмотреть сообщение
где код?
C++
1
2
3
4
5
6
    case WM_COMMAND:
        if(wParam == IDC_BUTTON2)
        {
            HWND SecondButton = CreateWindow("button", "SecondButton", WS_VISIBLE, 20, 300, 25, 100, m_hwnd, (HMENU)1001, NULL, (LPVOID)lParam);
        }
    break;
ЗЫ:Есть подозрения на hInstance = NULL, но не понимаю откуда его взять, если диалог создан в ресурснике...

Добавлено через 27 минут
hInstance получил, но все равно ничего не работает.
C++
1
2
3
4
5
6
7
    case WM_COMMAND:
        if(wParam == IDC_BUTTON2)
        {
            HINSTANCE hInstance = (HINSTANCE)GetWindowLong(m_hwnd, GWL_HINSTANCE);
            HWND SecondButton = CreateWindow("button", "SecondButton", WS_VISIBLE, 20, 300, 25, 100, m_hwnd, (HMENU)1001, hInstance, (LPVOID)lParam);
        }
    break;
Yandex
Объявления
04.08.2013, 15:14     Динамическое создание форм (Не MFC)
Ответ Создать тему
Опции темы

Текущее время: 23:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru