Скрыть диалог

Тема в разделе "WASM.WIN32", создана пользователем Freecod, 21 дек 2006.

  1. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Глупейший вопрос, но рытся в документации лень: как скрыть окно созданное DialogBoxParam?
    ShowWindow не работает. А создавать класс и рисовать диалог через CreateDialogParam не хочется.
     
  2. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    увы, но showwindow работает
     
  3. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    чем и как окно создано - не столь важно
    если это окно, то его можно скрыть
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    если нужно, чтобы оно было скрытым сразу после создания, можно убрать стиль WS_VISIBLE из ресурсов...
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Nouzui
    The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style)
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    нуу..
    какие сообщения получит DlgProc?
    WM_INITDIALOG
    если я правильно понимаю, само окошко к этому моменту еще не будет создано?
    Соответственно, ShowWindow отпадает.. запостить мессаж или установить таймер тоже не удастся, потому что еще нет hWnd..
    так как же на самом деле быть? ::shock::
     
  7. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Блин... hWnd в showwindow перепутал... Всё - по ночам больше программы не пишу :)
     
  8. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Поправка - работает на кнопке, а вот скрыть при создании не получается...
     
  9. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Вопрос из разряда "феникс"...

    >WM_INITDIALOG
    >само окошко к этому моменту еще не будет создано? Соответственно,

    Перепутали с WM_CREATE для не-диалога.
    Короче, диалог уже создан, причем - невидимым, а ShowWindow и т.п. невидимость прозапас не накапливает.
    Поэтому заходим с другого бока, например - через SetParent:
    на WM_INITDIALOG назначаем диалогу невидимого отчима, а потом - вернем первоначального 0-папу.
     
  10. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    А без сторонних окон никак? т.е. как я понял нужно создать ещё невидимое окно, назначить его родителем, а потом через ShowWindow возвращять видимость. Или я не понял?
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Можно просто воспользоваться CreateDialogParam. Никакой класс регистрировать не надо.
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    >Можно просто воспользоваться CreateDialogParam. Никакой класс регистрировать не надо.

    А разве вопрос был не

    >>как скрыть окно созданное DialogBoxParam?
     
  13. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Ну создам я через CreateDialogParam и что? У меня это основное окно, а CreateDialog возвращяет управление назад после создания диалога. И куда мне пойти после этого? :)
     
  14. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Вообще-то, DialogBoxParam() предназначен для открывания диалогового окна и работы в этом самом окне. К тому же, эта функция, похоже, имеет Message Loop внутри, так что если даже скрыть окно, как быть далее?

    Я к тому, что надо бы узнать зачем надо скрывать этот диалог?
    Может можно подойти к решению проблемы с другой стороны?
     
  15. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Диалог - основное окно в программе, програма резидентная, значок в трее. Мне важна чистота кода: DialogBoxParam - цикл обработки сообщений. Лепота! А создаём окно через CrWin - создание класса = куча малопонятного кода, сплошная ненаглядность. Вообщем наверно сделаю CrDialogPar + этот цикл
    Код (Text):
    1.      .WHILE TRUE
    2.         invoke GetMessage, ADDR msg,NULL,0,0
    3.         .BREAK .IF (!eax)
    4.         invoke TranslateMessage, ADDR msg
    5.         invoke DispatchMessage, ADDR msg
    6.     .ENDW
     
  16. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Создаешь обычное пустое окно (невидимым) и диалог (CreateDialogParam, невидимым), назначаешь пустое окно парентом значку в трее и оно будет обрабатывать сообщения от значка. Когда пользователь щелкает по значку или выбирает в менюшке пункт "Показать/Скрыть окно", показываешь или скрываешь диалог в зависимости от того, в каком он состоянии находится:
    Код (Text):
    1. ShowWindow(hwndDialog, !IsWindowVisible(hwndDialog));
     
  17. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kero
    DialogBoxParam не умеет ничего такого, чего нельзя реализовать через CreateDialogParam.

    Freecod
    Почитать документацию по работе с окнами: цикл обработки сообщений.

    AsmGuru62
    Почему похоже, если в справке точно написано:
    "disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box."
     
  18. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Quantum

    >>А разве вопрос был не
    >>>как скрыть окно созданное DialogBoxParam?

    >DialogBoxParam не умеет ничего такого, чего нельзя реализовать через CreateDialogParam.

    А помните, Quantum, сказку про суп из топора ? Именно это вы и предлагаете :)

    И на фига Petzold кропал свои главы о modal и modeless диалогах ...
     
  19. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kero
    Я предпочитаю немного изменить условие задачи без какого-либо ущерба в функциональности, чем использовать извратные уловки, типа невидимого отчима.

    Модальность зависит не от функции, а от реализации. С помощью CreateDialogParam можно делать как модальные, так и немодальные диалоги.
     
  20. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да ладно вам, вопрос все равно не об этом..

    кстати, а почему это диалог перестает отображаться из-за SetParent?