程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 托盤,可以防止EXPLORER 被殺後托盤消失的情況

托盤,可以防止EXPLORER 被殺後托盤消失的情況

編輯:.NET實例教程
#define ID_TASKBARICON  100
#define WM_ICONNOTIFY  (WM_USER+101)
 
在 類中申明
 
 virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) ;
 
在 CPP中 :
 

BOOL CALLBACK EnumProc( HWND hWnd, LPARAM lParam)
{
 static const TCHAR szAfxOldWndProc[] = _T("AfxOldWndProc423");  // Visual C++ 6.0
 //check for property and unsubclass if necessary
 WNDPROC oldWndProc = (WNDPROC)::GetProp(hWnd, szAfxOldWndProc);
 if (oldWndProc!=NULL)
 {
  SetWindowLong(hWnd, GWL_WNDPROC, (DWord)oldWndProc);
  RemoveProp(hWnd, szAfxOldWndProc);
 }
 
 return TRUE;
}
LRESULT CLandunDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 static UINT const WM_TASKBARCREATED = RegisterWindowMessage( _T("TaskbarCreated") );
 if( WM_TASKBARCREATED == message ) // Explorer.exe重新啟動
 {
  Shell_NotifyIcon(NIM_ADD, &m_Nid);
  return TRUE;
 }
 // TODO: Add your specialized code here and/or call the base class
 switch( message )
 {
 case WM_ENDSESSION:
  {
  DWord dwProcessId;
     DWord dwThreadId= GetWindowThreadProcessId(m_hWnd,&dwProcessId);
  EnumThreadWindows(dwThreadId, EnumProc,(LPARAM) dwThreadId);
  }
  return TRUE;
 case WM_SYSCOMMAND:
  switch( wParam )
  {
  // 隱藏
  case SC_MINIMIZE:
  case SC_CLOSE:
   ShowWindow(SW_HIDE);
   return TRUE;
  }
  break;
 case WM_ICONNOTIFY:
  switch( lParam )
  {
  case WM_LBUTTONDBLCLK: // 恢復顯示
   if( IsWindowVisible() )
   {
    ShowWindow(SW_HIDE);
   }
   else
   {
    ShowWindow(SW_RESTORE);

SetForegroundWindow();
   }
   return TRUE;
  case WM_RBUTTONUP:  // 顯示菜單
   POINT point;
   HMENU hMenu, hSubMenu;
   GetCursorPos(&point);
   hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MENU1));
   hSubMenu = GetSubMenu(hMenu, 0);
   SetForegroundWindow();
   SetMenuDefaultItem(hSubMenu, ID_ICON_SHOW, FALSE);
   TrackPopupMenu(hSubMenu,TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x, point.y, 0, this->GetSafeHwnd(), NULL);
   PostMessage(WM_NULL,0,0);
   DestroyMenu(hMenu);
   return TRUE;
  }
  return TRUE;
 }
 return CDialog::DefWindowProc(message, wParam, lParam);
}
 
加個 Menu 資源
IDR_MENU1 
   |_ ID_SHOW
   |_ ID_EXIT
 
// 生成個 ID_SHOW 事件 
void CMyDlg::OnShow()
{
 // TODO: Add your command handler code here
 WindowProc(WM_ICONNOTIFY,0,WM_LBUTTONDBLCLK); 
 
}
 
// 生成個 ID_EXIT 事件
 
void CMyDlg::OnExit()
{
 // TODO: Add your command handler code here
 
 CDialog::OnClose(); 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved