Сокрытие модального окна при загрузке
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 07:29
Оценка: 9 (3)
#Имя: FAQ.mfc.modalinvisible
C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку

Если действительно нужно скрывать модальное окно, то можно сделать так:

Добавь в свой класс диалога функцию DoModal(), перепиши в нее содержимое
CDialog::DoModal() из исходников MFC — (dlgcore.cpp), найди в этой функции
строки

// enter modal loop 
DWORD dwFlags = MLF_SHOWONIDLE;


и своем классе замени их на

// enter modal loop 
DWORD dwFlags = 0; // MLF_SHOWONIDLE;


Чтоб все компилилось нужно подключить afxpriv.h и определить макрос

#define DELETE_EXCEPTION(e) do { e->Delete(); } while (0)


Еще в свойствах ресурса этого диалога надо убрать галочку More Styles->VISIBLE
Re[12]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.03.02 20:15
Оценка: 6 (2)
Здравствуйте IT, Вы писали:

IT>И в этом смысле, решение Odi$$ey'я мне представляется наиболее привлекательным.


IT>ShowWindow(SW_SHOWMINNOACTIVE) действительно работает безотказно, но окошко в таскбаре мне не нужно, как его можно убрать?


IT>Так как насчёт Q&A?


Итак, для MFC


1. В OnInitDialog помещаем след код

  CWnd* wnd = new CWnd;
  wnd->CreateEx(0,"#32770","Hidden Window",0,0,0,0,0,0,0);
  SetParent(wnd);
  ShowWindow(SW_SHOWMINNOACTIVE);


Для прятания самого окна также подойдет код Одиссея.

2. Для Апи немного отличается. Тут окошки прячутся почемуто не до конца с
ShowWindow(SW_SHOWMINNOACTIVE); — Нужно копать создание диалога в MFC и сравнивать.

CreateWindow

 g_hiddenWnd = CreateWindow("#32770",0,0,0,0,0,0,0,0,0,0);
 g_dlgWnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),g_hiddenWnd,&DialogProc);


Чтоб не показывался — убрать стиль WS_VISIBLE или Вызвать ShowWindow(SW_HIDE);

3. Для АПИ DialogBox
Подойдет все, что для CreateWindow
но Диаложек будет присутствовать в минимизированном виде на десктопе — нужно перехватить какоето сообщение (хучь таймер, хучь еще что) и сделать ShowWindow(SW_HIDE);
Re[10]: сокрытие модального окна при загрузке. 2
От: Игорь Вартанов Ниоткуда  
Дата: 13.03.02 13:54
Оценка: 5 (1)
Здравствуйте Hollander, Вы писали:

H>ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.


H>Чтоб убрать из таскбара(Есть статья на эту тему) :

H> Для диалога-аппликации необходимо в парент установить невидимое окно.
H> Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.

H> WS_EX_TOOLWINDOW не помогает для диалога



Почитал я весь thread и нахожусь в полном недоумении: сабж — это нечто вроде спортивного интереса или как? Помню, мне нужно было засунуть в трей прогу, управляющую сидюком через клаву. Диалог все-равно нужен (настройка, информация, то-се...). Побился-побился с модальником, после чего сделал через CreateDialog и message pump. Никаких проблем с кнопкой в таскбаре, морганием окна, стилями и проч. И главное! Модальность (или немодальность) его мне совершенно безразлична — я не собираюсь дисэйблить родительское окно (десктоп)
---
С уважением,
Игорь
Re: сокрытие модального окна при загрузке.
От: AndreyZw  
Дата: 22.11.01 09:03
Оценка: 3 (1)
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку


Можно попробовать такую последовательность: CreateWindow, ShowWindow и RunModalLoop
Re[12]: сокрытие модального окна при загрузке. 2
От: Игорь Вартанов Ниоткуда  
Дата: 15.03.02 21:06
Оценка: 3 (1)
Поправлено форматирование текста. — SchweinDeBurg

Здравствуйте Hollander, Вы писали:

H>В MFC у тебя и так вызывается CreateWindow. А проблем не было потому, что, скорее всего, главное окно не диалог было.


Продолжаю находиться в недоумении — откуда ты это взял. Во-первых, я написал ясно, что делал диалог, во-вторых, создавал я его посредством CreateDialog. Нету в MFC такого метода ни в одном классе. Следовательно писал я на API.

H>Могу кинуть пример на АПИ и убедишься сам.


Дело в том, что я именно тот Игорь Вартанов, который пишет на MFC по очень большим праздникам, предпочитая все остальное время писать на API. Примеров на API мне кидать не надо, я тебе сам могу их кинуть. Вот прям сейчас и займусь — вот полный код проги, которая запускается и садит себя в трей:

#include "stdafx.h"
#include "NotifyIcon.h"
#include "resource.h"

#pragma comment(lib, "user32")

BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static CNotifyIcon* pni = NULL;

    if( pni )
        pni->Dispatch(hDlg, msg, wParam, lParam);

    switch(msg)
    {
    case WM_INITDIALOG:
        pni = new CNotifyIcon( hDlg, IDR_NI );
        break;
    case WM_COMMAND:
        switch( wParam )
        {
        case IDOK:
        case ID_QUIT:
            SendMessage(hDlg, WM_CLOSE, 0, 0);
            break;
        case IDCANCEL:
            ShowWindow( hDlg, SW_HIDE );
            break;
        case ID_POP:
            ShowWindow( hDlg, IsWindowVisible(hDlg)? SW_HIDE : SW_SHOW );
            break;
        }
        break;
    case WM_CLOSE:
        delete pni;
        pni = NULL;
        DestroyWindow(hDlg);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hIn, HINSTANCE hPr, LPSTR szCmd, INT nShow)
{
    MSG  msg;
    HWND hWnd = CreateDialog(
                    hIn, MAKEINTRESOURCE(IDD_TRAYED_DIALOG), 
                    HWND_DESKTOP, (DLGPROC)DlgProc );
    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        
        if( IsDialogMessage( hWnd, &msg ) ) continue;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

Как видишь, никаких невидимых окон и модальных диалогов — обходимся одним диалогом, вот только немодальным.

А теперь посмотрим, как будет выглядеть данная концепция в преломлении MFC (масленица сейчас — праздник :-) ):

///////////////////////
// Trayed.h

#include "TrayedDlg.h"

class CTrayedApp : public CWinApp
{
public:
    CTrayedApp();

    //{{AFX_VIRTUAL(CTrayedApp)
    public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
    //}}AFX_VIRTUAL

    CTrayedDlg* m_pDlg;

    //{{AFX_MSG(CTrayedApp)
        // NOTE - the ClassWizard will add and remove member functions here.
        //    DO NOT EDIT what you see in these blocks of generated code !
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};


///////////////////////
// Trayed.cpp

BOOL CTrayedApp::InitInstance()
{
#ifdef _AFXDLL
    Enable3dControls();         // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();   // Call this when linking to MFC statically
#endif

    m_pDlg = new CTrayedDlg;
    m_pDlg->Create( CTrayedDlg::IDD );
    m_pMainWnd = m_pDlg;
    return TRUE;   // закручиваем message loop
}

int CTrayedApp::ExitInstance() 
{
    delete m_pDlg;
    return CWinApp::ExitInstance();
}

///////////////////////
// TrayedDlg.cpp

BOOL CTrayedDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    SetIcon(m_hIcon, TRUE);         // Set big icon
    m_pni = new CNotifyIcon( m_hWnd, IDR_NI );
    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTrayedDlg::OnOK() 
{
    PostQuitMessage(0);
    CDialog::OnOK();
}

LRESULT CTrayedDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    if( m_pni ) 
        m_pni->Dispatch( m_hWnd, message, wParam, lParam );

    return CDialog::WindowProc(message, wParam, lParam);
}

void CTrayedDlg::OnPop() 
{
    ShowWindow( IsWindowVisible() ? SW_HIDE : SW_SHOW );
}

void CTrayedDlg::OnQuit() 
{
    OnOK(); 
}

Теперь покажи мне — где здесь "В MFC у тебя и так вызывается CreateWindow"?
То, что в вижуале отсутствует мастер приложения на немодальном диалоге совершенно не означает, что его нельзя сделать в принципе. И для данной задачи совершенно нет необходимости корячиться через DoModal(), о чем я и имел честь сообщить всей честной компании в предыдущем послании.
---
С уважением,
Игорь
сокрытие модального окна при загрузке.
От: Clover  
Дата: 22.11.01 07:07
Оценка:
Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
Re: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 08:16
Оценка:
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку



Естественно ! Окно то еще не создано. Оно создается внутри DoModal. Сделай в OnInitDialod вызов ShowWindow(SW_HIDE) или поэкспериментируй со стилем WS_VISIBLE.
Re[2]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 08:24
Оценка:
Здравствуйте Odi$$ey, Вы писали:


O$>Можно так:

...
поскипал
...

Вы, Батенька, радикал и экстремист !
Re[2]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 09:24
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Clover, Вы писали:


C>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку



H>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.


это да


H>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)


это не действиет, вернее отменяется по завершении OnInitDialog

H>или поэкспериментируй со стилем WS_VISIBLE.


а это действует только на немодальные


Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.
Re[3]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 09:27
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:



O$>>Можно так:

H>...

H>поскипал
H>...

H>Вы, Батенька, радикал и экстремист !


что поделать, это единственный известный мне способ скрыть окно модального диалога при его запуске.
Кто знает другие — расскажите, мне тоже интересно.
Re: сокрытие модального окна при загрузке.
От: Nico Узбекистан  
Дата: 22.11.01 10:12
Оценка:
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку :-(



Можно чуть подробнее.
Re[3]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 11:31
Оценка:
Здравствуйте Odi$$ey, Вы писали:

H>>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.


O$>это да


H>>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)



только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)
Можно SW_SHOWMINIMIZED

O$>Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.

Да же и не появляется ни на долю секунды. А чем ты сообщение шлешь, не PostMessage ? Тогда должно моргать, иначе это тоже самое, что вызвать напрямую функцию окна.
Re[4]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 11:52
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:


H>>>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)



H>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>Можно SW_SHOWMINIMIZED


хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.
Re[5]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 12:01
Оценка:
Здравствуйте Odi$$ey, Вы писали:


H>>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>>Можно SW_SHOWMINIMIZED


O$>хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.

Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
Re[6]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 12:40
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:


H>>>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>>>Можно SW_SHOWMINIMIZED

O$>>хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.

H>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
Re[7]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 12:52
Оценка:
Здравствуйте Odi$$ey, Вы писали:


H>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

Ну, 33 не получится, а 15-16 — вполне возможно...
Re[2]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.12.01 09:33
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте Odi$$ey, Вы писали:

Небольшое дополнение до кучи — надо еще в свойствах ресурса этого диалога убрать галочку More Styles->VISIBLE
Re[3]: сокрытие модального окна при загрузке.
От: Юнусов Булат Россия  
Дата: 21.12.01 18:07
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>Здравствуйте Odi$$ey, Вы писали:

C>>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку


Можно еще через SetWindowRgn
см:
http://www.codeguru.com/bitmap/index.shtml
Using regions
Тоже можно, только это уже немного изврат
Re[8]: сокрытие модального окна при загрузке.
От: IT Россия linq2db.com
Дата: 12.03.02 03:54
Оценка:
Здравствуйте Hollander, Вы писали:

H>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

H>Ну, 33 не получится, а 15-16 — вполне возможно...


Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.03.02 14:09
Оценка:
Здравствуйте IT, Вы писали:

O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
H>>Ну, 33 не получится, а 15-16 — вполне возможно...

IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?


ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.
Если не нравится, можно сообщения поперехватывать WM_
Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED.
Можно добавить стиль WS_EX_TOOLWINDOW.
Re[9]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.03.02 14:16
Оценка:
Здравствуйте IT, Вы писали:

Поторопился я . Вот проверено :

ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.

Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.

WS_EX_TOOLWINDOW не помогает для диалога
Re[9]: сокрытие модального окна при загрузке.
От: Алекс Россия http://wise-orm.com
Дата: 13.03.02 08:54
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

Здравствуйте IT, Вы писали:

IT>Здравствуйте Hollander, Вы писали:


H>>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

H>>Ну, 33 не получится, а 15-16 — вполне возможно...


IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?


GLOBAL
static BOOL jjj = false;

OnInitDialog
ShowWindow(SW_SHOWMINIMIZED);
jjj = true;
PostMessage(WM_SIZE,SIZE_MINIMIZED,0);

DefWindowProc
if (message == WM_SIZE && wParam == SIZE_MINIMIZED && jjj)
   ShowWindow(SW_HIDE);

Решение конечно кривое, и в таскбаре окошко упевает моргнуть, но может сойдет?
Re[11]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.03.02 15:19
Оценка:
Здравствуйте Игорь Вартанов,




В MFC у тебя и так вызывается CreateWindow. А проблем не было потому, что, скорее всего, главное окно не диалог было. Могу кинуть пример на АПИ и убедишься сам.

Вы писали:
ИВ>Почитал я весь thread и нахожусь в полном недоумении: сабж — это нечто вроде спортивного интереса или как? Помню, мне нужно было засунуть в трей прогу, управляющую сидюком через клаву. Диалог все-равно нужен (настройка, информация, то-се...). Побился-побился с модальником, после чего сделал через CreateDialog и message pump. Никаких проблем с кнопкой в таскбаре, морганием окна, стилями и проч. И главное! Модальность (или немодальность) его мне совершенно безразлична — я не собираюсь дисэйблить родительское окно (десктоп)
Re[11]: сокрытие модального окна при загрузке. 2
От: IT Россия linq2db.com
Дата: 13.03.02 15:28
Оценка:
Здравствуйте Игорь Вартанов, Вы писали:

ИВ>Почитал я весь thread и нахожусь в полном недоумении...


В данном случае мне нужен рабочий код и инструкция по шагам, а не советы. Самому разобраться — нет проблем, только я не хочу на это тратить больше 15 минут и ещё раз вникать в детали реализации DoModal из MFC.

И в этом смысле, решение Odi$$ey'я мне представляется наиболее привлекательным.

ShowWindow(SW_SHOWMINNOACTIVE) действительно работает безотказно, но окошко в таскбаре мне не нужно, как его можно убрать?

Так как насчёт Q&A?
Если нам не помогут, то мы тоже никого не пощадим.
Re[13]: сокрытие модального окна при загрузке. 2
От: IT Россия linq2db.com
Дата: 13.03.02 20:17
Оценка:
Здравствуйте Hollander, Вы писали:

H>Итак, для MFC


Ok, а что делать, чтобы окно показать?
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.03.02 20:33
Оценка:
Здравствуйте IT, Вы писали:

IT>Здравствуйте Hollander, Вы писали:


H>>Итак, для MFC


IT>Ok, а что делать, чтобы окно показать?


Эта, блин, ты что, прикалываешься ?

ShowWindow(SW_SHOW)

Я не понял, тебе это надо или нет ?
А то я, блин, все отложил, чтоб это все перепроверить...
Re[15]: сокрытие модального окна при загрузке. 2
От: IT Россия linq2db.com
Дата: 13.03.02 20:50
Оценка:
Здравствуйте Hollander, Вы писали:

H>>>Итак, для MFC


IT>>Ok, а что делать, чтобы окно показать?


H>Эта, блин, ты что, прикалываешься ?




H>ShowWindow(SW_SHOW)


Я так и знал.

H>Я не понял, тебе это надо или нет ?

H> А то я, блин, все отложил, чтоб это все перепроверить...

Надо, сегодня вечером буду это дело прикручивать.
Если нам не помогут, то мы тоже никого не пощадим.
Re[16]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.03.02 06:55
Оценка:
Здравствуйте IT, Вы писали:


H>>ShowWindow(SW_SHOW)


IT>Я так и знал.


H>>Я не понял, тебе это надо или нет ?

H>> А то я, блин, все отложил, чтоб это все перепроверить...

IT>Надо, сегодня вечером буду это дело прикручивать.


А где твое спасибо ? (участие в рейтинге то бишь)
Re[12]: сокрытие модального окна при загрузке. 2
От: Алекс Россия http://wise-orm.com
Дата: 18.03.02 08:45
Оценка:
Здравствуйте Hollander, Вы писали:

shr eax,8 — занимает 3 байта
Re[13]: сокрытие модального окна при загрузке. 2
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.02 12:13
Оценка:
Здравствуйте Игорь Вартанов, Вы писали:

H>>Могу кинуть пример на АПИ и убедишься сам.

Я заюзал твой пример.

1. Ресурс диалога ты не привел — какие стили — скорее всего VS_VISIBLE выключен, а если включен — почему твоя прога моргать не станет ?
2. Ты не показал код, откуда шлется WM_COMMAND с ID_POP — как проверить моргание ?
3. Кнопка в таскбаре у тебя будет видна, пока виден диалог, если ты не юзаешь стиль WS_EX_TOOLWINDOW — вот для исправления этого я и юзаю невидимое окно.


ИВ>Продолжаю находиться в недоумении — откуда ты это взял. Во-первых, я написал ясно, что делал диалог, во-вторых, создавал я его посредством CreateDialog. Нету в MFC такого метода ни в одном классе. Следовательно писал я на API.


Эта функция(не совсем — CreateDialogIndirect) вызывается примерно из DoModal. Модальный диалог в MFC на самом деле немодальный, но модальность организутся вручную. Можешь заглянуть в исходники или, на худой конец, в Call Stack.


ИВ>Дело в том, что я именно тот Игорь Вартанов, который пишет на MFC по очень большим праздникам, предпочитая все остальное время писать на API. Примеров на API мне кидать не


А я тот самый Павел, который с детства писал на ассемблере, Си и, иногда, на Паскале для своих друзей. И в MSDN заглядываю тогда, когда мне влом порыться в исходниках...

Ты в примере привел примерно такой же код как и у меня, и что ты хотел этим сказать ? То что написал его на год раньше ?




ИВ> что в вижуале отсутствует мастер приложения на немодальном диалоге совершенно не означает, что его нельзя сделать в принципе.


Кудато тебя понесло не туда, причем здесь Визард ?
Немодальные диаложки — это моя страсть !
Re[13]: сокрытие модального окна при загрузке. 2
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.02 12:21
Оценка:
Здравствуйте Алекс, Вы писали:

А>Здравствуйте Hollander, Вы писали:


А>shr eax,8 — занимает 3 байта


Это в 8086 — shr eax,8 ?
Ты не обкурился ?

... а еще в 8086 конструкция shr xxx,n заменится на n shr xxx,1
А команда DIV займет в этом случае не меньше 100 тактов (а то и 180) — исключение — если число в регистре будет много меньше делителя.
Re[14]: сокрытие модального окна при загрузке. 2
От: Игорь Вартанов Ниоткуда  
Дата: 18.03.02 15:17
Оценка:
Здравствуйте Dutchman, Вы писали:

D> 1. Ресурс диалога ты не привел — какие стили — скорее всего VS_VISIBLE выключен, а если включен — почему твоя прога моргать не станет ?


Выключен. Не станет.

D> 2. Ты не показал код, откуда шлется WM_COMMAND с ID_POP — как проверить моргание ?


См. CNotifyIcon

D> 3. Кнопка в таскбаре у тебя будет видна, пока виден диалог, если ты не юзаешь стиль WS_EX_TOOLWINDOW — вот для исправления этого я и юзаю невидимое окно.


Это на здоровье. Я, собственно, встрял лишь чтоб помочь IT отфильтровать поток о сабже. По имеющейся у меня информации он меня услышал. Больше меня ничего не интересует.

D>Эта функция(не совсем — CreateDialogIndirect) вызывается примерно из DoModal. Модальный диалог в MFC на самом деле немодальный, но модальность организутся вручную.


Cool.

Можешь заглянуть в исходники или, на худой конец, в Call Stack.

Ладно, как-нибудь взгляну.

D>А я тот самый Павел, который с детства писал на ассемблере, Си и, иногда, на Паскале для своих друзей. И в MSDN заглядываю тогда, когда мне влом порыться в исходниках...


Ты не в пример круче меня. Поздравляю.

D>Ты в примере привел примерно такой же код как и у меня, и что ты хотел этим сказать ? То что написал его на год раньше ?


См. сабж и мой исходник. Все, что я хотел сказать, это лишь что не нужно заставлять прятаться модальный диалог.

ИВ>> что в вижуале отсутствует мастер приложения на немодальном диалоге совершенно не означает, что его нельзя сделать в принципе.


D>Кудато тебя понесло не туда, причем здесь Визард ?

D>Немодальные диаложки — это моя страсть !

No comments.
---
С уважением,
Игорь
Re[15]: сокрытие модального окна при загрузке. 2
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.02 17:06
Оценка:
Здравствуйте Игорь Вартанов, Вы писали:


ИВ>Дело в том, что я именно тот Игорь Вартанов, который пишет на MFC по очень большим праздникам, предпочитая все остальное время писать на API.


D>>А я тот самый Павел, который с детства писал на ассемблере, Си и, иногда, на Паскале для своих друзей. И в MSDN заглядываю тогда, когда мне влом порыться в исходниках...


ИВ>Ты не в пример круче меня. Поздравляю.


Да ладно, считается, что каждый последующий, загнувший пальцы, в два раза менее крут, чем предыдущий. Так что мне до тебя далеко, тот самый Игорь Вартанов, который пишет на АПИ и, по праздникам, на MFC.

ИВ>См. сабж и мой исходник. Все, что я хотел сказать, это лишь что не нужно заставлять прятаться модальный диалог.


Сабж начинался с MFC и там _нужно_ было прятать. Читайте внимательно. А то чз неколько дней можно мы перейдем не только на АПИ, но и на WTL, или, еще лучше, на QT(2).
Re[4]: сокрытие модального окна при загрузке.
От: kero Россия  
Дата: 20.02.08 00:22
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>что поделать, это единственный известный мне способ скрыть окно модального диалога при его запуске.

OE>Кто знает другие — расскажите, мне тоже интересно.

Ну, вот еще способ (Win API).
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.02.08 04:05
Оценка:
Здравствуйте, kero, Вы писали:

OE>>Кто знает другие — расскажите, мне тоже интересно.

K>Ну, вот еще способ (Win API).

да вроде подсказали уже самый простой — Как спрятать окно ?
Автор: SuperSmile
Дата: 11.01.05
... << RSDN@Home 1.2.0 alpha rev. 788>>
Re[6]: сокрытие модального окна при загрузке.
От: kero Россия  
Дата: 21.02.08 02:30
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, kero, Вы писали:


OE>>>Кто знает другие — расскажите, мне тоже интересно.

K>>Ну, вот еще способ (Win API).

OE>да вроде подсказали уже самый простой — Как спрятать окно ?
Автор: SuperSmile
Дата: 11.01.05


Выше я просто продублировал свой ответ в другом форуме, где ссылались на данную ветку.
Суть способа — ShowWindow(SW_HIDE) на первое WM_NCPAINT. (Кстати, заодно это и пример, когда наличие/отсутствие WS_VISIBLE в RC-файле модального DialogBox — действительно важно).
Вряд ли это сложнее подавления флага SWP_SHOWWINDOW на каждое WM_WINDOWPOSCHANGING
Впрочем, такое подавления тоже может быть применено "точечно", однако номер нужного из приходящих WM_WINDOWPOSCHANGING — не первый, и даже не постоянный.
А вообще, если исходный вопрос поставить правильно (а именно: "Когда модальный диалог начинает быть видимым?") — то решение приходит автоматически.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.