Page 1 of 1

Приложение сворачивающееся в тр

Posted: Sat Mar 08, 2008 6:52 am
by Nikolay
У кого-нибудь есть опыт написания приложения на вх которое умеет сворачиваться в трей и появляться по горячей клавише, есть пару специфических вопросов.

1. При старте добавляем иконку в трей. Код простой

Code: Select all

m_TrayIcon=new CTrayIcon();
  if (!m_TrayIcon->SetIcon(wxICON(main), _("Flashnote: Place for your quick notes"))) wxLogError(_("InitOptions: Could not set tray icon.")); 
Периодически SetIcon обламывается и возвращает false. Вызывается в InitDialog классе главного окна наследника wxFrame. Причем проблемы только при старте компьютера (программа в автозагрузке) , когда запускаешь вручную - поймать не удалось.


2. По хоткею программа "выскакивает" наверх и фокус устанавливается на неё соответвенно. Проблема в следуюшем, если в нашем окне вызвать какой-либо диалог, переключиться на чужую программу и нажать хоткей. Активизируется мое главное окно но НЕ диалог открый им. В результате ряд неприятных глюков. Причем проблема как с модальными диалогами так и с немодальными. Кто-нибудь знает "правильный" метод работы с этим моментом?

Re: Приложение сворачивающееся в

Posted: Sat Mar 08, 2008 7:38 am
by tan
Привет!
Nikolay wrote:У кого-нибудь есть опыт написания приложения на вх которое умеет сворачиваться в трей и появляться по горячей клавише, есть пару специфических вопросов.

1. При старте добавляем иконку в трей. Код простой

Code: Select all

m_TrayIcon=new CTrayIcon();
  if (!m_TrayIcon->SetIcon(wxICON(main), _("Flashnote: Place for your quick notes"))) wxLogError(_("InitOptions: Could not set tray icon.")); 
Периодически SetIcon обламывается и возвращает false. Вызывается в InitDialog классе главного окна наследника wxFrame. Причем проблемы только при старте компьютера (программа в автозагрузке) , когда запускаешь вручную - поймать не удалось.
ну раз это обламывантся только при автозагрузке, то скорее всего что-то в системе еще не успело запуститься, вероятно собственно эксплорер.
Попробуй просто запустить это дело в цикле, пока не вернет true:

Code: Select all

  int count = 0;
  bool ret = false;
  do {
      if( count > 100 ) break; // Что бы не зависнуть намертво
      ret = m_TrayIcon->SetIcon(wxICON(main), _("Flashnote: Place for your quick notes"));
      wxSleep(10);
  } while(!ret);
  if( !ret )
      wxLogError(_("InitOptions: Could not set tray icon.")); 
Временные параметры можно подобрать экспериментально.
Nikolay wrote: 2. По хоткею программа "выскакивает" наверх и фокус устанавливается на неё соответвенно. Проблема в следуюшем, если в нашем окне вызвать какой-либо диалог, переключиться на чужую программу и нажать хоткей. Активизируется мое главное окно но НЕ диалог открый им. В результате ряд неприятных глюков. Причем проблема как с модальными диалогами так и с немодальными. Кто-нибудь знает "правильный" метод работы с этим моментом?
Навскидку не скажу, сам с таким не сталкивался.

Posted: Wed Mar 19, 2008 11:06 am
by Nikolay
Спасибо, примерно так и сделал немного подправив код - вроде полет нормальный.

P.S. если кто будет пользоватся - учтите параметр для wxSleep это секунды. use wxMilliSleep или как-то так.