Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: модальный диалог для контекстного редактирования  (Прочитано 13125 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 15-11-2012 07:34 » 

не знаю, как это называется по-настоящему )

приходится иногда такое делать - к примеру, для редактирования ячейки таблицы. Открываю модальный диалог (без заголовка и границ) размером с ячейку , на него создаю CEdit размером во всю морду диалога.  В итоге, чтобы сохранить или отменить можно нажать enter или esc. Но остаётся одна бяка - если щёлкнуть по области за пределами модального диалога, то ничего не происходит.
Я решаю это костылём через WM_NCACTIVATE (правда, если диалог пустой, то и это не корректно работает - реагирует только при щелчке за главным окном программы)

И вот вопрос - может в MFC (или даже в API) есть уже подобный готовый диалог ?

А ведь требуется поведение, по сути, навроде CMenu, только с контролами
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 15-11-2012 08:47 » 

Лёш, а диалог-то зачем? Ты можешь CEdit сразу создавать размером с ячейку. Родительское окно у тебя есть по-любому.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 15-11-2012 08:51 » 

И по потере фокуса проводить процедуру сохранения/отброса результата и уничтожения CEdit.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 15-11-2012 08:51 » 

на диалоге в общем случае должно быть что угодно, не только едит. Хоть даже просто пустой диалог с надписью

Добавлено через 2 минуты:
Рома, а модальное окно не теряет фокуса ) По крайней мере при щёлкании в пределах родительских окон

С немодальным возни оказывается больше.

Надо как-то попробовать переопределить CMenu, в общем. Ничего лучше не лезет в голову
« Последнее редактирование: 15-11-2012 08:53 от Алексей1153 » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 15-11-2012 08:59 » 

Не окно, а сам CEdit теряет фокус. А модальным делать необязательно
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 15-11-2012 10:36 » 

ИМХО, чёт ты опять перемудрил. Ты же знаешь, что модальный диалог на то и модальный, чтобы ничего не происходило, когда ты ВНЕ кликаешь. Нет, тебе нужен модальный, но не совсем. Отсюда вывод, слабо продуманная концепция.

ps может тебе нужно WS_EX_TOOLWINDOW?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 15-11-2012 16:14 » 

Я так понимаю, он хочет выходить из модального режима ввода не только по Enter и Esc, но и по клику за пределами его диалога.

Джон, и не думаю, что ему тип оформления окна нужен.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 15-11-2012 16:20 » 

Дим, это не просто оформление. Этот стиль определяет особый тип окна, с определёнными свойствами.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 15-11-2012 21:16 » 

А зачем новое окно? В этом вашем MFC нельзя создать новый GUI-элемент прямо в том же окне?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 19-11-2012 06:46 » 

сорри, что пропал на выходные )

Ром, можно создать, но новый класс как раз и будет общим контейнером для любого содержимого. А там - хоть и один контрол

Джон, WS_EX_TOOLWINDOW - вполне себе ничего так, с единственным недостатком - несинхронное получение результата, как у модального окна или TrackPopupMenu(TPM_RETURNCMD, ...)

Сейчас с меню добью и попробую что-то с WS_EX_TOOLWINDOW тоже придумать. Всё-таки, с меню возни много
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 19-11-2012 09:28 » 

А зачем новое окно? В этом вашем MFC нельзя создать новый GUI-элемент прямо в том же окне?

Ром, MFC это просто враппер над WinAPI, что можно в ней, можно и в нём, только удобней. Поэтому, отвечая на вопрос, конечно можно, было бы родительское окно. Я это был и предложил:
Лёш, а диалог-то зачем? Ты можешь CEdit сразу создавать размером с ячейку. Родительское окно у тебя есть по-любому.

Но ты же знаешь Лёшку, ему чем сложней, тем интересней. Ага Ну и как я понял, он хочет там несколько разных контролов разместить. По определению, диалог является контейнером для контролов. Нууу как-то так.
« Последнее редактирование: 19-11-2012 11:37 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 19-11-2012 09:33 » 

чем сложней, тем интересней.

наГаворы! )
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 19-11-2012 11:20 » 

Я бы сделал так: в форме разместил бы CEdit и сделал его скрытым. По команде "редактировать ячейку" разместил бы CEdit поверх этой ячейки под ее размер и отдал туда фокус. По потере фокуса скрываем CEdit и производим обработку введенных данных. Полезен всякий сервис типа фильтров ввода, отмены и прочего.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 20-11-2012 06:02 » 

я уже сделал на основе модального Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines