home *** CD-ROM | disk | FTP | other *** search
- /*-----------------------------------------------------
- ü@MAIN.C
- ü@ü@TCDLLé╠APIüAâtâbâNâvâìâVü[âWââüAÄ₧îvé╠âTâuâNâëâXë╗
- ü@ü@Copyright (C) KAZUBON 1997
- -------------------------------------------------------*/
-
- #include "tcdll.h"
-
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- void InitClock(HWND hwnd);
- void EndClock(void);
- BOOL IsIE4(HWND hwnd);
- HMENU CreateClockMenu(void);
- void CreateTip(HWND hwnd);
- void CreateClockDC(HWND hwnd);
- void ReadData(HWND hwnd);
- void OnTimer(HWND hwnd);
- void DrawClockSub(HWND hwnd, HDC hdc, SYSTEMTIME* pt);
- void DrawClock(HWND hwnd, HDC hdc);
- LRESULT OnCalcRect(HWND hwnd);
-
- /*------------------------------------------------
- ü@èeâvâìâZâXé┼ïñÆ╩é╠âfü[â^
- --------------------------------------------------*/
- #pragma data_seg(".MYDATA")
- HANDLE hmod = 0;
- HHOOK hhook = 0;
- HWND hwndTClockMain = NULL;
- HWND hwndClock = NULL;
- #pragma data_seg()
-
- /*------------------------------------------------
- ü@Globals
- --------------------------------------------------*/
- WNDPROC oldWndProc = NULL;
- HDC hdcClock = NULL;
- HBITMAP hbmpClock = NULL;
- HFONT hFon = NULL;
- HMENU hMenu = NULL;
- HWND hwndTip = NULL;
- COLORREF colback, colfore;
- char format[1024];
- char sDate, sTime;
- char sAM[11], sPM[11];
- BOOL bHour12;
- int hourLast = -1, minuteLast = -1;
- BOOL bNoClock = FALSE;
- int nBlink = 0;
- int buttondown = 0;
- BOOL bStartMenuClock = FALSE;
- BOOL bIE4 = FALSE;
-
- extern HWND hwndStart;
- extern HWND hwndStartMenu;
-
- /*------------------------------------------------
- ü@DLLé╠âGâôâgâèâ|âCâôâg
- --------------------------------------------------*/
- BOOL WINAPI DllMain(HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
- {
- hmod = hModule;
- switch (dwFunction)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_PROCESS_DETACH:
- default:
- break;
- }
- return TRUE;
- }
-
- /*------------------------------------------------
- ü@APIüFâtâbâNé╠âCâôâXâgü[âï
- --------------------------------------------------*/
- void WINAPI HookStart(HWND hwndMain)
- {
- hwndTClockMain = hwndMain;
-
- hhook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, hmod, 0);
-
- //â^âXâNâoü[é╠ìXÉV
- PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_SIZE,
- SIZE_RESTORED, 0);
- }
-
- /*------------------------------------------------
- ü@APIüFâtâbâNé╠âAâôâCâôâXâgü[âï
- --------------------------------------------------*/
- void WINAPI HookEnd(void)
- {
- HWND hwnd;
-
- //Ä₧îvâEâBâôâhâEé╔ÅIù╣Åêù¥é≡é│é╣éΘ
- if(hwndClock && IsWindow(hwndClock))
- SendMessage(hwndClock, WM_COMMAND, 102, 0);
- hwndClock = NULL;
- //âtâbâNé╠âAâôâCâôâXâgü[âï
- if(hhook != NULL)
- UnhookWindowsHookEx(hhook); hhook = NULL;
-
- //â^âXâNâoü[é╠ìXÉV
- hwnd = FindWindow("Shell_TrayWnd", NULL);
- if(hwnd)
- PostMessage(hwnd, WM_SIZE, SIZE_RESTORED, 0);
- }
-
- /*------------------------------------------------
- ü@APIüFÄ₧îvé╠ìXÉV
- --------------------------------------------------*/
- void WINAPI RefreshTClock(void)
- {
- if(hwndClock != NULL)
- PostMessage(hwndClock, WM_USER+1, 0, 0);
- }
-
- /*------------------------------------------------
- ü@APIüFô_û┼èJÄn
- --------------------------------------------------*/
- void WINAPI BlinkTClock(BOOL b)
- {
- if(hwndClock != NULL)
- PostMessage(hwndClock, WM_USER+2, (WPARAM)b, 0);
- }
-
- /*------------------------------------------------
- ü@âtâbâNâvâìâVü[âWââ
- --------------------------------------------------*/
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- LPCWPSTRUCT pcwps;
- char classname[80];
-
- pcwps = (LPCWPSTRUCT)lParam;
-
- if(nCode >= 0 && pcwps && pcwps->hwnd)
- {
- if(hwndClock == NULL &&
- oldWndProc == NULL &&
- GetClassName(pcwps->hwnd, classname, 80) > 0 &&
- strcmp(classname, "TrayClockWClass") == 0)
- {
- // Ä₧îvé╠Åëè·ë╗
- InitClock(pcwps->hwnd);
- }
- if(bIE4 &&
- hwndStartMenu == NULL &&
- GetClassName(pcwps->hwnd, classname, 80) > 0 &&
- strcmp(classname, "BaseBar") == 0)
- {
- // IE4é╠âXâ^ü[âgâüâjâàü[é╠Åëè·ë╗
- InitStartMenuIE4(pcwps->hwnd);
- }
- }
-
- return CallNextHookEx(hhook, nCode, wParam, lParam);
- }
-
- /*------------------------------------------------
- ü@Ä₧îvé╠Åëè·ë╗
- --------------------------------------------------*/
- void InitClock(HWND hwnd)
- {
- BOOL b;
-
- hwndClock = hwnd;
- //âîâWâXâgâèô╟é▌ì₧é▌
- ReadData(hwndClock);
- //âüâjâàü[ì∞ɼ
- hMenu = CreateClockMenu();
- //âTâuâNâëâXë╗
- oldWndProc = (WNDPROC)GetWindowLong(hwndClock, GWL_WNDPROC);
- SetWindowLong(hwndClock, GWL_WNDPROC, (LONG)WndProc);
- //â_âuâïâNâèâbâNÄ≤é»òté»éΘ
- SetClassLong(hwndClock, GCL_STYLE,
- GetClassLong(hwndClock, GCL_STYLE) | CS_DBLCLKS);
- //âXâ^ü[âgâ{â^âôé╠Åëè·ë╗
- SetStartButton(hwndClock);
- //âXâ^ü[âgâüâjâàü[é╠Åëè·ë╗
- SetStartMenu(hwndClock);
-
- //éPòbé¿é½é╔â^âCâ}é≡é⌐é»éΘ
- SetTimer(hwndClock, 1, 1000, NULL);
- //âcü[âïâ`âbâvì∞ɼ
- CreateTip(hwndClock);
-
- if(!GetMyRegLong("DropFiles", &b)) b = FALSE;
- DragAcceptFiles(hwnd, b);
-
- bIE4 = IsIE4(hwndClock);
-
- //â^âXâNâoü[é╠ìXÉV
- PostMessage(GetParent(GetParent(hwndClock)), WM_SIZE,
- SIZE_RESTORED, 0);
- InvalidateRect(GetParent(GetParent(hwndClock)), NULL, TRUE);
- }
-
- /*------------------------------------------------
- ü@Ä₧îvé╠ÅIù╣Åêù¥
- --------------------------------------------------*/
- void EndClock(void)
- {
- DragAcceptFiles(hwndClock, FALSE);
-
- if(hwndTip) DestroyWindow(hwndTip); hwndTip = NULL;
- EndStartButton();
- EndStartMenu();
- ClearStartMenuIE4();
- if(hFon) DeleteObject(hFon); hFon = NULL;
- if(hMenu) DestroyMenu(hMenu); hMenu = NULL;
- if(hdcClock) DeleteDC(hdcClock); hdcClock = NULL;
- if(hbmpClock) DeleteObject(hbmpClock); hbmpClock = NULL;
- if(hwndClock && IsWindow(hwndClock))
- {
- KillTimer(hwndClock, 1);
- SetWindowLong(hwndClock, GWL_WNDPROC, (LONG)oldWndProc);
- oldWndProc = NULL;
- }
- //TClockâEâBâôâhâEé≡ÅIù╣é│é╣éΘ
- if(IsWindow(hwndTClockMain))
- PostMessage(hwndTClockMain, WM_USER+2, 0, 0);
- }
-
- /*------------------------------------------------
- ü@IE4é⌐é╟éñé⌐
- --------------------------------------------------*/
- BOOL IsIE4(HWND hwnd)
- {
- char classname[80];
-
- hwnd = GetParent(GetParent(hwnd));
- if(hwnd == NULL) return FALSE;
- hwnd = GetWindow(hwnd, GW_CHILD);
- while(hwnd)
- {
- GetClassName(hwnd, classname, 80);
- if(_stricmp(classname, "ReBarWindow32") == 0)
- return TRUE;
- hwnd = GetWindow(hwnd, GW_HWNDNEXT);
- }
- return FALSE;
- }
-
- /*------------------------------------------------
- ü@Ä₧îvâEâBâôâhâEé╠âTâuâNâëâXâvâìâVü[âWââ
- --------------------------------------------------*/
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch(message) // âcü[âïâ`âbâvæ╬ë₧
- {
- case WM_LBUTTONDOWN:
- case WM_RBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_RBUTTONUP:
- case WM_MBUTTONUP:
- case WM_MOUSEMOVE:
- {
- MSG msg;
- msg.hwnd = hwnd;
- msg.message = message;
- msg.wParam = wParam;
- msg.lParam = lParam;
- msg.time = GetMessageTime();
- msg.pt.x = LOWORD(GetMessagePos());
- msg.pt.y = HIWORD(GetMessagePos());
- if(hwndTip)
- SendMessage(hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
- }
- }
-
- switch(message)
- {
- // ÉeâEâBâôâhâEé⌐éτæùéτéΩüAâTâCâYé≡ò╘é╖âüâbâZü[âW
- case (WM_USER+100):
- if(bNoClock) break;
- return OnCalcRect(hwnd);
- // âVâXâeâÇé╠É▌ÆΦé≡ö╜ëfé╖éΘ
- case WM_SYSCOLORCHANGE:
- CreateClockDC(hwnd); //hdcClockì∞éΦÆ╝é╡
- case WM_WININICHANGE:
- case WM_TIMECHANGE:
- // ÉeâEâBâôâhâEé⌐éτæùéτéΩéΘ
- case (WM_USER+101):
- {
- HDC hdc;
- if(bNoClock) break;
- hdc = GetDC(hwnd);
- DrawClock(hwnd, hdc);
- ReleaseDC(hwnd, hdc);
- return 0;
- }
- case WM_SIZE:
- CreateClockDC(hwnd); //hdcClockì∞éΦÆ╝é╡
- break;
- case WM_ERASEBKGND:
- break;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc;
- if(bNoClock) break;
- hdc = BeginPaint(hwnd, &ps);
- DrawClock(hwnd, hdc);
- EndPaint(hwnd, &ps);
- return 0;
- }
- case WM_TIMER:
- if(wParam == 1) OnTimer(hwnd);
- return 0;
- // â}âEâXâ_âEâô
- case WM_LBUTTONDOWN:
- case WM_RBUTTONDOWN:
- case WM_MBUTTONDOWN:
- if(nBlink)
- {
- nBlink = 0; InvalidateRect(hwnd, NULL, TRUE);
- }
- if(message == WM_LBUTTONDOWN && bStartMenuClock &&
- hwndStart && IsWindow(hwndStart))
- {
- // âXâ^ü[âgâüâjâàü[
- PostMessage(hwndStart, WM_LBUTTONDOWN, 0, 0);
- }
- buttondown = message;
- return 0;
- // â}âEâXâAâbâv
- case WM_LBUTTONUP:
- if(buttondown == WM_LBUTTONDOWN)
- PostMessage(hwndTClockMain, buttondown, wParam, lParam);
- buttondown = 0;
- return 0;
- case WM_RBUTTONUP:
- if(buttondown == WM_RBUTTONDOWN)
- PostMessage(hwndTClockMain, buttondown, wParam, lParam);
- buttondown = 0;
- break;
- case WM_MBUTTONUP:
- if(buttondown == WM_MBUTTONDOWN)
- PostMessage(hwndTClockMain, buttondown, wParam, lParam);
- buttondown = 0;
- return 0;
- // â_âuâïâNâèâbâN
- case WM_LBUTTONDBLCLK:
- if(bStartMenuClock) return 0;
- case WM_RBUTTONDBLCLK:
- case WM_MBUTTONDBLCLK:
- PostMessage(hwndTClockMain, message, wParam, lParam);
- return 0;
- case WM_CONTEXTMENU: // ëEâNâèâbâNâüâjâàü[
- if(hMenu)
- TrackPopupMenu(hMenu, TPM_LEFTALIGN, LOWORD(lParam), HIWORD(lParam),
- 0, hwnd, NULL);
- return 0;
- case WM_NCHITTEST: // oldWndProcé╔Åêù¥é│é╣é╚éó
- return DefWindowProc(hwnd, message, wParam, lParam);
- // âtâ@âCâïé╠âhâìâbâv
- case WM_DROPFILES:
- PostMessage(hwndTClockMain, WM_DROPFILES, wParam, lParam);
- return 0;
- case WM_COMMAND:
- {
- WORD wID;
- wID = LOWORD(wParam);
- switch (wID)
- {
- case 100: // TClocké╠╠▀█╩▀├¿
- PostMessage(hwndTClockMain, WM_USER+1, 0, 0);
- return 0;
- case 101: // TClocké╠═┘╠▀
- PostMessage(hwndTClockMain, WM_USER+5, 0, 0);
- return 0;
- case 102: // TClocké╠ÅIù╣
- EndClock();
- return 0;
- default:
- // â^âXâNâoü[é╔Åêù¥é│é╣éΘ
- PostMessage(GetParent(GetParent(hwnd)), message,
- wParam, lParam);
- return 0;
- }
- break;
- }
- case WM_NOTIFY: //âcü[âïâ`âbâvé╠âeâLâXâgò\Ī
- if(((LPNMHDR)lParam)->code == TTN_NEEDTEXT)
- {
- strcpy(((LPTOOLTIPTEXT)lParam)->szText, "TClock ");
- GetDateFormat(LOCALE_USER_DEFAULT,
- DATE_LONGDATE, NULL, NULL,
- ((LPTOOLTIPTEXT)lParam)->szText + 7,
- 80 - 7);
- SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0,
- SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
- }
- break;
- case (WM_USER+1): // RefreshTClock() é⌐éτæùéτéΩéΘ
- {
- BOOL b;
- ReadData(hwnd);
- SetStartButton(hwnd);
- SetStartMenu(hwnd);
- ClearStartMenuIE4();
- CreateClockDC(hwnd);
- if(!GetMyRegLong("DropFiles", &b)) b = FALSE;
- DragAcceptFiles(hwnd, b);
- InvalidateRect(hwnd, NULL, FALSE);
- PostMessage(GetParent(GetParent(hwnd)), WM_SIZE,
- SIZE_RESTORED, 0);
- InvalidateRect(GetParent(GetParent(hwndClock)), NULL, TRUE);
- return 0;
- }
- case (WM_USER+2): // BlinkTClock() é⌐éτæùéτéΩéΘ
- {
- if(wParam) { if(nBlink == 0) nBlink = 4; }
- else nBlink = 2;
- return 0;
- }
- case WM_DESTROY:
- //EndClock(); ver1.6.4é┼é╞éΦéáéªé╕ìφÅ£
- break;
- }
- return CallWindowProc(oldWndProc, hwnd, message, wParam, lParam);
- }
-
- /*------------------------------------------------
- ü@É▌ÆΦé╠ô╟é▌ì₧é▌é╞âfü[â^é╠Åëè·ë╗
- --------------------------------------------------*/
- void ReadData(HWND hwnd)
- {
- char s[1024];
- char fontname[1024];
- int fontsize;
- LONG weight, italic;
- BOOL b;
-
- if(!GetMyRegLong("ForeColor", &colfore))
- colfore = 0x80000000 | COLOR_BTNTEXT;
- if(!GetMyRegLong("BackColor", &colback))
- colback = 0x80000000 | COLOR_3DFACE;
-
- if(!GetMyRegStr("Font", fontname))
- strcpy(fontname, "élér éoâSâVâbâN");
- if(!GetMyRegLong("FontSize", &fontsize))
- fontsize = 9;
- if(!GetMyRegLong("Bold", &weight))
- weight = 0;
- if(weight) weight = FW_BOLD;
- else weight = FW_NORMAL;
- if(!GetMyRegLong("Italic", &italic))
- italic = 0;
-
- if(hFon) DeleteObject(hFon);
- hFon = CreateMyFont(fontname, fontsize, weight, italic);
-
- if(!GetMyRegStr("Format", format))
- {
- RECT rc;
- strcpy(format, "yy/mm/dd ddd");
- GetClientRect(GetParent(GetParent(hwndClock)), &rc);
- if(rc.right > rc.bottom)
- strcat(format, " ");
- else
- strcat(format, "\\n");
- strcat(format, "hh:nn:ss");
- }
-
- if(!GetMyRegLong("Hour12", &bHour12))
- bHour12 = 0;
- if(GetRegStr(HKEY_CURRENT_USER, "Control Panel\\International",
- "sDate", s)) sDate = s[0];
- else sDate = '/';
- if(GetRegStr(HKEY_CURRENT_USER, "Control Panel\\International",
- "sTime", s)) sTime = s[0];
- else sTime = ':';
-
- if(GetRegStr(HKEY_CURRENT_USER, "Control Panel\\International",
- "s1159", s)) { strncpy(sAM, s, 10); sAM[10] = 0; }
- else strcpy(sAM, "î▀æO");
- if(GetRegStr(HKEY_CURRENT_USER, "Control Panel\\International",
- "s2359", s)) { strncpy(sPM, s, 10); sPM[10] = 0; }
- else strcpy(sPM, "î▀îπ");
-
- if(!GetMyRegLong("NoClock", &bNoClock))
- bNoClock = FALSE;
-
- if(!GetMyRegLong("StartButtonHide", &bStartMenuClock))
- bStartMenuClock = FALSE;
- if(bStartMenuClock &&
- !GetMyRegLong("StartMenuClock", &bStartMenuClock))
- bStartMenuClock = FALSE;
- }
-
- /*------------------------------------------------
- ü@ëEâNâèâbâNÄ₧é╠â|âbâvâAâbâvâüâjâàü[é╠ì∞ɼ
- --------------------------------------------------*/
- HMENU CreateClockMenu(void)
- {
- HMENU hm;
-
- hm = CreatePopupMenu();
-
- AppendMenu(hm, MF_STRING, 408, "ô·òté╞Ä₧ìÅé╠Æ▓É«(&A)");
- AppendMenu(hm, MF_STRING, 403, "Ådé╦é─ò\Ī(&C)");
- AppendMenu(hm, MF_STRING, 404, "Åπë║é╔ò└é╫é─ò\Ī(&H)");
- AppendMenu(hm, MF_STRING, 405, "ì╢ëEé╔ò└é╫é─ò\Ī(&V)");
- AppendMenu(hm, MF_SEPARATOR, 0, 0);
- AppendMenu(hm, MF_STRING, 415, "æS│¿▌─▐│é≡ì┼żë╗(&M)");
- AppendMenu(hm, MF_SEPARATOR, 0, 0);
- if(!(GetVersion() & 0x80000000))
- {
- AppendMenu(hm, MF_STRING, 420, "└╜╕ ╧╚░╝▐¼(&T)...");
- AppendMenu(hm, MF_SEPARATOR, 0, 0);
- }
- AppendMenu(hm, MF_STRING, 413, "└╜╕╩▐░é╠╠▀█╩▀├¿(&R)");
- AppendMenu(hm, MF_SEPARATOR, 0, 0);
- AppendMenu(hm, MF_STRING, 100, "TClocké╠╠▀█╩▀├¿(&K)");
- AppendMenu(hm, MF_STRING, 101, "TClocké╠═┘╠▀(&L)");
- AppendMenu(hm, MF_STRING, 102, "TClocké╠ÅIù╣(&X)");
- SetMenuDefaultItem(hm, 408, FALSE);
- return hm;
- }
-
- /*------------------------------------------------
- ü@âcü[âïâ`âbâvâEâBâôâhâEé╠ì∞ɼ
- --------------------------------------------------*/
- void CreateTip(HWND hwnd)
- {
- TOOLINFO ti;
-
- hwndTip = CreateWindow(TOOLTIPS_CLASS, (LPSTR)NULL,
- TTS_ALWAYSTIP,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hmod, NULL);
- if(!hwndTip) return;
-
- ti.cbSize = sizeof(TOOLINFO);
- ti.uFlags = 0;
- ti.hwnd = hwnd;
- ti.hinst = 0;
- ti.uId = 1;
- ti.lpszText = LPSTR_TEXTCALLBACK;
- ti.rect.left = 0;
- ti.rect.top = 0;
- ti.rect.right = 480;
- ti.rect.bottom = 480;
-
- SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO)&ti);
- SendMessage(hwndTip, TTM_ACTIVATE, TRUE, 0);
- }
-
- /*------------------------------------------------
- ü@ò`ëµùpâüâéâèDCé╠ì∞ɼ
- --------------------------------------------------*/
- void CreateClockDC(HWND hwnd)
- {
- RECT rc;
- COLORREF col;
- HDC hdc;
-
- if(hdcClock) DeleteDC(hdcClock); hdcClock = NULL;
- if(hbmpClock) DeleteObject(hbmpClock); hbmpClock = NULL;
-
- if(bNoClock) return;
-
- GetClientRect(hwnd, &rc);
-
- hdc = GetDC(NULL);
-
- hdcClock = CreateCompatibleDC(hdc);
- if(!hdcClock) return;
- hbmpClock = CreateCompatibleBitmap(hdc, rc.right, rc.bottom);
- if(!hbmpClock) return;
- SelectObject(hdcClock, hbmpClock);
-
- SelectObject(hdcClock, hFon);
- SetBkMode(hdcClock, TRANSPARENT);
- SetTextAlign(hdcClock, TA_CENTER|TA_TOP);
- col = colfore;
- if(col & 0x80000000) col = GetSysColor(col & 0x00ffffff);
- SetTextColor(hdcClock, col);
-
- ReleaseDC(NULL, hdc);
- }
-
- /*------------------------------------------------
- ü@WM_TIMER é╠Åêù¥
- --------------------------------------------------*/
- void OnTimer(HWND hwnd)
- {
- SYSTEMTIME t;
- HDC hdc;
-
- GetLocalTime(&t);
- if(bNoClock) hdc = NULL;
- else if(!IsDispSecond(format) && // òbò\Īé╚é╡é╠é╞é½
- nBlink == 0 &&
- hourLast == (int)t.wHour && minuteLast == (int)t.wMinute)
- hdc = NULL;
- else hdc = GetDC(hwnd);
-
- // TClockâEâBâôâhâEé╔âAâëü[âÇÅêù¥é│é╣éΘ
- if(hourLast != (int)t.wHour || minuteLast != (int)t.wMinute)
- PostMessage(hwndTClockMain, WM_USER+4,
- t.wMinute, MAKELONG(t.wHour, t.wDay));
-
- hourLast = t.wHour;
- minuteLast = t.wMinute;
-
- if(nBlink >= 3 && t.wMinute == 1) nBlink = 0;
-
- if(hdc)
- {
- DrawClockSub(hwnd, hdc, &t); //ò`ëµ
- ReleaseDC(hwnd, hdc);
- }
-
- if(nBlink)
- {
- if(nBlink % 2) nBlink++;
- else nBlink--;
- }
- }
-
- /*------------------------------------------------
- ü@Ä₧îvé╠ò`ëµ
- --------------------------------------------------*/
- void DrawClock(HWND hwnd, HDC hdc)
- {
- SYSTEMTIME t;
- GetLocalTime(&t);
- DrawClockSub(hwnd, hdc, &t);
- }
- void DrawClockSub(HWND hwnd, HDC hdc, SYSTEMTIME* pt)
- {
- COLORREF col;
- HBRUSH hbr;
- RECT rc;
- TEXTMETRIC tm;
- int hf, y;
- char s[1024], *p, *sp;
-
- if(!hdcClock) CreateClockDC(hwnd);
-
- if(!hdcClock || !hbmpClock) return;
-
- MakeFormat(s, pt, format);
-
- GetClientRect(hwnd, &rc);
- GetTextMetrics(hdcClock, &tm);
-
- if(nBlink == 0 || (nBlink % 2)) col = colfore;
- else col = colback;
- if(col & 0x80000000) col = GetSysColor(col & 0x00ffffff);
- SetTextColor(hdcClock, col);
-
- if(nBlink == 0 || (nBlink % 2)) col = colback;
- else col = colfore;
- if(col & 0x80000000) col = GetSysColor(col & 0x00ffffff);
- hbr = CreateSolidBrush(col);
- FillRect(hdcClock, &rc, hbr);
- DeleteObject(hbr);
-
- hf = tm.tmHeight - tm.tmInternalLeading;
- p = s;
- y = hf / 4 - tm.tmInternalLeading / 2;
- while(*p)
- {
- sp = p;
- while(*p && *p != 0x0d) p++;
- if(*p == 0x0d) { *p = 0; p += 2; }
- if(*p == 0 && sp == s)
- y = (rc.bottom - tm.tmHeight) / 2 - tm.tmInternalLeading / 4;
- TextOut(hdcClock, rc.right/2, y, sp, strlen(sp));
- y += hf; if(*p) y += 2;
- }
- BitBlt(hdc, 0, 0, rc.right, rc.bottom, hdcClock, 0, 0, SRCCOPY);
- }
-
- /*------------------------------------------------
- ü@Ä₧îvé╔òKùvé╚âTâCâYé≡ò╘é╖
- ü@û▀éΦÆlüFÅπê╩WORD ìéé│ü@ë║ê╩WORD ò¥
- --------------------------------------------------*/
- LRESULT OnCalcRect(HWND hwnd)
- {
- SYSTEMTIME t;
- LRESULT w, h;
- HDC hdc;
- TEXTMETRIC tm;
- char s[1024], *p, *sp;
- SIZE sz;
- int hf;
-
- if(!IsWindowVisible(hwnd)) return 0;
-
- hdc = GetDC(hwnd);
-
- if(hFon) SelectObject(hdc, hFon);
- GetTextMetrics(hdc, &tm);
-
- t.wYear = 1996; t.wMonth = 12; t.wDay = 31;
- t.wDayOfWeek = 1; t.wHour = 11; t.wMinute = 30;
- t.wSecond = 30; t.wMilliseconds = 0;
- MakeFormat(s, &t, format);
-
- p = s; w = 0; h = 0;
- hf = tm.tmHeight - tm.tmInternalLeading;
- while(*p)
- {
- sp = p;
- while(*p && *p != 0x0d) p++;
- if(*p == 0x0d) { *p = 0; p += 2; }
- GetTextExtentPoint32(hdc, sp, strlen(sp), &sz);
- if(w < sz.cx) w = sz.cx;
- h += hf; if(*p) h += 2;
- }
- w += tm.tmAveCharWidth * 2;
- h += hf / 2;
-
- ReleaseDC(hwnd, hdc);
-
- return (h << 16) + w;
- }
-