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

📄 main.c

📁 Windows mobile上有关时钟的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	hRetMemBmp = SelectObject(memdc, hBitMap);

	//帪崗昤夋梡壖憐DC
	mdc = CreateCompatibleDC(hdc);
	hRetBmp = SelectObject(mdc, hNumBmp);

	//帪偺廫寘
	if(systim.wHour / 10 > 0){
		BitBlt(memdc, width * 0, 0, width, height, mdc, (systim.wHour / 10) * width, 0, SRCCOPY);
	}else{
		BitBlt(memdc, width * 0, 0, width, height, mdc, width * 11, 0, SRCCOPY);
	}
	//帪偺堦寘
	BitBlt(memdc, width * 1, 0, width, height, mdc, (systim.wHour - systim.wHour / 10 * 10) * width, 0, SRCCOPY);
	//帪偲暘偺嬫愗傝
	BitBlt(memdc, width * 2, 0, width, height, mdc, width * 10, 0, SRCCOPY);
	//暘偺廫寘
	BitBlt(memdc, width * 2 + width, 0, width, height, mdc, (systim.wMinute / 10) * width, 0, SRCCOPY);
	//暘偺堦寘
	BitBlt(memdc, width * 3 + width, 0, width, height, mdc, (systim.wMinute - systim.wMinute / 10 * 10) * width, 0, SRCCOPY);

	SelectObject(mdc, hRetBmp);
	DeleteDC(mdc);

	if(stretch == 0){
		switch(draw_x)
		{
		case 0: x = (rect.right - width * 5) / 2; break;
		case -1: x = 0; break;
		case -2: x = rect.right - width * 5; break;
		default: x = draw_x; break;
		}
		switch(draw_y)
		{
		case 0: y = (rect.bottom - height) / 2; break;
		case -1: y = 0; break;
		case -2: y = rect.bottom - height; break;
		default: y = draw_y; break;
		}
		_TransparentBlt(drawdc, x, y, width * 5, height, memdc, 0, 0, TransColor);
	}else{
		TransparentImage(drawdc, 0, 0, rect.right, rect.bottom, memdc, 0, 0, width * 5, height, TransColor);
	}
	BitBlt(hdc, ps->rcPaint.left, ps->rcPaint.top, ps->rcPaint.right, ps->rcPaint.bottom,
		drawdc, ps->rcPaint.left, ps->rcPaint.top, SRCCOPY);

	SelectObject(memdc, hRetMemBmp);
	DeleteObject(hBitMap);
	DeleteDC(memdc);

	SelectObject(drawdc, hRetDrawBmp);
	DeleteObject(hDrawBitMap);
	DeleteDC(drawdc);
}


/******************************************************************************

	WndProc

	儊僀儞僂傿儞僪僂僾儘僔乕僕儍

******************************************************************************/

static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static HBITMAP hNumBmp;
	static HBITMAP hBackBmp;
	static int width;
	static int height;
	static COLORREF TransColor;
	HDC hdc;
	BITMAP bmp;
	PAINTSTRUCT ps;
	SYSTEMTIME systim;

	switch(msg)
	{
	case WM_CREATE:
		if(hNumBmp != NULL){
			DeleteObject(hNumBmp);
			hNumBmp = NULL;
		}
		if(hBackBmp != NULL){
			DeleteObject(hBackBmp);
			hBackBmp = NULL;
		}

		//僼傽僀儖偐傜價僢僩儅僢僾傪撉傒崬傓
		if(*numbmpfile != TEXT('\0')){
			hNumBmp = SHLoadDIBitmap(numbmpfile);
		}
		if(hNumBmp == NULL){
			hNumBmp = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance,
				MAKEINTRESOURCE(IDB_BITMAP));
		}
		if(*backbmpfile != TEXT('\0')){
			hBackBmp = SHLoadDIBitmap(backbmpfile);
		}

		GetObject(hNumBmp, sizeof(BITMAP), &bmp);
		width = bmp.bmWidth / NUMBMP_CNT;
		height = bmp.bmHeight;

		//摟柧怓偺庢摼
		TransColor = GetTransColor(hWnd, hNumBmp);

		//僞僀儅乕偺嶌惉
		GetLocalTime(&systim);
		SetTimer(hWnd, ID_CLOCK_TIMER, (systim.wSecond % 10) * 1000, NULL);
		break;

	case WM_DESTROY:
		if(hNumBmp != NULL){
			DeleteObject(hNumBmp);
			hNumBmp = NULL;
		}
		if(hBackBmp != NULL){
			DeleteObject(hBackBmp);
			hBackBmp = NULL;
		}
		return 0;

	case WM_TODAYCUSTOM_CLEARCACHE:
		break;

	case WM_TODAYCUSTOM_QUERYREFRESHCACHE:
		if(Refresh){
			Refresh = FALSE;
			//僂傿儞僪僂偺崅偝偺愝掕
			((TODAYLISTITEM *)(wParam))->cyp = view_height;
			return TRUE;
		}
		return FALSE;

	case WM_LBUTTONUP:
	     break;

	case WM_PAINT:
		//昤夋椞堟偺庢摼
		hdc = BeginPaint(hWnd, &ps);
		OnPaint(hWnd, hdc, &ps, hNumBmp, hBackBmp, width, height, TransColor);
		EndPaint(hWnd, &ps);
		break;

	case WM_ERASEBKGND:
		return 1;

	case WM_TIMER:
		switch(wParam)
		{
		case ID_CLOCK_TIMER:
			//嵞昤夋
			InvalidateRect(hWnd, NULL, FALSE);
			UpdateWindow(hWnd);

			KillTimer(hWnd, ID_CLOCK_TIMER);
			GetLocalTime(&systim);
			SetTimer(hWnd, ID_CLOCK_TIMER, (systim.wSecond % 10) * 1000, NULL);
			break;
		}
		break;

	default:
		return DefWindowProc(hWnd, msg, wParam, lParam);
	}
	return 0;
}


/******************************************************************************

	InitInstance

	僂傿儞僪僂偺嶌惉

******************************************************************************/

static HWND InitInstance(HWND pWnd, TODAYLISTITEM *ptli)
{
	WNDCLASS wc;

	hInst = ptli->hinstDLL;

	//愝掕撉傒崬傒
	GetOption();

	//僂傿儞僪僂僋儔僗偺搊榐
    wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.hCursor = 0;
	wc.lpszMenuName = 0;
	wc.lpfnWndProc = (WNDPROC)WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = ptli->hinstDLL;
	wc.hIcon = NULL;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszClassName = MAIN_WND_CLASS;
	UnregisterClass(MAIN_WND_CLASS, ptli->hinstDLL);
	RegisterClass(&wc);

	Refresh = TRUE;

	//僂傿儞僪僂偺嶌惉
	return CreateWindow(MAIN_WND_CLASS, WINDOW_TITLE, WS_CHILD | WS_VISIBLE, CW_DEFAULT, CW_DEFAULT, 0, 0,
		pWnd, NULL, ptli->hinstDLL, NULL);
}


/******************************************************************************

	InitializeCustomItem

	弶婜壔

******************************************************************************/

HWND APIENTRY InitializeCustomItem(TODAYLISTITEM *ptli, HWND pWnd)
{
	if(ptli->fEnabled == 0){
		return NULL;
	}
	//僂僀儞僪僂偺嶌惉
	return InitInstance(pWnd, ptli);
}


/******************************************************************************

	DateDlgProc

	擔晅昞帵愝掕夋柺

******************************************************************************/

static BOOL CALLBACK DateDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	SHINITDLGINFO shidi;
	TCHAR buf[BUF_SIZE];

	switch(uMsg)
	{
	case WM_INITDIALOG:
		//PocketPC梡弶婜壔
		shidi.dwMask = SHIDIM_FLAGS;
		shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
		shidi.hDlg = hDlg;
		SHInitDialog(&shidi);

		SetWindowText(hDlg, TEXT("Show date"));

		//僐儞僩儘乕儖偺弶婜壔
		SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT, WM_SETTEXT, 0, (LPARAM)date_format);
		SetDlgItemInt(hDlg, IDC_EDIT_X, date_x, FALSE);
		SetDlgItemInt(hDlg, IDC_EDIT_Y, date_y, FALSE);
		break;

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDC_BUTTON_COLOR:
			date_color = GetColor(hDlg, date_color);
			break;

		case IDOK:
			//愝掕偺庢摼
			SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)date_format);

			*buf = TEXT('\0');
			SendDlgItemMessage(hDlg, IDC_EDIT_X, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)buf);
			date_x = _ttol(buf);
			*buf = TEXT('\0');
			SendDlgItemMessage(hDlg, IDC_EDIT_Y, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)buf);
			date_y = _ttol(buf);
			EndDialog(hDlg, IDOK);
			break;
		}
		break;

	default:
		return FALSE;
	}
	return TRUE;
}


/******************************************************************************

	CustomItemOptionsDlgProc

	愝掕夋柺

******************************************************************************/

