![]() |
|
![]() ![]() ![]() |
|
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Здраст,Проблема есть:нужно в приложении(MFC) разместить неизвестно сколько кнопок,флажковразлических статических функций,соответственно с разными параметрами,координатами(в зависемости от загружаемого файла).С помощью CreateWindow() создавать не хочу(Совсем не знаю WinAPI);.Чем пользоваться не знаю.Если кто даст список нужных функций или ссылку туда где их я могу найти(только не MSDN!)
![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Любой элемент формы имеет метод Create()
Пример для кнопки
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Спасибо,но сам Create не работает(pParentWnd не известен,обьявляю переменную,инициализирую,но не работает:Выдает ошибку при компонвке в одном из ASSERTов),а работает CreateWindow(ИЗ WinApi).Пока я не занелся собственно динамической частью программы ,но смагу ли я с этими кнопками работать.Скажем как мне задать ее индефикатор в GetDlgItem(),или обьявить переменную связанную с этим элементом формы?
ЗЫ Coocky ,Если надо выделить в отдельную тему на форуме скажи,но вроде по теме(ИМХО) -------------------- Жизнь - печальная штука. |
|||
|
||||
Coocky |
|
||||||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Чушь, всю жизнь создавал! Дай код создания! Я так подозреваю, что ты обьявляешь переменную в OnInitDialog(), а надо в классе( в заголовке), иначе обьект разрушается, выходя из функции. Либо задаешь неправильные координаты..!
![]() Ты вообще ленися! Вот пример для кнопки( для других элементов тоже самое, только различие в прараметре DWORD dwStyle,)
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
||||||
|
|||||||
nikitao |
|
||||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Coocky
Естественно чушь,а ты как думал? ![]()
Подтверждаю твои подозрения именно там я пыталя "делать" кнопку.Но все равно че то я торможу и не получается.
Есть немного ,но скорее у меня опыта и чутья в C не хватает. ![]() Вообще мне новое учебное пособие нужно,а то в моем нихрена нет,а только поверхностное предстовление о языке ![]() Но прогу я эту должен дописать(уж больно работы в ней много сделал),а без динамики в ней никак.По этому если не слжно Плз опиши все до милочей.Вообще нужно ли обьявлять pParenWnd ли нет?Зарание спасибо ![]() ![]() ![]() ![]() ![]() ![]() -------------------- Жизнь - печальная штука. |
||||||
|
|||||||
Dreamer_0x01 |
|
||||||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
nikitao
ты дочитал до конца то, что тебе писал Coocky ? а там написана следующая строчка:
Отсюда вытекает ответ: Если ты хочешь кнопку налепить бог знает куда (Например, на другую кнопку или вообще в другое окно - то тогда указываешь *CWnd того элемента). В нашем случае я так понимаю ты хочешь поместить ее в то окно, в коде которого ты и пишешь этот ког. Тогда надо в качестве pParent указать "this". В этом случае твое окно как раз и будет являться родителем для твоей кнопки. хотя Coocky и так подробно все расписал... Но видимо придется рассказать тебе еще раз то же самое. Вот тебе алгоритм с кодом, который создает кнопку, ее обработчик, все реализовывается за пару минут... Итак, в нашем случае приложение базируется на диалоге, будем создавать в нем простую кнопку. Классы нашего приложения будут называться СButtonSampleDlg и СButtonSampleApp. работать будем с CButtonSampleDlg. Итак, последовательность твоих дейсвий (код см.ниже): 1. В классе CButtonSampleDlg объявляем переменную CButton * MyButton;(для общего случая я создал именно указатель на кнопку, а не ее экземпляр.) 2. В cpp-файле в Функции OnInitDialog() сначала вызываешь конструктор кнопки оператором new, а потом вызываешь метод Create(....). Примечание - в качестве идентификатора кнопки взят define, который я указал в h-файле. 3. В cpp-файле переопределяешь функцию DestroyWindow(), в которой сначала вызываешь метод DestroyWindow()для кнопки, а потом с помощью оператора delete вызываешь деструктор кнопки. Привыкая с самого начала делать эту операцию, так как изначально создаешь вполне грамотный код. В общем, если ты на этом этапе откомпилируешь и запустишь программу, ты уже увидишь свою кнопку. Но надо еще добавить обработчик события. Сделаем это так: 4. В h-файл добавляешь функцию afx_msg void OnMyButtonClk(). Ее же добавляем и в cpp-файл, в которой указываем действия, выполняемые по нажатию кнопки. В нашем случае это будет текстовое сообщение. 5. В cpp-файле ищем карту сообщений. (Начинается она строкой BEGIN_MESSAGE_MAP(CButtonSampleDlg, CDialog)) В этой карте добавляем такую строку:ON_BN_CLICKED(твой_ID,OnMyButtonClk) Все!!! У тебя полноценная динамически созданная рабочяя кнопка. А вот тебе тот код, который нужно вписать, как я и обещал:
Если уж это тебе не поможет и не заработает - тогда уж не знаю, как еще разжевать ![]() Это сообщение отредактировал(а) Dreamer_0x01 - 17.9.2005, 14:34 -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||||||
|
|||||||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Dreamer_0x01 ,Coocky ,большое спасибо ваши старания(воистену героические) не пропадут зря:я на пишу эту прогу.Большое спасибо.С меня причетается,но сейчас отплатить не могу(постов мало).
![]() ![]() ![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
FullNoob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
У меня такой вопрос, а можно ли в данном примере делать кнопки заранее незная сколлько их будет? И еще, а как сделать таким же макаром Эдиты и привязать к ним переменные?
|
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 1 Всего: 10 |
Автоматически переменные добавляться в класс и DoDataExchange не будут, но в DoDataExchange тоже можно сделать обработку списка(или массива) ручками. Для обработки сообщений от кнопок можно использовать групповое сообщение ON_COMMAND_RANGE, по номеру параметра получаешь в обработчике идентификатор кнопки и обрабатываешь дальше сам. |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Это ж надо откапать,создал еще когда на форум попал
![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
FullNoob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
дык поиск рулит, мог бы и новую создать ![]() Это сообщение отредактировал(а) FullNoob - 26.4.2006, 16:05 |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |