📄 main.c
字号:
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 + -