BOOL APIENTRY CustomItemOptionsDlgProc(HWND hDlg, UINT uMsg, UINT wParam, LONG lParam)
{
	SHINITDLGINFO shidi;
	TCHAR buf[BUF_SIZE];

	switch(uMsg)
	{
	case WM_INITDIALOG:
		//PocketPC梡弶婜壔
		shidi.dwMask = SHIDIM_FLAGS;
		shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
		shidi.hDlg = hDlg;
		SHInitDialog(&shidi);

		SetWindowText(hDlg, TEXT("tdClock"));

		GetOption();

		//僐儞僩儘乕儖偺弶婜壔
		SetDlgItemInt(hDlg, IDC_EDIT_HEIGHT, view_height, FALSE);
		SendDlgItemMessage(hDlg, IDC_EDIT_NUMBMP, WM_SETTEXT, 0, (LPARAM)numbmpfile);
		SendDlgItemMessage(hDlg, IDC_EDIT_BACKBMP, WM_SETTEXT, 0, (LPARAM)backbmpfile);
		SendDlgItemMessage(hDlg, IDC_CHECK_STRETCH, BM_SETCHECK, stretch, 0);
		SetDlgItemInt(hDlg, IDC_EDIT_X, draw_x, FALSE);
		SetDlgItemInt(hDlg, IDC_EDIT_Y, draw_y, FALSE);
		SendDlgItemMessage(hDlg, IDC_CHECK_STRETCHBACK, BM_SETCHECK, stretch_backbmp, 0);
		SendDlgItemMessage(hDlg, IDC_CHECK_DATE, BM_SETCHECK, show_date, 0);

		EnableWindow(GetDlgItem(hDlg, IDC_EDIT_X), !stretch);
		EnableWindow(GetDlgItem(hDlg, IDC_EDIT_Y), !stretch);
		break;

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDC_CHECK_STRETCH:
			//Enable switch
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_X),
				!SendDlgItemMessage(hDlg, IDC_CHECK_STRETCH, BM_GETCHECK, 0, 0));
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_Y),
				!SendDlgItemMessage(hDlg, IDC_CHECK_STRETCH, BM_GETCHECK, 0, 0));
			break;

		case IDC_BUTTON_NUMBMP:
			//價僢僩儅僢僾偺慖戰
			*buf = TEXT('\0');
			if(GetFileName(hDlg, buf) == FALSE){
				break;
			}
			SendDlgItemMessage(hDlg, IDC_EDIT_NUMBMP, WM_SETTEXT, 0, (LPARAM)buf);
			break;

		case IDC_BUTTON_BACKBMP:
			//價僢僩儅僢僾偺慖戰
			*buf = TEXT('\0');
			if(GetFileName(hDlg, buf) == FALSE){
				break;
			}
			SendDlgItemMessage(hDlg, IDC_EDIT_BACKBMP, WM_SETTEXT, 0, (LPARAM)buf);
			break;

		case IDC_CHECK_DATE:
			if(SendDlgItemMessage(hDlg, IDC_CHECK_DATE, BM_GETCHECK, 0, 0) == 1){
				DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG_DATE), hDlg, DateDlgProc, 0);
			}
			break;

		case IDC_BUTTON_UNINSTALL:
			if(MessageBox(hDlg, TEXT("Delete tdClock information?"), TEXT("Uninstall"), MB_ICONSTOP | MB_OKCANCEL) == IDOK){
				//儗僕僗僩儕偺嶍彍
				RegDeleteKey(HKEY_CURRENT_USER, REG_PATH);
			}
			if(MessageBox(hDlg, TEXT("Delete today information?"), TEXT("Uninstall"), MB_ICONSTOP | MB_OKCANCEL) == IDOK){
				//today儗僕僗僩儕偺嶍彍
				RegDeleteKey(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Today\\Items\\tdClock"));
				MessageBox(hDlg, TEXT("Information was deleted. Please uninstall."), TEXT("Info"), MB_OK | MB_ICONINFORMATION);
			}
			EndDialog(hDlg, IDOK);
			break;

		case IDOK:
			//愝掕偺庢摼
			view_height = GetDlgItemInt(hDlg, IDC_EDIT_HEIGHT, NULL, FALSE);
			SendDlgItemMessage(hDlg, IDC_EDIT_NUMBMP, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)numbmpfile);
			SendDlgItemMessage(hDlg, IDC_EDIT_BACKBMP, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)backbmpfile);
			stretch = SendDlgItemMessage(hDlg, IDC_CHECK_STRETCH, BM_GETCHECK, 0, 0);
			stretch_backbmp = SendDlgItemMessage(hDlg, IDC_CHECK_STRETCHBACK, BM_GETCHECK, 0, 0);
			show_date = SendDlgItemMessage(hDlg, IDC_CHECK_DATE, BM_GETCHECK, 0, 0);

			*buf = TEXT('\0');
			SendDlgItemMessage(hDlg, IDC_EDIT_X, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)buf);
			draw_x = _ttol(buf);
			*buf = TEXT('\0');
			SendDlgItemMessage(hDlg, IDC_EDIT_Y, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)buf);
			draw_y = _ttol(buf);

			SetOption();

			EndDialog(hDlg, IDOK);
			break;
		}
		break;

	default:
		return FALSE;
	}
	return TRUE;
}
/* End of source */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -