информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Народ, как сделать так чтобы программа не помещалась на панель задачь?(как аська, только в трее) 09.06.01 18:19  
Автор: Stervyatnik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
-------------
Не делай окон :) 10.06.01 16:19  
Автор: Raven Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> -------------
[Win32] используя ShellAPI. Почитай в MSDN про Shell_NotifyIcon. Пример кода внутри(MS VC 6 + MFC). 09.06.01 19:59  
Автор: йцукенг <jcukeng> Статус: Member
Отредактировано 09.06.01 20:01  Количество правок: 1
<"чистая" ссылка>
предполагаем, что программа на MS VC 6 + MFC
глобальные переменные:
HICON hIcon;
NOTIFYICONDATA niData;

в InitInstance:
после:
	  m_pMainWnd->ShowWindow(SW_SHOW);
	  m_pMainWnd->UpdateWindow(); 
добавь:
hIcon=LoadIcon(IDR_MAINFRAME);
  BOOL brc;
  niData.cbSize=sizeof(NOTIFYICONDATA);
  niData.hIcon=hIcon;
  niData.uID=123;
  niData.hWnd=this->m_pMainWnd->m_hWnd;
  strcpy(niData.szTip,"Моя прога. (С) йцукенг");
  niData.uCallbackMessage=WM_USER+38;
  niData.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
  brc=Shell_NotifyIcon(NIM_ADD,&niData);
  if(!brc)
    {
      MessageBox(NULL,"Не получается добавить ICON to"
         "tray","Error",MB_ICONSTOP);
      return FALSE;
     }
  
 m_pMainWnd->ChangeIconicState();

в карту сообщений CMainFrame добавь:
  ON_MESSAGE(WM_USER+38,OnTrayNotify)
код:
afx_msg LRESULT CMainFrame::OnTrayNotify(WPARAM wparam,LPARAM lparam)
{

  switch (lparam)
  {
    case WM_LBUTTONDOWN:
    case WM_LBUTTONDBLCLK:
       ChangeIconicState();
          break;
  /*  case WM_RBUTTONDOWN:
      AfxGetApp()->PostThreadMessage(WM_QUIT,0,0);
      break;
   */
    default:
      break;
  }
return 0;
}	
CMainFrame::ChangeIconicState()
{
static bool be_iconic=false;
        ShowWindow(be_iconic);
	ShowOwnedPopups(be_iconic);
 	if(!be_iconic)
        SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
		        SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
         else
         {
         SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0,
		        SWP_NOMOVE|SWP_NOSIZE);
         SetFocus();
         }         
         be_iconic=!be_iconic;
};
и для полноты картины:
в message map:
  ON_WM_SYSCOMMAND()
код:
afx_msg void CMainFrame::OnSysCommand( UINT nID, LPARAM lParam )
  {
  CFrameWnd::OnSysCommand(nID,lParam); 
  if(((nID & 0xFFF0) == SC_MINIMIZE))
  {
    if(theApp.is_iconized)
      {
      theApp.ChangeIconicOnlyState();             
      return;
      }
  }

};
////
и, наконец:
int ISPGatewayApp::ExitInstance() 
{

BOOL brc;

brc=Shell_NotifyIcon(NIM_DELETE,&niData);
if(!brc)
 MessageBox(NULL,"Error!!!","",MB_ICONSTOP);	
return CWinApp::ExitInstance();
}

---

код, который я привел выдран из моей (реально работающей) программы и немного модифицирован.
по идее, должен работать, но я не проверял.
удачи!
йцукенг
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach