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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
Nikolay
Experienced Solver
Experienced Solver
Posts: 72
Joined: Wed Oct 10, 2007 4:27 am

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

Post by Nikolay » Sat Mar 08, 2008 6:52 am

У кого-нибудь есть опыт написания приложения на вх которое умеет сворачиваться в трей и появляться по горячей клавише, есть пару специфических вопросов.

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. По хоткею программа "выскакивает" наверх и фокус устанавливается на неё соответвенно. Проблема в следуюшем, если в нашем окне вызвать какой-либо диалог, переключиться на чужую программу и нажать хоткей. Активизируется мое главное окно но НЕ диалог открый им. В результате ряд неприятных глюков. Причем проблема как с модальными диалогами так и с немодальными. Кто-нибудь знает "правильный" метод работы с этим моментом?
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Sat Mar 08, 2008 7:38 am

Привет!
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. По хоткею программа "выскакивает" наверх и фокус устанавливается на неё соответвенно. Проблема в следуюшем, если в нашем окне вызвать какой-либо диалог, переключиться на чужую программу и нажать хоткей. Активизируется мое главное окно но НЕ диалог открый им. В результате ряд неприятных глюков. Причем проблема как с модальными диалогами так и с немодальными. Кто-нибудь знает "правильный" метод работы с этим моментом?
Навскидку не скажу, сам с таким не сталкивался.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

Nikolay
Experienced Solver
Experienced Solver
Posts: 72
Joined: Wed Oct 10, 2007 4:27 am

Post by Nikolay » Wed Mar 19, 2008 11:06 am

Спасибо, примерно так и сделал немного подправив код - вроде полет нормальный.

P.S. если кто будет пользоватся - учтите параметр для wxSleep это секунды. use wxMilliSleep или как-то так.
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets

Post Reply