|  | /* | 
|  | * Clock | 
|  | * | 
|  | * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch> | 
|  | * | 
|  | * Clock is partially based on | 
|  | * - Program Manager by Ulrich Schmied | 
|  | * - rolex.c by Jim Peterson | 
|  | * | 
|  | */ | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include "windows.h" | 
|  | #include "main.h" | 
|  | #include "license.h" | 
|  | #include "version.h" | 
|  | #include "language.h" | 
|  | #include "winclock.h" | 
|  | #include "commdlg.h" | 
|  |  | 
|  | #ifdef WINELIB | 
|  | #include "options.h" | 
|  | #include "resource.h" | 
|  | #include "shell.h" | 
|  | void LIBWINE_Register_Da(); | 
|  | void LIBWINE_Register_De(); | 
|  | void LIBWINE_Register_En(); | 
|  | void LIBWINE_Register_Es(); | 
|  | void LIBWINE_Register_Fr(); | 
|  | void LIBWINE_Register_Sw(); | 
|  | #endif | 
|  |  | 
|  | CLOCK_GLOBALS Globals; | 
|  |  | 
|  | /*********************************************************************** | 
|  | * | 
|  | *           CLOCK_MenuCommand | 
|  | * | 
|  | *  All handling of main menu events | 
|  | */ | 
|  |  | 
|  | int CLOCK_MenuCommand (WPARAM wParam) | 
|  | { | 
|  | switch (wParam) { | 
|  | case CL_ANALOG: { | 
|  | Globals.bAnalog = TRUE; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0); | 
|  | break; | 
|  | } | 
|  | case CL_DIGITAL: { | 
|  | Globals.bAnalog = FALSE; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0); | 
|  | break; | 
|  | } | 
|  | case CL_FONT: { | 
|  | MAIN_FileChooseFont(); | 
|  | break; | 
|  | } | 
|  | case CL_WITHOUT_TITLE: { | 
|  | Globals.bWithoutTitle = !Globals.bWithoutTitle; | 
|  | LANGUAGE_UpdateWindowCaption(); | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | break; | 
|  | } | 
|  | case CL_ON_TOP: { | 
|  | Globals.bAlwaysOnTop = !Globals.bAlwaysOnTop; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | break; | 
|  | } | 
|  | case CL_SECONDS: { | 
|  | Globals.bSeconds = !Globals.bSeconds; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0); | 
|  | break; | 
|  | } | 
|  | case CL_DATE: { | 
|  | Globals.bDate = !Globals.bDate; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | LANGUAGE_UpdateWindowCaption(); | 
|  | break; | 
|  | } | 
|  | case CL_INFO_LICENSE: { | 
|  | WineLicense(Globals.hMainWnd, Globals.lpszLanguage); | 
|  | break; | 
|  | } | 
|  | case CL_INFO_NO_WARRANTY: { | 
|  | WineWarranty(Globals.hMainWnd, Globals.lpszLanguage); | 
|  | break; | 
|  | } | 
|  | case CL_INFO_ABOUT_WINE: { | 
|  | ShellAbout(Globals.hMainWnd, "Clock", "Clock\n" WINE_RELEASE_INFO, 0); | 
|  | break; | 
|  | } | 
|  | // Handle languages | 
|  | default: | 
|  | LANGUAGE_DefaultHandle(wParam); | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | VOID MAIN_FileChooseFont(VOID) { | 
|  |  | 
|  | CHOOSEFONT font; | 
|  |  | 
|  | font.lStructSize     = sizeof(font); | 
|  | font.hwndOwner       = Globals.hMainWnd; | 
|  | font.hDC             = NULL; | 
|  | font.lpLogFont       = 0; | 
|  | font.iPointSize      = 0; | 
|  | font.Flags           = 0; | 
|  | font.rgbColors       = 0; | 
|  | font.lCustData       = 0; | 
|  | font.lpfnHook        = 0; | 
|  | font.lpTemplateName  = 0; | 
|  | font.hInstance       = Globals.hInstance; | 
|  | //        font.lpszStyle       = LF_FACESIZE; | 
|  | font.nFontType       = 0; | 
|  | font.nSizeMin        = 0; | 
|  | font.nSizeMax        = 144; | 
|  |  | 
|  | if (ChooseFont(&font)) { | 
|  | /* do nothing yet */ | 
|  | }; | 
|  |  | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | * | 
|  | *           CLOCK_WndProc | 
|  | */ | 
|  |  | 
|  | LRESULT CLOCK_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) | 
|  | { | 
|  | PAINTSTRUCT ps; | 
|  | HDC context; | 
|  |  | 
|  | switch (msg) { | 
|  |  | 
|  | case WM_CREATE: { | 
|  | printf("WM_CREATE\n"); | 
|  | break; | 
|  | } | 
|  |  | 
|  | case WM_RBUTTONUP: { | 
|  | printf("WM_RBUTTONUP\n"); | 
|  | Globals.bWithoutTitle = !Globals.bWithoutTitle; | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  | LANGUAGE_UpdateWindowCaption(); | 
|  | UpdateWindow (Globals.hMainWnd); | 
|  | break; | 
|  | } | 
|  |  | 
|  | case WM_PAINT: { | 
|  | printf("WM_PAINT\n"); | 
|  | context = BeginPaint(hWnd, &ps); | 
|  | if(Globals.bAnalog) { | 
|  | DrawFace(context); | 
|  | Idle(context); | 
|  | } | 
|  | else | 
|  | { | 
|  | /* do nothing */ | 
|  | } | 
|  | EndPaint(hWnd, &ps); | 
|  | break; | 
|  | } | 
|  |  | 
|  | case WM_SIZE: { | 
|  | printf("WM_SIZE\n"); | 
|  | Globals.MaxX = LOWORD(lParam); | 
|  | Globals.MaxY = HIWORD(lParam); | 
|  | OldHour.DontRedraw   = TRUE; | 
|  | OldMinute.DontRedraw = TRUE; | 
|  | OldSecond.DontRedraw = TRUE; | 
|  | break; | 
|  | } | 
|  |  | 
|  | case WM_COMMAND: { | 
|  | CLOCK_MenuCommand(wParam); | 
|  | break; | 
|  | } | 
|  |  | 
|  | case WM_DESTROY: { | 
|  | printf("WM_DESTROY\n"); | 
|  | PostQuitMessage (0); | 
|  | break; | 
|  | } | 
|  |  | 
|  | default: | 
|  | return DefWindowProc (hWnd, msg, wParam, lParam); | 
|  | } | 
|  | return 0l; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | * | 
|  | *           WinMain | 
|  | */ | 
|  |  | 
|  | int PASCAL WinMain (HANDLE hInstance, HANDLE prev, LPSTR cmdline, int show) | 
|  | { | 
|  | MSG      msg; | 
|  | WNDCLASS class; | 
|  |  | 
|  | char szClassName[] = "CLClass";  /* To make sure className >= 0x10000 */ | 
|  | char szWinName[]   = "Clock"; | 
|  |  | 
|  | #if defined(WINELIB) && !defined(HAVE_WINE_CONSTRUCTOR) | 
|  | /* Register resources */ | 
|  | LIBWINE_Register_Da(); | 
|  | LIBWINE_Register_De(); | 
|  | LIBWINE_Register_En(); | 
|  | LIBWINE_Register_Es(); | 
|  | LIBWINE_Register_Fr(); | 
|  | LIBWINE_Register_Sw(); | 
|  | #endif | 
|  |  | 
|  | /* Setup Globals */ | 
|  | Globals.bAnalog	    = TRUE; | 
|  | Globals.bSeconds        = TRUE; | 
|  | Globals.lpszIniFile     = "clock.ini"; | 
|  | Globals.lpszIcoFile     = "clock.ico"; | 
|  |  | 
|  | /* Select Language */ | 
|  | LANGUAGE_Init(); | 
|  |  | 
|  | Globals.hInstance       = hInstance; | 
|  | Globals.hMainIcon       = ExtractIcon(Globals.hInstance, | 
|  | Globals.lpszIcoFile, 0); | 
|  |  | 
|  | if (!Globals.hMainIcon) Globals.hMainIcon = | 
|  | LoadIcon(0, MAKEINTRESOURCE(DEFAULTICON)); | 
|  |  | 
|  | if (!prev){ | 
|  | class.style         = CS_HREDRAW | CS_VREDRAW; | 
|  | class.lpfnWndProc   = CLOCK_WndProc; | 
|  | class.cbClsExtra    = 0; | 
|  | class.cbWndExtra    = 0; | 
|  | class.hInstance     = Globals.hInstance; | 
|  | class.hIcon         = LoadIcon (0, IDI_APPLICATION); | 
|  | class.hCursor       = LoadCursor (0, IDC_ARROW); | 
|  | class.hbrBackground = GetStockObject (GRAY_BRUSH); | 
|  | class.lpszMenuName  = 0; | 
|  | class.lpszClassName = szClassName; | 
|  | } | 
|  |  | 
|  | if (!RegisterClass (&class)) return FALSE; | 
|  |  | 
|  | Globals.hMainWnd = CreateWindow (szClassName, szWinName, WS_OVERLAPPEDWINDOW, | 
|  | CW_USEDEFAULT, 0, CW_USEDEFAULT, Globals.MaxX, Globals.MaxY, | 
|  | LoadMenu(Globals.hInstance, STRING_MENU_Xx), Globals.hInstance, 0); | 
|  |  | 
|  | LANGUAGE_SelectByName(Globals.lpszLanguage); | 
|  | SetMenu(Globals.hMainWnd, Globals.hMainMenu); | 
|  |  | 
|  | LANGUAGE_UpdateMenuCheckmarks(); | 
|  |  | 
|  | ShowWindow (Globals.hMainWnd, show); | 
|  | UpdateWindow (Globals.hMainWnd); | 
|  |  | 
|  | while (TRUE) { | 
|  | Sleep(1); | 
|  | if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { | 
|  | if (msg.message == WM_QUIT) return msg.wParam; | 
|  | TranslateMessage(&msg); | 
|  | DispatchMessage(&msg); | 
|  | Idle(NULL); | 
|  | } | 
|  | else Idle(NULL); | 
|  | } | 
|  |  | 
|  | // We will never reach the following statement ! | 
|  | return 0; | 
|  | } | 
|  |  |