Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модальный диалог без DoModal() 
V
    Опции темы
17dufa
Дата 18.11.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



Собственно вопрос - можно ли показать диалог модальным не через DoModal?
Дело такое - при нажатии кнопочки на главной форме вылезает другая форма с какой-то доп информацией, где пользователь чего-нить правит. если юзать Create/ShowWindow автоматически сохраняется доп информация между нажатиями на эту кнопочку. Если делать DoModal придется по выходу эту доп информацию считывать, а перед DoModal() ее туда запихивать. Можно ли при сохранении архитектуры Create/ShowWindow показать диалог в модальном режиме?
PM MAIL   Вверх
voov
Дата 18.11.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(17dufa @  18.11.2009,  16:38 Найти цитируемый пост)
если юзать Create/ShowWindow автоматически сохраняется доп информация между нажатиями на эту 

где сохраняется то?

непонятно объяснил, но похоже проблема решается не тем путем, который ты ищешь
PM MAIL   Вверх
17dufa
Дата 18.11.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



voov, в диалоге сохраняется. ввел я там в едит "some string" этот самый "some string" я увижу когда снова сделаю ShowWindow(SW_SHOW).
Мне тоже кажется, что что-то в консерватории надо б поменять, но вот чего? smile 
PM MAIL   Вверх
voov
Дата 18.11.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(17dufa @  18.11.2009,  17:10 Найти цитируемый пост)
в диалоге сохраняется. ввел я там в едит "some string" этот самый "some string" я увижу когда снова сделаю ShowWindow(SW_SHOW).

значит должно сохраняться и при модальном вызове (пока объект диалога не разрушен).

если не сохраняется, тогда делай следующее:
1. Покажи код как ты открываешь модально и как не модально.
2. Проверь, что между модальными вызовами объект диалога не уничтожается
3. Покажи код диалога
PM MAIL   Вверх
Alca
Дата 18.11.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50





--------------------
PM WWW ICQ Skype Jabber   Вверх
17dufa
Дата 19.11.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



voov, текст в едите мож и переживет, а вот контролам писец. у мя как раз контролы.

Alca, курю. А можна на сях код?)

Это сообщение отредактировал(а) 17dufa - 19.11.2009, 13:57
PM MAIL   Вверх
Alca
Дата 19.11.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



Цитата

А можна на сях код?


Код

INT CXWindowImpl::iShowModal() {
    /*DEBUG*/XASSERT_RET(NULL != _m_hWnd, NULL);

    BOOL bRes   = FALSE;
    MSG  msgMsg = {0};   

    bRes = bShow(SW_SHOW);
    CHECK_RET(FALSE == bRes, FALSE);

    for (_m_bDestroyed = FALSE; !_m_bDestroyed && ::GetMessage(&msgMsg, NULL, 0, 0); ) {
        ::TranslateMessage(&msgMsg);
        ::DispatchMessage (&msgMsg);
    }

    return (INT)_m_bDestroyed;
}


Добавлено через 6 минут и 59 секунд
Код

VOID CXWindowImpl::OnDestroy(WPARAM wParam, LPARAM lParam) {        /*virtual*/ 
    _m_bDestroyed = TRUE;

    if (NULL != _m_hParentWnd) {    //TODO: а если у главного окна есть родитель?
        BOOL bRes = FALSE;
        HWND hRes = NULL;

        bRes = ::EnableWindow(_m_hParentWnd, TRUE);
        /*DEBUG*/XASSERT_DO(0 != bRes, return);

        hRes = ::SetActiveWindow(_m_hParentWnd); 
        /*DEBUG*///--XASSERT_DO(NULL != hRes, return);

        bRes = ::UpdateWindow(_m_hParentWnd);
        /*DEBUG*/XASSERT_DO(FALSE != bRes, return);
        
        bRes = bClose();
        /*DEBUG*/XASSERT(FALSE != bRes);

        return;
    }

    CXApplication::vTerminate();
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
17dufa
Дата 19.11.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



Alca, а вот это вот WindowList=DisableTaskWindows(0); и вот это EnableTaskWindows(WindowList);
как на MFC перевести?
PM MAIL   Вверх
Alca
Дата 19.11.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



Цитата

DisableTaskWindows, EnableTaskWindows 

это из какой оперы?

Добавлено через 58 секунд
Делфи?


--------------------
PM WWW ICQ Skype Jabber   Вверх
17dufa
Дата 19.11.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



PM MAIL   Вверх
Alca
Дата 19.11.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



из forms.pas
Код

function DisableTaskWindows(ActiveWindow: HWnd): Pointer;
var
  SaveActiveWindow: HWND;
  SaveWindowList: Pointer;
begin
  Result := nil;
  SaveActiveWindow := TaskActiveWindow;
  SaveWindowList := TaskWindowList;
  TaskActiveWindow := ActiveWindow;
  TaskWindowList := nil;
  try
    try
      EnumThreadWindows(GetCurrentThreadID, @DoDisableWindow, 0);
      Result := TaskWindowList;
    except
      EnableTaskWindows(TaskWindowList);
      raise;
    end;
  finally
    TaskWindowList := SaveWindowList;
    TaskActiveWindow := SaveActiveWindow;
  end;
end;

procedure EnableTaskWindows(WindowList: Pointer);
var
  P: PTaskWindow;
begin
  while WindowList <> nil do
  begin
    P := WindowList;
    if IsWindow(P^.Window) then EnableWindow(P^.Window, True);
    WindowList := P^.Next;
    Dispose(P);
  end;
end;


Это сообщение отредактировал(а) Alca - 19.11.2009, 14:30


--------------------
PM WWW ICQ Skype Jabber   Вверх
17dufa
Дата 19.11.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



Всем спасибо. Программа уже была заточена под Create/ShowWindow, а модальность по большому счету была нужна для обеспечения обработки в родительском окне нажатия OK в дочернем. Пляски вокруг модальности порядком надоели и тут на меня снизошло озарение и я просто послал родительскому окну user-defined сообщение через SendMessage.

Это сообщение отредактировал(а) 17dufa - 19.11.2009, 17:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.