www.pudn.com > sharewareluncher.zip > time.c


#include  
#include "sharewareluncher.h" 
#include "time1.h" 
#include "tab.h" 
#include "resource.h" 
 
extern HINSTANCE hInst; 
HBITMAP hbmHHour[3],hbmLHour[10],hbmHMin[6],hbmLMin[10]; 
HBITMAP hbmHSec[6],hbmLSec[10],hbmClockBkg; 
extern HBITMAP hbmMain,hbmClock; 
extern HWND hMainWnd; 
extern DWORD dwThreadId; 
extern BOOL bMined,bQuit; 
extern int nTimerNum; 
extern TIMERINFO ti[10]; 
extern BOOL bClockYes; 
BOOL bCanGo=TRUE; 
extern int nAlarmEveryHour; 
BOOL bKnocked=FALSE; 
int nDlgflag=-99; 
extern char szerr[1100]; 
extern BOOL bNoShowDel,btRuning; 
extern BOOL bHelp; 
 
const char szver[400]="   版本:1.2\x0d\x0a    本软件是一个程序发射器兼闹钟程式并可虚拟软驱\ 
,可使你的共享软件永不过期。只要你在程序设置中设定好共享软件的启动日期(在其有效期内),则本程式\ 
启动该共享软件时会先把系统日期改为该有效日期,20秒后自动改回当前日期。为防系统日期混乱\ 
导致共享软件启动失败,请勿在20秒内启动两个或以上的共享软件。\x0d\x0a    本软件自带整点"; 
const char szver1[200]="报时功能,必须有声卡支持。如到时声卡正在使用中则无法报时。(PCI声卡除外)。\ 
\x0d\x0a    为NT系统安全性起见,本软件的关机及修改系统日期功能在Windows NT中不起作用。\x0d\x0a"; 
const char szver2[100]="谢谢你对本软件的支持。\x0d\x0a作者联系地址:常熟市花园浜路2#308\x0d\x0a邮编:215500\ 
\x0d\x0a电话:0520-2798715\x0d\x0a"; 
const char szver3[40]="E-Mail:SZ7301@public1.sz.js.cn"; 
 
void InitTimeBmp(HWND hWnd) 
{ 
	HDC hDC,hMainDC,hMemDC,hBkgDC,hMaskDC,hTempDC; 
   HBITMAP hbmMask; 
   int i,j; 
 
   hDC=GetDC(hWnd); 
   hMemDC=CreateCompatibleDC(hDC); 
   hMainDC=CreateCompatibleDC(hDC); 
   hTempDC=CreateCompatibleDC(hDC); 
   hMaskDC=CreateCompatibleDC(hDC); 
   hBkgDC=CreateCompatibleDC(hDC); 
   hbmClockBkg=CreateCompatibleBitmap(hDC,168,42); 
   hbmMask=CreateCompatibleBitmap(hDC,180,38); 
 
   SelectObject(hMemDC,hbmClock); 
   SelectObject(hMainDC,hbmMain); 
   SelectObject(hMaskDC,hbmMask); 
   SelectObject(hBkgDC,hbmClockBkg); 
 
   BitBlt(hBkgDC,0,0,168,42,hMainDC,10,54,SRCCOPY); 
   BitBlt(hMaskDC,0,0,180,38,hMemDC,0,0,WHITENESS); 
 
   for(i=0;i<180;i++) 
   { 
   	for(j=0;j<38;j++) 
      { 
      	if(GetPixel(hMemDC,i,j)!=0x00000000) 
         	SetPixelV(hMaskDC,i,j,0x00ffffff); 
      } 
   } 
 
	for(i=0;i<3;i++) 
   { 
      hbmHHour[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmHHour[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,2,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
   for(i=0;i<6;i++) 
   { 
      hbmHMin[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmHMin[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,62,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
   for(i=0;i<6;i++) 
   { 
      hbmHSec[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmHSec[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,124,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
   for(i=0;i<10;i++) 
   { 
      hbmLHour[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmLHour[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,24,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
   for(i=0;i<10;i++) 
   { 
      hbmLMin[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmLMin[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,84,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
   for(i=0;i<10;i++) 
   { 
      hbmLSec[i]=CreateCompatibleBitmap(hDC,18,38); 
   	SelectObject(hTempDC,hbmLSec[i]); 
 
      BitBlt(hTempDC,0,0,18,38,hBkgDC,144,0,SRCCOPY); 
      BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND); 
		BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT); 
   } 
 
	DeleteDC(hMemDC); 
   DeleteDC(hMainDC); 
   DeleteDC(hMaskDC); 
   DeleteDC(hBkgDC); 
   DeleteDC(hTempDC); 
   ReleaseDC(hWnd,hDC); 
} 
 
void ShowTime(HWND hWnd) 
{ 
	SYSTEMTIME stTime; 
   HDC hDC,hMemDC,hNoDC; 
 
   hDC=GetDC(hWnd); 
   hMemDC=CreateCompatibleDC(hDC); 
	//hTempDC=CreateCompatibleDC(hDC); 
   hNoDC=CreateCompatibleDC(hDC); 
 
   SelectObject(hMemDC,hbmClockBkg); 
   //SelectObject(hMemDC,hbmClock); 
 
   GetLocalTime(&stTime); 
 
   SelectObject(hNoDC,hbmHHour[stTime.wHour/10]); 
   BitBlt(hMemDC,2,2,18,38,hNoDC,0,0,SRCCOPY); 
   SelectObject(hNoDC,hbmLHour[stTime.wHour%10]); 
   BitBlt(hMemDC,24,2,18,38,hNoDC,0,0,SRCCOPY); 
   SelectObject(hNoDC,hbmHMin[stTime.wMinute/10]); 
   BitBlt(hMemDC,62,2,18,38,hNoDC,0,0,SRCCOPY); 
   SelectObject(hNoDC,hbmLMin[stTime.wMinute%10]); 
   BitBlt(hMemDC,84,2,18,38,hNoDC,0,0,SRCCOPY); 
   GetLocalTime(&stTime); 
   SelectObject(hNoDC,hbmHSec[stTime.wSecond/10]); 
   BitBlt(hMemDC,124,2,18,38,hNoDC,0,0,SRCCOPY); 
   SelectObject(hNoDC,hbmLSec[stTime.wSecond%10]); 
   BitBlt(hMemDC,144,2,18,38,hNoDC,0,0,SRCCOPY); 
 
   BitBlt(hDC,10,54,168,42,hMemDC,0,0,SRCCOPY); 
 
   DeleteDC(hMemDC); 
   //DeleteDC(hTempDC); 
   DeleteDC(hNoDC); 
   ReleaseDC(hWnd,hDC); 
} 
 
#pragma argsused 
DWORD TimeThread(INT nUnused) 
{ 
	SYSTEMTIME st; 
   WORD wSec; 
 
   SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST); 
 
   GetLocalTime(&st); 
   wSec=st.wSecond; 
 
   while(!bQuit) 
   { 
      if(!bMined) 
   	{ 
      	GetLocalTime(&st); 
 
      	if(st.wSecond!=wSec) 
      	{ 
      		wSec=st.wSecond; 
      		ShowTime(hMainWnd); 
      	} 
      } 
      Sleep(100); 
   } 
 
   return 100; 
} 
 
#pragma argsused 
DWORD KlockThread(INT nUnused) 
{ 
	SYSTEMTIME st; 
   int i; 
 
   SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST); 
 
   while(!bQuit) 
   { 
      GetLocalTime(&st); 
 
      if(nAlarmEveryHour==1) 
      { 
      	if(st.wMinute==0 && !bKnocked) 
      	{ 
         	int j; 
 
         	if(st.wHour>=13) 
         		j=(int)(st.wHour-12); 
         	else if(st.wHour==0) 
         		j=12; 
         	else 
         		j=(int)st.wHour; 
 
         	PlayWav(MAKEINTRESOURCE(IDW_START)); 
         	for(i=0;i