Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Невидимое окно

9.4K
12 июня 2006 года
Savoy
47 / / 04.04.2006
Такая ситуация: в диалоговом приложении ещё до появления основного окна принимается решение о том, появится оно видимым или нет, вопрос в том как это реализовать, всмысле как создать невидимое окно, если сделать так:
CApplDlg dlg;
m_pMainWnd = &dlg;
m_pMainWnd->ShowWindow(SW_HIDE);
dlg.DoModal();

выдаёт ошибку Assertion Failed в строке m_pMainWnd->ShowWindow(SW_HIDE);.

И ещё до кучи: перед думодалом пытаюсь запихнуть иконку в трей:
nf.uID = NULL;
nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nf.uCallbackMessage = WM_ICON;
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
nf.hIcon = hIcon;
Shell_NotifyIcon(NIM_ADD, &nf);

иконка появляется, появляется окно, но при наведении мышки на появившуюся иконку она исчезает.
В чём тут дело?
6.9K
13 июня 2006 года
RZ_RZ
53 / / 09.06.2005
У тя не заданно
nf.hWnd это то окно которому будет посылатся сообщение указанное в nf.uCallbackMessage, там у тя скорее всего хлам какойто (в nf.hWnd)
Думаю поэтому она исчезает, она же мытается в это время послать сообщение.
6.9K
13 июня 2006 года
RZ_RZ
53 / / 09.06.2005
может еще nf.cbSize = sizeof(NOTIFYICONDATA);
9.4K
13 июня 2006 года
Savoy
47 / / 04.04.2006
ну да, в nf.m_hWnd ерунда какая-нибудь, но ведь пока окно не создастся что туда запихнуть? окна-то по сути нет, получается пока не создашь какое-нибудь окно иконку в трей по-нормальному не установить?
534
13 июня 2006 года
HarryAxe
448 / / 19.01.2006
[QUOTE=Savoy]ну да, в nf.m_hWnd ерунда какая-нибудь, но ведь пока окно не создастся что туда запихнуть? окна-то по сути нет, получается пока не создашь какое-нибудь окно иконку в трей по-нормальному не установить?[/QUOTE]
Перемести Sell_NotifyIcon() и ShowWindow() в код инициализации диалога. Зачок в трей установить можно и без создания окна, если опустить флаг NIF_MESSAGE.
9.4K
15 июня 2006 года
Savoy
47 / / 04.04.2006
[QUOTE=HarryAxe]Перемести Sell_NotifyIcon() и ShowWindow() в код инициализации диалога. Зачок в трей установить можно и без создания окна, если опустить флаг NIF_MESSAGE.[/QUOTE]

Спасибо. С невидимостью разобрался, правда при помещении ShowWindow в OnInitDialog окно появляется, OnPaint похоже его всё равно потом перерисовывает, а если в OnPaint ShowWindow поставить, то всё путём. А с иконкой удаление флага не помогает, она появляется, но потом всё равно исчезает..
534
16 июня 2006 года
HarryAxe
448 / / 19.01.2006
[QUOTE=Savoy]Спасибо. С невидимостью разобрался, правда при помещении ShowWindow в OnInitDialog окно появляется, OnPaint похоже его всё равно потом перерисовывает, а если в OnPaint ShowWindow поставить, то всё путём. А с иконкой удаление флага не помогает, она появляется, но потом всё равно исчезает..[/QUOTE]
В коде инициализации диалога ShowWindow нужно вставлять после вызова соответствующего метода родительского класса: CDialog::OnInitDialog(). Если окно невидимо, то сообщение WM_PAINT окну вообще не посылается. Насчёт Shell_NotifyICon() я, кажется, немного ошибся: всё-таки без создания окна значок в трей засунуть не удастся.
9.4K
16 июня 2006 года
Savoy
47 / / 04.04.2006
[QUOTE=HarryAxe]В коде инициализации диалога ShowWindow нужно вставлять после вызова соответствующего метода родительского класса: CDialog::OnInitDialog(). Если окно невидимо, то сообщение WM_PAINT окну вообще не посылается. Насчёт Shell_NotifyICon() я, кажется, немного ошибся: всё-таки без создания окна значок в трей засунуть не удастся.[/QUOTE]

Странно, но что-то не пашет если просто ShowWindow(SW_HIDE) вставить после CDialog::OnInitDialog(), а переменная m_pMainWnd недоступна.
А иконку я в InitDialog вставил, щас хоть она у меня одновременно с окном появляется, раньше после нажатия кнопки.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог