DialogBox

Тема в разделе "WASM.WIN32", создана пользователем SolidCode, 3 окт 2004.

  1. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Как сделать DialogBox (с помощью DialogBoxParam), чтобы он не появлялся автоматически при создании?
     
  2. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    В обработчике диалога wm_initdialog выполняешь ShowWindow и все. НО. Не ясно, как ты хочешь выполнить появление? При вызове диалога через DialogBoxParam он будет модальным, т.е. заблокирует родителя и родитель не будет получать сообщений. Также родитель не будет выполнять свои действия, т.к. его тред в суспенде. Поэтому если окно запрятать, прога просто повиснет (визуально) и пользователь может сильно испугаться и позвать админа.



    Это, конечно, если я правильно вопрос понял.. :)
     
  3. gerard

    gerard New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    40
    Адрес:
    France
  4. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan


    А ты сам это пробовал? Или хотя бы читал АПИ справочнкик по поводу DialogBoxParam. Там сказано, что окно диалога появляется в любом случае, даже при условии ShowWindow(hDlg,SW_HIDE) в WM_INITDIALOG и даже если в ресурсе диалог сделан без флага WS_VISIBLE.

    А вообще, весь интерфейс проги и есть этот диалог. Это основное окно, родителя нет. А мне нужно, чтобы она запускалась в фоне, не показывая диалог. Он появится лишь от нажатия волшебной комбинации клавиш.
     
  5. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    SolidCode

    Что мешает юзать CreateDialogParam?
     
  6. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Quantum

    Мне нужно диалоговое окно. Чтобы выполнение крутилось в его процедуре.



    Или какое сообщение приходит обязательно после того, как диалог отображён?
     
  7. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    SolidCode



    Не понял. Неужели лень добавить GetMessage/IsDialogMessage/DispatchMessage в основной код программы?
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    SolidCode



    Как вариант:


    Код (Text):
    1. case WM_PAINT:
    2.   if (flag == FALSE)
    3.    {
    4.      ShowWindow(hwnd, SW_HIDE);
    5.      flag = TRUE;
    6.    }
    7.   return TRUE;
     
  9. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    О, ребята, спасибо!

    Это уже интересные подходы. Я до этого не додумался.

    Попробую, потом напишу о результатах.
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    n0p

    При вызове диалога через DialogBoxParam он будет модальным



    Это как пожелаешь, то бишь не обязательно :derisive:
     
  11. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Asterix

    Почему не обязательно? Обязательно. Так в Писании написано. Говорят, если хотите немодальное - юз CreateDialogParam, Люк.



    Хотя сам я сей факт не проверял.
     
  12. sep

    sep New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    51
    а чем окно не удовлетворяет если оно все равно показываться не будет ?
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    n0p

    > Так в Писании написано.



    Хмм, действительно написано..

    Я просто подумал что hWndParent может быть 0, плюс, ничто, вроде, не мешает вызвать DialogBoxParam в отдельном треде, чтоб не блокировал работу основного потока..
     
  14. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Дык в отдельном треде оно будет модальным и заберет все ресурсы треда. Правда, родителя заблокировать не должно (если парент 0).



    Вобще интересный метод извращения.. :)))
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Вот что написано в MSDN :

    You can use class CDialog to manage two kinds of dialog boxes:



    Modal dialog boxes, which require the user to respond before continuing the program



    Modeless dialog boxes, which <font color="red]stay on the screen and are available for use at any time but permit other user activities </font><!--color-->

    Но он остается на экране :-(

    ==================================

    Почему нельзя создать пустое или невидимое окно

    и ждать волшебной комбинации, навесив на него

    обработку клавиатуры. А то выходит, что приложения

    без диалогового окна не бывает :-(
     
  16. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan


    Бывает. Quantum предложил интересный вариант. Но вариант Asterix-а мне больше подошёл. Я как раз делаю один "снифер", который показывает своё диалоговое окно только тогда, когда это разрешено в его установках. Т.е. при запуске проги, если она в скрытом от юзеря режиме через автозагрузку, диалоговое окно после создания не должно появиться на экране.
     
  17. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    SolidCode

    В моем варианте окно всё-таки можно иногда заметить на экране на доли секунды оно может появиться %)