📄 main.c
字号:
/**************************************************************************
tdClock
main.c
(C) Copyright 2001 By Tomoaki Nakashima. All right reserved.
http://www.nakka.com/
nakka@nakka.com
**************************************************************************/
/**************************************************************************
Include Files
**************************************************************************/
#define _INC_OLE
#include <windows.h>
#undef _INC_OLE
#include <Todaycmn.h>
#include <commdlg.h>
#include <aygshell.h>
#include "resource.h"
/**************************************************************************
Define
**************************************************************************/
#define WINDOW_TITLE TEXT("tdClock")
#define MAIN_WND_CLASS TEXT("tdClockWndClass")
#define REG_PATH TEXT("Software\\tdClock")
#define ID_CLOCK_TIMER 1
#define NUMBMP_CNT 12
#define BUF_SIZE 256
/**************************************************************************
Global Variables
**************************************************************************/
static HINSTANCE hInst;
static TCHAR numbmpfile[BUF_SIZE];
static TCHAR backbmpfile[BUF_SIZE];
static int view_height = 48;
static int stretch = 0;
static int draw_x = 0;
static int draw_y = 0;
static int stretch_backbmp = 0;
static int show_date = 0;
static TCHAR date_format[BUF_SIZE];
static int date_color = 0;
static int date_x = 160;
static int date_y = 0;
static BOOL Refresh;
/******************************************************************************
DllMain
DllMain
******************************************************************************/
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD fdwReason, PVOID pvReserved)
{
hInst = hModule;
return TRUE;
}
/******************************************************************************
GetOption
愝掕偺撉傒崬傒
******************************************************************************/
static void GetOption(void)
{
HKEY hKey;
DWORD rc;
DWORD dwType;
long len;
long ret;
lstrcpy(date_format, TEXT("yyyy/MM/dd"));
if(RegCreateKeyEx(HKEY_CURRENT_USER, REG_PATH, 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &rc) == ERROR_SUCCESS){
len = sizeof(TCHAR) * BUF_SIZE;
ret = RegQueryValueEx(hKey, TEXT("numbmpfile"), NULL, &dwType, (LPBYTE)&numbmpfile, &len);
len = sizeof(TCHAR) * BUF_SIZE;
ret = RegQueryValueEx(hKey, TEXT("backbmpfile"), NULL, &dwType, (LPBYTE)&backbmpfile, &len);
len = sizeof(TCHAR) * BUF_SIZE;
ret = RegQueryValueEx(hKey, TEXT("date_format"), NULL, &dwType, (LPBYTE)&date_format, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("view_height"), NULL, &dwType, (LPBYTE)&view_height, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("stretch"), NULL, &dwType, (LPBYTE)&stretch, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("draw_x"), NULL, &dwType, (LPBYTE)&draw_x, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("draw_y"), NULL, &dwType, (LPBYTE)&draw_y, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("stretch_backbmp"), NULL, &dwType, (LPBYTE)&stretch_backbmp, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("show_date"), NULL, &dwType, (LPBYTE)&show_date, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("date_color"), NULL, &dwType, (LPBYTE)&date_color, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("date_x"), NULL, &dwType, (LPBYTE)&date_x, &len);
len = sizeof(int);
ret = RegQueryValueEx(hKey, TEXT("date_y"), NULL, &dwType, (LPBYTE)&date_y, &len);
RegCloseKey(hKey);
}
}
/******************************************************************************
SetOption
愝掕偺曐懚
******************************************************************************/
static void SetOption(void)
{
HKEY hKey = 0;
DWORD rc;
//儗僕僗僩儕偵愝掕傪曐懚
if(RegCreateKeyEx(HKEY_CURRENT_USER, REG_PATH, 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &rc) == ERROR_SUCCESS){
RegSetValueEx(hKey, TEXT("numbmpfile"), 0, REG_SZ, (LPBYTE)numbmpfile, sizeof(TCHAR) * (lstrlen(numbmpfile) + 1));
RegSetValueEx(hKey, TEXT("backbmpfile"), 0, REG_SZ, (LPBYTE)backbmpfile, sizeof(TCHAR) * (lstrlen(backbmpfile) + 1));
RegSetValueEx(hKey, TEXT("date_format"), 0, REG_SZ, (LPBYTE)date_format, sizeof(TCHAR) * (lstrlen(date_format) + 1));
RegSetValueEx(hKey, TEXT("view_height"), 0, REG_DWORD, (LPBYTE)&view_height, sizeof(int));
RegSetValueEx(hKey, TEXT("stretch"), 0, REG_DWORD, (LPBYTE)&stretch, sizeof(int));
RegSetValueEx(hKey, TEXT("draw_x"), 0, REG_DWORD, (LPBYTE)&draw_x, sizeof(int));
RegSetValueEx(hKey, TEXT("draw_y"), 0, REG_DWORD, (LPBYTE)&draw_y, sizeof(int));
RegSetValueEx(hKey, TEXT("stretch_backbmp"), 0, REG_DWORD, (LPBYTE)&stretch_backbmp, sizeof(int));
RegSetValueEx(hKey, TEXT("show_date"), 0, REG_DWORD, (LPBYTE)&show_date, sizeof(int));
RegSetValueEx(hKey, TEXT("date_color"), 0, REG_DWORD, (LPBYTE)&date_color, sizeof(int));
RegSetValueEx(hKey, TEXT("date_x"), 0, REG_DWORD, (LPBYTE)&date_x, sizeof(int));
RegSetValueEx(hKey, TEXT("date_y"), 0, REG_DWORD, (LPBYTE)&date_y, sizeof(int));
RegCloseKey(hKey);
}
}
/******************************************************************************
GetFileName
僼傽僀儖柤偺庢摼
******************************************************************************/
static BOOL GetFileName(HWND hWnd, TCHAR *ret)
{
OPENFILENAME of;
TCHAR path[BUF_SIZE];
TCHAR *ph;
lstrcpy(path, ret);
ZeroMemory(&of, sizeof(OPENFILENAME));
of.lStructSize = sizeof(OPENFILENAME);
of.hInstance = hInst;
of.hwndOwner = hWnd;
of.lpstrFilter = TEXT("Bitmap (*.bmp)\0*.bmp;*.2bp\0All files (*.*)\0*.*\0\0");
of.nFilterIndex = 1;
of.lpstrTitle = TEXT("奐偔");
of.lpstrFile = path;
of.nMaxFile = BUF_SIZE - 1;
of.lpstrDefExt = TEXT("ns");
of.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
if(GetOpenFileName((LPOPENFILENAME)&of) == FALSE){
return FALSE;
}
ph = path;
if(*ph == TEXT('\\') && *(ph + 1) == TEXT('\\')){
ph++;
}
if(*(ph + lstrlen(ph)) == TEXT('.')){
*(ph + lstrlen(ph)) = TEXT('\0');
}
lstrcpy(ret, ph);
return TRUE;
}
/******************************************************************************
GetColor
怓偺慖戰
******************************************************************************/
static long GetColor(HWND hWnd, long color)
{
CHOOSECOLOR ch;
static DWORD ColorTbl[16];
ZeroMemory(&ch, sizeof(CHOOSECOLOR));
ch.lStructSize = sizeof(CHOOSECOLOR);
ch.hwndOwner = hWnd;
ch.rgbResult = color;
ch.lpCustColors = ColorTbl;
ch.Flags = CC_RGBINIT | CC_FULLOPEN;
/* 怓偺慖戰 */
if(ChooseColor(&ch) == TRUE){
return ch.rgbResult;
}
return color;
}
/******************************************************************************
GetTransColor
摟柧怓偺庢摼 (嵍忋嬿偺怓)
******************************************************************************/
static COLORREF GetTransColor(HWND hWnd, HBITMAP hBmp)
{
HDC hdc;
HDC mdc;
HDC memdc;
HBITMAP hBitMap;
HBITMAP hRetMemBmp;
HBITMAP hRetBmp;
COLORREF TransColor;
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
hRetBmp = SelectObject(mdc, hBmp);
memdc = CreateCompatibleDC(hdc);
hBitMap = CreateCompatibleBitmap(hdc, 1, 1);
hRetMemBmp = SelectObject(memdc, hBitMap);
BitBlt(memdc, 0, 0, 1, 1, mdc, 0, 0, SRCCOPY);
TransColor = GetPixel(memdc, 0, 0);
SelectObject(memdc, hRetMemBmp);
DeleteObject(hBitMap);
DeleteDC(memdc);
SelectObject(mdc, hRetBmp);
DeleteDC(mdc);
ReleaseDC(hWnd, hdc);
return TransColor;
}
/******************************************************************************
_TransparentBlt
摟夁怓傪巊偭偰DC傪僐僺乕
******************************************************************************/
static void _TransparentBlt(HDC todc, int left, int top, int width, int height,
HDC fromdc, int fleft, int ftop, COLORREF color)
{
HDC maskDC;
HBITMAP hMaskBmp;
HBITMAP hRetMaskBmp;
HDC tempDC;
HBITMAP hBmp;
HBITMAP hRetBmp;
//慜宨偺嶌惉
tempDC = CreateCompatibleDC(todc);
hBmp = CreateCompatibleBitmap(todc, width, height);
hRetBmp = SelectObject(tempDC, hBmp);
BitBlt(tempDC, 0, 0, width, height, fromdc, fleft, ftop, SRCCOPY);
//儅僗僋偺嶌惉
maskDC = CreateCompatibleDC(todc);
hMaskBmp = CreateBitmap(width, height, 1, 1, NULL);
hRetMaskBmp = SelectObject(maskDC, hMaskBmp);
SetBkColor(tempDC, color);
BitBlt(maskDC, 0, 0, width, height, tempDC, 0, 0, SRCCOPY);
//儅僗僋傪巊偭偰慜宨偐傜攚宨偺宍傪彍嫀
SetBkColor(tempDC, RGB(0, 0, 0));
SetTextColor(tempDC, RGB(255, 255, 255));
BitBlt(tempDC, 0, 0, width, height, maskDC, 0, 0, SRCAND);
///儅僗僋傪巊偭偰攚宨偐傜慜宨偺宍傪彍嫀
SetBkColor(todc, RGB(255, 255, 255));
SetTextColor(todc, RGB(0, 0, 0));
BitBlt(todc, left, top, width, height, maskDC, 0, 0, SRCAND);
//慜宨偲攚宨傪寢崌偡傞
BitBlt(todc, left, top, width, height, tempDC, 0, 0, SRCPAINT);
SelectObject(maskDC, hRetMaskBmp);
DeleteObject(hMaskBmp);
DeleteDC(maskDC);
SelectObject(tempDC, hRetBmp);
DeleteObject(hBmp);
DeleteDC(tempDC);
}
/******************************************************************************
OnPaint
帪崗偺昤夋
******************************************************************************/
void OnPaint(HWND hWnd, HDC hdc, PAINTSTRUCT *ps, HBITMAP hNumBmp, HBITMAP hBackBmp, int width, int height, COLORREF TransColor)
{
#ifdef _WCE_PPC2002
TODAYDRAWWATERMARKINFO dwi;
#endif
HDC drawdc;
HDC mdc;
HDC memdc;
HBITMAP hDrawBitMap;
HBITMAP hRetDrawBmp;
HBITMAP hBitMap;
HBITMAP hRetMemBmp;
HBITMAP hRetBmp;
RECT rect;
SYSTEMTIME systim;
BITMAP bmp;
TCHAR buf[BUF_SIZE];
int x, y;
//僂傿儞僪僂僒僀僘偵崌傢偣偨價僢僩儅僢僾傪奿擺偡傞壖憐僂傿儞僪僂偺嶌惉
GetClientRect(hWnd,(LPRECT)&rect);
//昤夋梡壖憐DC
drawdc = CreateCompatibleDC(hdc);
hDrawBitMap = CreateCompatibleBitmap(hdc, rect.right, rect.bottom);
hRetDrawBmp = SelectObject(drawdc, hDrawBitMap);
#ifdef _WCE_PPC2002
dwi.hdc = drawdc;
GetClientRect(hWnd, &dwi.rc);
dwi.hwnd = hWnd;
SendMessage(GetParent(hWnd), TODAYM_DRAWWATERMARK, 0, (LPARAM)&dwi);
#else
FillRect(drawdc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
#endif
//攚宨偺昤夋
if(hBackBmp != NULL){
mdc = CreateCompatibleDC(hdc);
hRetBmp = SelectObject(mdc, hBackBmp);
if(stretch_backbmp == 0){
BitBlt(drawdc, 0, 0, rect.right, rect.bottom, mdc, 0, 0, SRCCOPY);
}else{
GetObject(hBackBmp, sizeof(BITMAP), &bmp);
StretchBlt(drawdc, 0, 0, rect.right, rect.bottom, mdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
}
SelectObject(mdc, hRetBmp);
DeleteDC(mdc);
}
//擔晅偺昤夋
if(show_date == 1){
if(*date_format == TEXT('\0')){
GetDateFormat(0, 0, NULL, NULL, buf, BUF_SIZE - 1);
}else{
GetDateFormat(0, 0, NULL, date_format, buf, BUF_SIZE - 1);
}
SetTextColor(drawdc, date_color);
SetBkMode(drawdc, TRANSPARENT);
ExtTextOut(drawdc, date_x, date_y, ETO_OPAQUE, NULL, buf, lstrlen(buf), NULL);
}
//帪崗偺庢摼
GetLocalTime(&systim);
//壖憐DC傪嶌惉偡傞
memdc = CreateCompatibleDC(hdc);
hBitMap = CreateCompatibleBitmap(hdc, width * 5, height);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -