Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с окном, Окно которое нельзя закрыть 
:(
    Опции темы
dark
Дата 3.10.2003, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Подскажите код, который бы при закрытие окна сворачивал бы его в системный трей.
PM MAIL   Вверх
NULL
Дата 3.10.2003, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



Код

void CMyDlg::OnClose()
{
//CDialog::OnClose();

NOTIFYICONDATA nid;
 
nid.cbSize=sizeof(nid);
nid.hWnd=m_hWnd;
nid.uID=1;
nid.uFlags = NIF_ICON|NIF_TIP|NIF_MESSAGE;
nid.hIcon=m_hIcon;
lstrcpy(nid.szTip,"̳é ìàëþíîê");
Shell_NotifyIcon(NIM_ADD,&nid);
::DestroyIcon(nid.hIcon);
}

PM MAIL ICQ   Вверх
NULL
Дата 3.10.2003, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



там в конце допиши еще
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
PM MAIL ICQ   Вверх
dark
Дата 3.10.2003, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Я воспользовался твоим кодом NULL но иконки не вижу. В момент запуска появляется место для иконки и тут же пропадает. К тому же это код для VC а я пишу в BIlder. Может в этом причина?
PM MAIL   Вверх
NULL
Дата 3.10.2003, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



dark, в этом причина наверно, у меня все работает. Код апишный вроде должно и в билдере и в делфи работать.

nid.hIcon=m_hIcon;

у тя может в m_hIcon ниче нет.
PM MAIL ICQ   Вверх
NULL
Дата 3.10.2003, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



dark, или попробуй в конце не ставить ::DestroyIcon(nid.hIcon);
PM MAIL ICQ   Вверх
dark
Дата 3.10.2003, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



А как добавить в m_hIcon иконку. Разве не иконка формы должна высвечиваться?
PM MAIL   Вверх
dark
Дата 3.10.2003, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Отсутствие ::DestroyIcon(nid.hIcon) не помогает.
PM MAIL   Вверх
Ars
Дата 3.10.2003, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



Цитата
В момент запуска появляется место для иконки и тут же пропадает

Если OnClose отрабатывает для главного окна, то приложение после этого просто закрывается.
Для того, чтобы выполнить сабж, нужно отлавливать WM_SYSCOMMAND с WParam==SC_CLOSE и в обработчике этого дела прятать окно
Form->Visible=false;
Ну и, конечно, создавать TrayIcon. В Builder'е есть соответствующий одноименный компонент, правда сыроватый, имхо


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
NULL
Дата 3.10.2003, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 22.8.2003

Репутация: нет
Всего: нет



Ars, нет не закроется //CDialog::OnClose(); покрайней мере в VC.
и если компонент есть, то мой код поидее вообще не нужен
PM MAIL ICQ   Вверх
dark
Дата 3.10.2003, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Ars иконка пропадает даже если этот код вставить в момент создания окна.

m_hIcon - должен указывать на файл иконки или здесь должно быть чтото другое.
PM MAIL   Вверх
Ars
Дата 3.10.2003, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



Дык в Билдере же dark ваяет
Цитата
When the application shuts down, the main form receives an OnClose event

Посмотрел хелп про OnClose event и выяснилось, что и отлавливать то ничего не надо:
в обработчик передается ссылка Action, изменяя значение которой, можно управлять исходом события OnClose, в т.ч. можно и спрятать окно без его закрытия. Там и надо вставлять код для TrayIcon

Это сообщение отредактировал(а) Ars - 3.10.2003, 09:54


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
RAN
Дата 3.10.2003, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Исчезает небось, при наведении на неё мышкой. Это из-за того, что сообщения из tray не обрабатываются.
dark, tray автоматически ничего не делает. Он только рисует твою иконку и посылает потом тебе сообщения о том, что мышь навели на неё, что кнопу нажали левую, правую и т.д. А ты должен эти сообщения обрабатывать. Иначе оболочка решит, что иконка ничейная, и что приложение, создавшее её, уже приказало долго жить.
PM MAIL ICQ   Вверх
dark
Дата 3.10.2003, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



А как это сделать? Какие события надо обработать. Код можно выложить?
PM MAIL   Вверх
Ars
Дата 3.10.2003, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



RAN
Цитата
Исчезает небось, при наведении на неё мышкой

Исчезает, когда создавшее приложение закрылось, не удалив TrayIcon


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
Ars
Дата 3.10.2003, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



В Билдере, начиная с 3-го, в закладке Samples лежит компонент TrayIcon. Его и юзай - никакого гимора
Можно и так, но инициализировать все ручками придется:
Код
TTrayIcon *TrayIcon1=new TTrayIcon(this);
TrayIcon1->Visible=true;
TrayIcon1->PopupMenu=PopupMenu1;
TrayIcon1->Icons=ImageList1;
TrayIcon1->PopupMenuOn=imRightClickUp;
TrayIcon1->RestoreOn=imLeftDoubleClick;
TrayIcon1->OnRestore=TrayIcon1OnRestore;
и т.д.



--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
dark
Дата 3.10.2003, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Я вставил данный код не при закрытие приложения, а при его создании.
Само приложение не закрывается, просто форма становится невидимой. Над сделать так, что кокда пользователь счелкает мышкой по иконки оно снова распахиволось.
PM MAIL   Вверх
dark
Дата 3.10.2003, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 26.9.2003

Репутация: нет
Всего: нет



Я разобрался, большое спасибо Ars и NULL
PM MAIL   Вверх
gray_k
Дата 3.10.2003, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: нет
Всего: 22



На билдере всё очень просто. Для работы с систреем есть компонент TTrayIcon на вкладке Samples.
Потом на событие OnCloseQuery главного окна приложения пишешь код:
Код
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
   CanClose = false;
   ShowWindow(Application->Handle, SW_MINIMIZE);
   ShowWindow(Application->Handle, SW_HIDE);

}



--------------------
С уважением.
Gray.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1195 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.