static void PaintStatusWindow(HWND hWnd, HDC hdc) { CRect rect; GetClientRect(hWnd, &rect); //hdc_with_font dc_lucida(hdc, L"Lucida Console", 12); // hdc = GetDC(NULL); // CPoint pt = rect.TopLeft(); // ClientToScreen(hWnd, &pt); // rect.OffsetRect(pt); wstring name = to_wstring(g_ime_name); HWND hUIWnd = GetWindow(hWnd, GW_OWNER); input_context ic(hUIWnd); if (!ic || !ic->hWnd) { DrawText(hdc, name.c_str(), name.size(), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); } else { HWND hWnd = ic->hWnd; while (GetParent(hWnd) && GetParent(hWnd) != hWnd) { hWnd = GetParent(hWnd); } HICON icon = GetWindowIcons(hWnd); SetBkColor(hdc, RGB(254, 254, 255)); SetTextColor(hdc, RGB(22, 1, 33)); DrawIconEx (hdc, 0, 0, icon, rect.Width(), rect.Height(), 0, NULL, DI_NORMAL); } }
static HICON GetWindowIcons(HWND hwnd) { HICON icon, icon_small; GetWindowIcons(hwnd, &icon, &icon_small); return icon; }
BOOL FlipToTray(HWND hwnd) { if (g_cWti >= MAX_WNDTRAY) return(FALSE); if (!IsWindow(hwnd)) return(FALSE); HWND hwndShell = GetShellWindow(), hwndTmp, hwndOwner; hwndTmp = hwndOwner = hwnd; do { hwndOwner = hwndTmp; hwndTmp = GetWindow(hwndTmp, GW_OWNER); } while (hwndTmp && hwndTmp != hwndShell); DWORD dw = GetWindowLongPtr(hwndOwner, GWL_STYLE); if (!(dw & WS_MINIMIZEBOX) || dw & WS_CHILD) return(FALSE); //SetForegroundWindow(g_hwndMain); //MySwitchToThisWindow(GetShellWindow()); for (UINT i = 0; i < g_cWti; i++) { if (g_pWti[i].hwnd == hwndOwner) { if (IsWindowVisible(hwndOwner)) _UnflipFromTray(i, 0); else return(FALSE); } } UINT uID = IDC_FIRSTTRAYICON; if (g_cWti > 0) { while (uID < IDC_FIRSTTRAYICON + MAX_WNDTRAY) { BOOL fIs1 = TRUE; for (UINT i = 0; i < g_cWti; i++) { if (g_pWti[i].uID == uID) fIs1 = FALSE; } if (fIs1) break; uID++; } } HICON hIcon, hIconSm; GetWindowIcons(hwndOwner, &hIcon, &hIconSm); WCHAR szCaption[MAX_CAPTION]; InternalGetWindowText(hwndOwner, szCaption, MAX_CAPTION); if (szCaption[0] == L'\0' && hwnd != hwndOwner) { InternalGetWindowText(hwnd, szCaption, MAX_CAPTION); } if (MyIsHungAppWindow(hwndOwner)) return(FALSE); RECT rcTray = { 0 }; g_pWti[g_cWti].fAnimate = FALSE; if (!(dw & WS_MINIMIZE)) { GetWindowRect(hwnd, &g_pWti[g_cWti].rcWnd); ANIMATIONINFO ai; ai.cbSize = sizeof(ANIMATIONINFO); ai.iMinAnimate = FALSE; SystemParametersInfo(SPI_GETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE); if (ai.iMinAnimate) { HWND hwndTray = FindTrayToolbarWindow(); if (hwndTray) { GetWindowRect(hwndTray, &rcTray); rcTray.bottom = rcTray.top; rcTray.right = rcTray.left; KillTimer(g_hwndMain, TIMER_SETANIMATION); g_pWti[g_cWti].fAnimate = TRUE; ai.iMinAnimate = 0; SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE); SetTimer(g_hwndMain, TIMER_SETANIMATION, 500, NULL); DrawAnimatedRects(g_hwndMain, IDANI_CAPTION, &g_pWti[g_cWti].rcWnd, &rcTray); } } //ShowWindow(hwndOwner, SW_MINIMIZE); if (!SendMessageTimeout(hwndOwner, WM_SYSCOMMAND, SC_MINIMIZE, 0, SMTO_ABORTIFHUNG, 500, &dw)) return(FALSE); } //ShowWindow(hwndOwner, SW_HIDE); SetWindowPos(hwndOwner, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_HIDEWINDOW); //if (g_pWti[g_cWti].fAnimate) { //} g_pWti[g_cWti].hwnd = hwndOwner; g_pWti[g_cWti].uID = uID; g_pWti[g_cWti].hIconSm = hIconSm; g_cWti++; AddTrayIcon(g_hwndMain, uID, hIconSm, szCaption); return(TRUE); }