📄 winclock.cpp
字号:
//
// WinClock.h - Implementation of CWinClock class
// Ryan Lederman, ryan@winprog.org
// January 21, 2002
//
#include "WinClock.h"
#include "hook.h"
int bz=1;
CWinClock::CWinClock()
{
}
CWinClock::~CWinClock() {}
BOOL CWinClock::Create( PCLOCKSTRUCT cs )
{
COPYDATASTRUCT cds = {0};
if( !cs )
return FALSE;
m_hWnd = CreateWindow( "STATIC", "", WS_CHILD | WS_VISIBLE, cs->x, cs->y, cs->width, cs->height, cs->hWndParent, NULL, GetModuleHandle( NULL ), NULL );
if( m_hWnd == NULL )
return FALSE;
// Set local variables
m_clrBack =RGB(0,0,0);// cs->clrBk;
m_clrFore = cs->clrFore;
m_hFont = CreateFont( cs->iFontHeight ,0,0,0, FW_BOLD,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH, cs->szFontName );
// Subclass for painting
m_lOldWndProc = SetWindowLong( m_hWnd, GWL_WNDPROC, (LONG)ClockProc );
cds.dwData = m_lOldWndProc;
cds.lpData = this;
cds.cbData = 4;
SendMessage( m_hWnd, WM_COPYDATA, (WPARAM)m_hWnd, (LPARAM)&cds );
TimerProc( NULL, WM_COPYDATA, 0, (DWORD)&cds );
m_iTimerID = SetTimer( NULL, 0, 100, (TIMERPROC)TimerProc );
ShowWindow( m_hWnd, SW_SHOW );
return TRUE;
}
BOOL CWinClock::Destroy( void )
{
DeleteObject( m_hFont );
KillTimer( NULL, m_iTimerID );
return TRUE;
}
VOID CALLBACK CWinClock::TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
{
static CWinClock *thisclock = NULL;
if( uMsg == WM_COPYDATA )
{
thisclock = (CWinClock*)((PCOPYDATASTRUCT)dwTime)->lpData;
return;
}
InvalidateRect( thisclock->m_hWnd, NULL, FALSE );
UpdateWindow( thisclock->m_hWnd );
}
LRESULT CALLBACK CWinClock::ClockProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
static lOldWndProc = 0;
static CWinClock *thisclock = NULL;
PCOPYDATASTRUCT pcs;
switch( msg )
{
case WM_COPYDATA:
pcs = (PCOPYDATASTRUCT)lParam;
lOldWndProc = pcs->dwData;
thisclock = (CWinClock*)pcs->lpData;
break;
case WM_PAINT:
return ((CWinClock*)thisclock)->OnPaint( hWnd );
default:
if( lOldWndProc )
return CallWindowProc((WNDPROC)lOldWndProc, hWnd, msg, wParam, lParam );
}
if( lOldWndProc )
return CallWindowProc((WNDPROC)lOldWndProc, hWnd, msg, wParam, lParam );
return 0;
}
BOOL CWinClock::OnPaint( HWND hWnd )
{
PAINTSTRUCT ps = {0};
HDC dc;
RECT winRect = {0};
HBRUSH hBrushBkgnd;
HFONT hFontOld;
SYSTEMTIME st = {0};
char szOutput[512] = {0};
char szAMPM[3] = {0};
dc = BeginPaint( hWnd, &ps );
GetClientRect( hWnd, &winRect );
// hBrushBkgnd = CreateSolidBrush(RGB(0,0,0 ));// m_clrBack );
// FillRect( dc, &winRect, hBrushBkgnd );
SetBkColor( dc, RGB(255,255,255 ) );
SetTextColor( dc, RGB(0,0,0 ) );
hFontOld = (HFONT)SelectObject( dc, m_hFont );
// Get the time
GetLocalTime( &st );
strcpy( szAMPM, "AM" );
if( st.wHour == 0 )
{
st.wHour = 12;
memset( szAMPM, 0, 3 );
strcpy( szAMPM, "AM" );
}
if( st.wHour > 12 )
{
st.wHour -= 12;
memset( szAMPM, 0, 3 );
strcpy( szAMPM, "PM" );
}
if((st.wMinute==0||st.wMinute==30)&&bz==1)
{
EnableMouseCapture();
bz=0;
}
if((st.wMinute==5||st.wMinute==35)&&bz==0)
{
DisableMouseCapture();
bz=1;
}
wsprintf( szOutput, "%d:%02d:%d %s : %02d.%02d.%d", st.wHour, st.wMinute, st.wSecond, szAMPM, st.wMonth, st.wDay, st.wYear );
DrawTextEx( dc, szOutput, strlen( szOutput ), &winRect, DT_VCENTER | DT_CENTER, NULL );
SelectObject( dc, hFontOld );
DeleteObject( hBrushBkgnd );
EndPaint( hWnd, &ps );
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -