windows-nt/Source/XPSP1/NT/shell/osshell/accesory/terminal/icon.c
2020-09-26 16:20:57 +08:00

139 lines
3.3 KiB
C

/*===========================================================================*/
/* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */
/* Houston, Texas */
/*===========================================================================*/
#define NOLSTRING TRUE
#include <windows.h>
#include "port1632.h"
#include "dynacomm.h"
#define ID_FLASHEVENT 1
#define FLASH_ELAPSE 450
/*****************************************************************************/
/* nextFlash() - */
/*****************************************************************************/
void APIENTRY nextFlash(HWND hWnd, UINT message, UINT_PTR nIDEvent, DWORD sysTime)
{
RECT rect;
HDC hDC;
rect.left = 0;
rect.top = 0;
rect.right = 16*icon.dx;
rect.bottom = 16*icon.dy;
InvertRect(hDC = GetDC(hWnd), &rect);
ReleaseDC(hWnd, hDC);
}
/*****************************************************************************/
/* myDrawIcon() - */
/*****************************************************************************/
void myDrawIcon(HDC hDC, BOOL bErase)
{
INT i, x, y;
RECT rect;
DrawIcon(hDC, 0, 0, icon.hIcon);
if((progress > 0) && !icon.flash)
{
i = progress-1;
y = i/16;
x = i%16;
rect.left = 0;
rect.top = 0;
rect.right = 16*icon.dx;
if(x < 16-1)
rect.bottom = y*icon.dy;
else
rect.bottom = (y+1)*icon.dy;
InvertRect(hDC, &rect);
if(x < 16-1)
{
rect.left = 0;
rect.top = y*icon.dy;
rect.right = (x+1)*icon.dx;
rect.bottom = (y+1)*icon.dy;
InvertRect(hDC, &rect);
}
icon.last = progress;
}
}
/*****************************************************************************/
/* updateIcon() */
/*****************************************************************************/
void updateIcon()
{
INT i, x, y;
HDC hDC;
RECT rect;
UpdateWindow(hItWnd); /* jtf 3.20 */
hDC = GetDC(hItWnd);
i = icon.last;
y = i / 16;
x = i % 16;
while(i < progress)
{
rect.left = x*icon.dx;
rect.top = y*icon.dy;
rect.right = (x+1)*icon.dx;
rect.bottom = (y+1)*icon.dy;
InvertRect(hDC, &rect);
i++;
if(x < 16-1)
x++;
else
{
x = 0;
if(y < 16-1)
y++;
else
y = 0;
}
}
icon.last = progress;
ReleaseDC(hItWnd, hDC);
}
/*****************************************************************************/
/* flashIcon() - */
/*****************************************************************************/
void flashIcon(BOOL bInitFlash, BOOL bEndProc)
{
HDC hDC;
if(bEndProc)
{
progress = 0;
icon.last = 0;
}
if (IsIconic (hItWnd))
{
if(icon.flash = bInitFlash)
SetTimer(hItWnd, ID_FLASHEVENT, FLASH_ELAPSE, nextFlash);
else
KillTimer(hItWnd, ID_FLASHEVENT);
myDrawIcon(hDC = GetDC(hItWnd), TRUE);
ReleaseDC(hItWnd, hDC);
}
}