⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Windows mobile上有关时钟的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************

	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 + -