/* 2010-02-08 john pfeiffer, MS windows clock v3 (the windows)
*/
#include <time.h>
#include <string.h>
#include <windows.h>
#define IDC_MyExitButton 40001 /* case sensitive! random high number to keep windows happy */
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void get_current_time( char current_time[128] );
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument,
int ncmdshow)
{
HWND hwnd; /* The handle for our window */
HWND ButtonPushed = NULL;
MSG messages; /* Messages to the application */
WNDCLASS wc; /* Data structure for our defined windowclass */
wc.style = 0;
wc.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wc.cbClsExtra = 0; /* No extra bytes after the window class */
wc.cbWndExtra = 0; /* structure or the window instance */
wc.hInstance = hThisInstance; /* handle to the owner */
wc.hIcon = NULL; /* no special application icon */
wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* default cursor */
wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = NULL; /* No menu */
wc.lpszClassName = "WindowsApp"; /* the name of the windows class */
/* Register the window class, if fail quit the program with an error value */
if( RegisterClass(&wc) ==0 ){ return -1; }
/* The class is registered, let's instantiate our window */
hwnd = CreateWindowEx( 1, "WindowsApp", "Windows Title",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hThisInstance, NULL );
/* create button and store the handle */
ButtonPushed = CreateWindow(
"button", /* class name */
"Push to Quit", /* button caption */
WS_CHILD |WS_VISIBLE | BS_PUSHBUTTON, /* the styles */
0,0, /* the left and top coordinates */
150,50, /* width and height */
hwnd, /* parent window handle */
(HMENU)IDC_MyExitButton, /* the ID of your button */
hThisInstance, /* the instance of your application */
NULL) ; /* unnecessary extra */
ShowWindow(hwnd, ncmdshow); /* Make the window visible on the screen */
UpdateWindow(hwnd); /* update with changes */
/* Run the message loop. It will run until GetMessage( ) returns 0 */
while( GetMessage(&messages, NULL, 0, 0) )
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
/* The program return-value is 0 - The value that PostQuitMessage( ) gave */
return messages.wParam;
}
/* This function is called by the Windows function DispatchMessage( ) */
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char current_time[128];
PAINTSTRUCT ps; /* a structure for a paint job (see below */
RECT rect; /* a structure to hold rectangle values (e.g. x,y coordinates) */
HDC hdc; /* handle to a DC (buffer) for the screen */
switch (message) /* handle the messages */
{
case WM_COMMAND:
switch(LOWORD(wParam)) /* find out what's been clicked */
{
case IDC_MyExitButton:
PostQuitMessage(0);
break;
default:
break;
}
break;
case WM_PAINT:
GetClientRect( hwnd, &rect ); /* get the size of our window */
hdc = BeginPaint( hwnd, &ps ); /* begin painting to the buffer */
get_current_time( current_time );
DrawText( hdc, TEXT(current_time), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint( hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0); /* send a WM_QUIT */
break;
default: /* for messages that we don't deal with */
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
/* Get the current time from the system and update the time string */
void get_current_time( char current_time[128] )
{
time_t tempTime;
tempTime = time(NULL); /* initialize the variable, otherwise only returns 1970 date */
strcpy(current_time, asctime(localtime(&tempTime)));
}