LRESULT CTrayIcon::ScWindowProc(HWND hRealWnd, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_TASKBARCREATED && m_bVisible) { AddToTray(); } return CSubclasser::ScWindowProc(hRealWnd, msg, wp, lp); }
void CTrayIcon::ShowTrayIcon(BOOL bShow /*=TRUE*/) { if (bShow && !m_bVisible) { AddToTray(); m_bVisible = TRUE; } else if (!bShow && m_bVisible) { DeleteFromTray(); m_bVisible = FALSE; } }
LRESULT CALLBACK HookWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { NOTIFYICONDATA nid; int i; char buff[255]; // DWORD ProcessId; HMENU hSysMenu; switch (msg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_RESTORE: ShowTheWindow(CurrentWindow); break; case IDM_EXIT: SendMessage(hwndHook,WM_DESTROY,0,0); break; case IDM_CLOSE: CloseTheWindow(CurrentWindow); break; case IDM_ABOUT: DialogBox(thisInstance, MAKEINTRESOURCE(IDD_DIALOG1), hwndHook, (DLGPROC)AboutDlgProc ); break; case IDM_DESTROY: if(MessageBox(NULL,"Kill the window?","RBTray",MB_YESNO | MB_ICONWARNING )==IDYES)DestroyTheWindow(CurrentWindow); break; case IDM_SHOWKEY: showKeyb = !showKeyb; keyState = -1; SetKbdCfg(showKeyb); ShowKeyState(); break; }; break; case WM_MYCMD: switch (wParam) { /* case IDM_LOTUSEDIT: buff[0] = '\0'; GetWindowText((HWND)lParam, buff, 10); //buff[250] = '\0'; MessageBox(NULL,buff,"code",MB_OK); break; */ case IDM_SIZE: Resize((HWND)lParam); break; case IDM_TRAY: // prohibit hiding of explorer's taskbar GetClassName((HWND)lParam, buff, 255); if(strcasecmp("Shell_TrayWnd", buff) == 0) break; if(strcasecmp("DV2ControlHost", buff) == 0) break; //MessageBox(NULL, buff, "RBTray", MB_OK); for(i = 0 ; i < MAXCOUNT ;i++) { if(!list[i]) break; } if (i == MAXCOUNT) break; list[i]=(HWND)lParam; ShowWindow((HWND)lParam, SW_HIDE); ShowWindow((HWND)lParam, SW_MINIMIZE); AddToTray(i); ShowWindow((HWND)lParam, SW_HIDE); ShowWindow(GetParent((HWND)lParam), SW_HIDE); UpdMenu((HWND)lParam,(LPARAM)TRUE); break; /* case IDM_KEY: // Fix chars typed in incorrect keyboard layout FixChars(); break; */ case IDM_KEYSTAT: ShowKeyState(); break; case IDM_ONTOP: hSysMenu=GetSystemMenu((HWND)lParam, FALSE); if(hSysMenu) { if(GetMenuState(hSysMenu, IDM_ONTOP,MF_BYCOMMAND) & MF_CHECKED) //GetWindowLong((HWND)lParam,GWL_EXSTYLE)&WS_EX_TOPMOST) { CheckMenuItem(hSysMenu,IDM_ONTOP,MF_BYCOMMAND |MF_UNCHECKED); SetWindowPos((HWND)lParam,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW); } else { CheckMenuItem(hSysMenu,IDM_ONTOP,MF_BYCOMMAND |MF_CHECKED); SetWindowPos((HWND)lParam,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW); } } break; } case WM_DELTRAY: CloseTheWindow((HWND)wParam); break; case WM_TRAYCMD: switch ((UINT)lParam) { case WM_LBUTTONDOWN: // Hmm, there's probably a better way to do this... SetCapture maybe? // But I don't feel like messing with it :) lastLButtonDown = GetTickCount(); break; case WM_LBUTTONUP: if ((GetTickCount() - lastLButtonDown) <= 1000) { ShowTheWindow((HWND)wParam); } break; case WM_RBUTTONUP: CurrentWindow=(HWND)wParam; ExecuteMenu(); break; case WM_MOUSEMOVE: if (!IsWindow((HWND)wParam)) DelFromTray(FindInTray((HWND)wParam)); else { nid.uID = (UINT)wParam; nid.uFlags = NIF_ICON | NIF_TIP; nid.hIcon = GetWindowIcon((HWND)wParam); GetWindowText((HWND)wParam, nid.szTip, MAXTEXT); Shell_NotifyIcon(NIM_MODIFY, &nid); } } break; case WM_DESTROY: for (i = 0; i < MAXCOUNT; i++) if (list[i]) { ShowIt(list[i]); DelFromTray(i); } showKeyb = FALSE; ShowKeyState(); UnRegisterHook(); FreeLibrary(hLib); EnumWindows((WNDENUMPROC)UpdMenu,FALSE); PostQuitMessage(0); ExitProcess(0); break; } // I can't put this in the switch since WM_TASKBAR_CREATED isn't constant if (msg == WM_TASKBAR_CREATED) { for (i = 0; i < MAXCOUNT; i++) { if (list[i]) { AddToTray(i); } } } return DefWindowProc(hwnd, msg, wParam, lParam); }
static void AddWindowToTray(HWND hwnd) { int i = FindInTray(NULL); if (i == -1) return; _hwndItems[i] = hwnd; AddToTray(i); }
LRESULT CALLBACK HookWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_RESTORE: RestoreWindowFromTray(_hwndForMenu); break; case IDM_CLOSE: CloseWindowFromTray(_hwndForMenu); break; case IDM_ABOUT: DialogBox(_hInstance, MAKEINTRESOURCE(IDD_ABOUT), _hwndHook, (DLGPROC)AboutDlgProc); break; case IDM_EXIT: SendMessage(_hwndHook, WM_DESTROY, 0, 0); break; } break; case WM_ADDTRAY: MinimizeWindowToTray((HWND)lParam); break; case WM_REMTRAY: RestoreWindowFromTray((HWND)lParam); break; case WM_REFRTRAY: RefreshWindowInTray((HWND)lParam); break; case WM_TRAYCMD: switch ((UINT)lParam) { case NIN_SELECT: RestoreWindowFromTray(_hwndItems[wParam]); break; case WM_CONTEXTMENU: _hwndForMenu = _hwndItems[wParam]; ExecuteMenu(); break; case WM_MOUSEMOVE: RefreshWindowInTray(_hwndItems[wParam]); break; } break; case WM_DESTROY: for (int i = 0; i < MAXTRAYITEMS; i++) { if (_hwndItems[i]) { RestoreWindowFromTray(_hwndItems[i]); } } UnRegisterHook(); FreeLibrary(_hLib); PostQuitMessage(0); break; } if (msg == WM_TASKBAR_CREATED) { for (int i = 0; i < MAXTRAYITEMS; i++) { if (_hwndItems[i]) { AddToTray(i); } } } return DefWindowProc(hwnd, msg, wParam, lParam); }