Глупейший вопрос, но рытся в документации лень: как скрыть окно созданное DialogBoxParam? ShowWindow не работает. А создавать класс и рисовать диалог через CreateDialogParam не хочется.
если нужно, чтобы оно было скрытым сразу после создания, можно убрать стиль WS_VISIBLE из ресурсов...
Nouzui The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style)
нуу.. какие сообщения получит DlgProc? WM_INITDIALOG если я правильно понимаю, само окошко к этому моменту еще не будет создано? Соответственно, ShowWindow отпадает.. запостить мессаж или установить таймер тоже не удастся, потому что еще нет hWnd.. так как же на самом деле быть? ::shock::
Вопрос из разряда "феникс"... >WM_INITDIALOG >само окошко к этому моменту еще не будет создано? Соответственно, Перепутали с WM_CREATE для не-диалога. Короче, диалог уже создан, причем - невидимым, а ShowWindow и т.п. невидимость прозапас не накапливает. Поэтому заходим с другого бока, например - через SetParent: на WM_INITDIALOG назначаем диалогу невидимого отчима, а потом - вернем первоначального 0-папу.
А без сторонних окон никак? т.е. как я понял нужно создать ещё невидимое окно, назначить его родителем, а потом через ShowWindow возвращять видимость. Или я не понял?
>Можно просто воспользоваться CreateDialogParam. Никакой класс регистрировать не надо. А разве вопрос был не >>как скрыть окно созданное DialogBoxParam?
Ну создам я через CreateDialogParam и что? У меня это основное окно, а CreateDialog возвращяет управление назад после создания диалога. И куда мне пойти после этого?
Вообще-то, DialogBoxParam() предназначен для открывания диалогового окна и работы в этом самом окне. К тому же, эта функция, похоже, имеет Message Loop внутри, так что если даже скрыть окно, как быть далее? Я к тому, что надо бы узнать зачем надо скрывать этот диалог? Может можно подойти к решению проблемы с другой стороны?
Диалог - основное окно в программе, програма резидентная, значок в трее. Мне важна чистота кода: DialogBoxParam - цикл обработки сообщений. Лепота! А создаём окно через CrWin - создание класса = куча малопонятного кода, сплошная ненаглядность. Вообщем наверно сделаю CrDialogPar + этот цикл Код (Text): .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW
Создаешь обычное пустое окно (невидимым) и диалог (CreateDialogParam, невидимым), назначаешь пустое окно парентом значку в трее и оно будет обрабатывать сообщения от значка. Когда пользователь щелкает по значку или выбирает в менюшке пункт "Показать/Скрыть окно", показываешь или скрываешь диалог в зависимости от того, в каком он состоянии находится: Код (Text): ShowWindow(hwndDialog, !IsWindowVisible(hwndDialog));
kero DialogBoxParam не умеет ничего такого, чего нельзя реализовать через CreateDialogParam. Freecod Почитать документацию по работе с окнами: цикл обработки сообщений. AsmGuru62 Почему похоже, если в справке точно написано: "disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box."
Quantum >>А разве вопрос был не >>>как скрыть окно созданное DialogBoxParam? >DialogBoxParam не умеет ничего такого, чего нельзя реализовать через CreateDialogParam. А помните, Quantum, сказку про суп из топора ? Именно это вы и предлагаете И на фига Petzold кропал свои главы о modal и modeless диалогах ...
kero Я предпочитаю немного изменить условие задачи без какого-либо ущерба в функциональности, чем использовать извратные уловки, типа невидимого отчима. Модальность зависит не от функции, а от реализации. С помощью CreateDialogParam можно делать как модальные, так и немодальные диалоги.
да ладно вам, вопрос все равно не об этом.. кстати, а почему это диалог перестает отображаться из-за SetParent?