|
|
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
Бьюсь над проблемой в MFC CDialog based проекте надо, чтобы диалог при старте проги не отображался, но пока решить эту задачу не получается, приходиться прибегать к разным ухищрениям. Интересует следующее: можно ли это сделать так, чтобы окно не было видно с самого начала работы программы, а не дожидаться первой отрисовки, чтобы его скрыть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 16:18 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
А если в редакторе ресурсов в свойствах диалога поставить Visible = False. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 18:45 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
KALAKOMА если в редакторе ресурсов в свойствах диалога поставить Visible = False. нет, первым делом попробовал (наивный), а так же в OnInitDialog() ShowWindow(SW_HIDE) и много другого уже не помню даже всего сейчас остановился на том, что убираю окно за пределы рабочего стола, после первой отрисовки оно начинает "хватать" команду ShowWindow(SW_HIDE) и загоняю в трей, но это криво как-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 19:05 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
CerebrumБьюсь над проблемой в MFC CDialog based проекте надо, чтобы диалог при старте проги не отображался, О, большааая проблема !! Интересует следующее: можно ли это сделать так, чтобы окно не было видно с самого начала работы программы, Можно. Флак VISIBLE убери в шаблоне диалога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 23:45 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
А ты не DoModal вызывай а ShowWindow, сделай его главным, и цикл обработки сообщений запусти. ( CApplication::Run() или как там ). Короче, сделай себе SDI приложение визардом, и возьми оттуда код, который в InitInstance и ExitInstance, только всю лабуду на счет документов и доктемплейтов выкидывай. Она тебе не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 23:49 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
Ну и еще есть способ, совсем "для тупых". Взять нагенерить то же SDI приложение, но главное окно не показывать (ShowWindow не делать), и сделать твой диалог CreateDialog-ом. А на Destrow диалога вызывать PostQuitMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 23:52 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и еще есть способ, совсем "для тупых". Взять нагенерить то же SDI приложение, но главное окно не показывать (ShowWindow не делать), и сделать твой диалог CreateDialog-ом. А на Destrow диалога вызывать PostQuitMessage. спасибо за советы MasterZiv , сегодня буду пробывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 08:01 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
Для уточнения : Делает принудительно видимым диалог MFC-шная функция CDialog::DomModal(). (и правильно делает, кстати). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 15:14 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
А между тем решение есть и очень простое. Правильно ли там ДуМодал делает визибле окно или нет - это по-моему решать прогаммисту. Решение. Заходим в код MFC-код ф-ии CDialog::DoModal(). Эта ф-я виртуальная, а значит её вполне законно можно перегрузить. Копируем все содержимое ф-ии CDialog::DoModal() и вставляем его в CMyDialog::DoModal(). И внутри меняем только одну вешь. Вместо оригинального кода ... // enter modal loop DWORD dwFlags = MLF_SHOWONIDLE; if (GetStyle() & DS_NOIDLEMSG) dwFlags |= MLF_NOIDLEMSG; VERIFY(RunModalLoop(dwFlags) == m_nModalResult); ... Пишем ... // enter modal loop DWORD dwFlags = 0; //!!! <--------- if (GetStyle() & DS_NOIDLEMSG) dwFlags |= MLF_NOIDLEMSG; VERIFY(RunModalLoop(dwFlags) == m_nModalResult); ... А вместо DELETE_EXCEPTION(e); пишем e->Delete(); И надо вначале сделать инклюд #include <afxpriv.h> Ну и естественно что в ресурсе диалога в его свойстве Visible надо задать FALSE. Есть и другой вариант. Проще. Ничего перегружать не надо. CMyDialog dlg; dlg.Create(IDC_DIALOG_RESOURCE, 0); int RetCode = dlg.RunModalLoop(0); //<--тут мы попадаем в модальный цикл if(RetCode == IDOK) { } else { } ... В этом случае в ресурсе диалоге поле Visible тоже должно быть выставлено в FALSE //кто ищет, тот найдет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 15:55 |
|
||
|
Invisible CDialog
|
|||
|---|---|---|---|
|
#18+
Да гость я, гость.А между тем решение есть и очень простое. Правильно ли там ДуМодал делает визибле окно или нет - это по-моему решать прогаммисту. Есть решение еще круче -- ничего не перегружать, а переопределить саму CDialog::DoModal() в своей программе. В MFC.dll при этом будет другая, но ты всегда будешь звать свою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 22:52 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33480199&tid=2031762]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 371ms |

| 0 / 0 |
