1
+ // AnalogClock.cpp : Defines the entry point for the application.
2
+
3
+ #include " StdAfx.h"
4
+ #include " Globals.h"
5
+ #include " resource.h"
6
+ #include " Bitmap.h"
7
+ #include " Clock.h"
8
+ #include " Menu.h"
9
+ #include " EventHandler.h"
10
+ #include " RuntimeLibrary.h"
11
+ #include " RegistryFunctions.h"
12
+ #include " AnalogClock.h"
13
+
14
+ // Clock variables
15
+ POINT CENTRE;
16
+ int RADIUS=68 ;
17
+
18
+ HINSTANCE g_hInstance; /* This application's HINSTANCE */
19
+ HRGN g_hRgn; /* WindowRegion*/
20
+ HBITMAP g_hBitMap; /* Image for Skin*/
21
+ HMENU g_hPopupMenu; /* Handle to Menu*/
22
+ HBRUSH g_hBackGndBrush;
23
+ HANDLE g_hMutex;
24
+ /*
25
+ * Window procedure
26
+ */
27
+ LRESULT CALLBACK WndProc (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
28
+ {
29
+ switch (uiMsg) {
30
+ HANDLE_MSG (hwnd, WM_CREATE, OnCreate);
31
+ HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
32
+ // HANDLE_MSG(hwnd, WM_CLOSE, OnDestroy);
33
+ HANDLE_MSG (hwnd, WM_PAINT, OnPaint);
34
+ HANDLE_MSG (hwnd, WM_MOUSEMOVE, OnMouseMove);
35
+ HANDLE_MSG (hwnd, WM_LBUTTONDOWN,OnLButtonDown );
36
+ HANDLE_MSG (hwnd, WM_LBUTTONDBLCLK,OnLButtonDown );
37
+ HANDLE_MSG (hwnd, WM_LBUTTONUP, OnLButtonUp );
38
+ HANDLE_MSG (hwnd, WM_RBUTTONDOWN,OnRButtonDown);
39
+ HANDLE_MSG (hwnd, WM_RBUTTONUP, OnRButtonUp);
40
+ HANDLE_MSG (hwnd, WM_COMMAND, OnContextMenu);
41
+ HANDLE_MSG (hwnd, WM_SYSCOMMAND, OnSysCommand);
42
+ HANDLE_MSG (hwnd, WM_MOVE, OnMove);
43
+ HANDLE_MSG (hwnd, WM_ERASEBKGND, OnEraseBkgnd);
44
+
45
+ case WM_PRINTCLIENT: OnPaintClient (hwnd, (HDC)wParam); return 0 ;
46
+ case WM_ENTERMENULOOP:
47
+ RemoveMenu (GetSystemMenu (hwnd,false ),SC_MOVE,MF_BYCOMMAND);
48
+ return DefWindowProc (hwnd, uiMsg, wParam, lParam);
49
+ case WM_EXITMENULOOP:
50
+ InsertMenu (GetSystemMenu (hwnd,false ),0 ,MF_BYPOSITION|MF_STRING,SC_MOVE," Move" );
51
+ return DefWindowProc (hwnd, uiMsg, wParam, lParam);
52
+ }
53
+
54
+ return DefWindowProc (hwnd, uiMsg, wParam, lParam);
55
+ }
56
+
57
+ BOOL
58
+ InitApp (void )
59
+ {
60
+ WNDCLASS wc;
61
+
62
+ LOGBRUSH brBackGround;
63
+
64
+ g_hBitMap=(HBITMAP)LoadImage (NULL ," ./skin/AnalogClock.bmp" ,IMAGE_BITMAP,0 ,0 ,LR_LOADFROMFILE);
65
+
66
+ // Load default Image if one is not Present
67
+ if (g_hBitMap==NULL )
68
+ g_hBitMap=(HBITMAP)LoadImage (g_hInstance,MAKEINTRESOURCE (IDB_MainSkin),IMAGE_BITMAP,0 ,0 ,LR_DEFAULTCOLOR);
69
+ brBackGround.lbStyle = BS_PATTERN;
70
+ brBackGround.lbHatch = (long ) g_hBitMap;
71
+ g_hBackGndBrush=CreateBrushIndirect (&brBackGround);
72
+ wc.style = CS_DBLCLKS;
73
+ wc.lpfnWndProc = WndProc;
74
+ wc.cbClsExtra = 0 ;
75
+ wc.cbWndExtra = 0 ;
76
+ wc.hInstance = g_hInstance;
77
+ wc.hIcon = LoadIcon (g_hInstance,MAKEINTRESOURCE (IDI_MAIN));
78
+ wc.hCursor = LoadCursor (NULL , IDC_ARROW);
79
+ wc.hbrBackground = g_hBackGndBrush;
80
+ wc.lpszMenuName = NULL ;
81
+ wc.lpszClassName =" AnalogClock" ;
82
+
83
+ if (!RegisterClass (&wc)) return FALSE ;
84
+
85
+ return TRUE ;
86
+ }
87
+
88
+ int WINAPI WinMain (HINSTANCE hinst, HINSTANCE hinstPrev,
89
+ LPSTR lpCmdLine, int nShowCmd)
90
+ {
91
+ MSG msg;
92
+ HWND hwnd;
93
+
94
+ g_hInstance = hinst;
95
+ char sMutexName []=" Ady's Analog Clock" ;
96
+
97
+ // quit if already a process is running, but highlight the previous instance*/
98
+ g_hMutex=CreateMutex (NULL , FALSE ,sMutexName );
99
+ if (GetLastError ()==ERROR_ALREADY_EXISTS)
100
+ {
101
+ HWND hPrivWin;
102
+ if (ReadSetting (NULL ," MainWindow" ,(BYTE &) hPrivWin,sizeof (hPrivWin))>0 )
103
+ FlashWindow (hPrivWin,false );
104
+ SetForegroundWindow (hPrivWin);
105
+ return 1 ;
106
+ }
107
+
108
+ AnalogClock NewClock;
109
+ RECT rcRect;
110
+ hwnd=NewClock.CreateClock (hinst);
111
+
112
+ // just create non volatile key
113
+ SaveSetting (NULL ,NULL ,REG_SZ,(BYTE &)TEXT (" Please visit http://adarsha.mv.googlepages.com for Latest Version" ),sizeof (TEXT (" Please visit http://adarsha.mv.googlepages.com for Latest Version" )));
114
+
115
+ // Save window handle in the eregistry which will be used by future instances of the program
116
+ SaveSetting (NULL ," MainWindow" ,REG_BINARY,(BYTE &)hwnd,sizeof (HWND),true );
117
+
118
+ // SetWindowPos(hwnd,HWND_NOTOPMOST,X ,Y,bitmap.bmWidth,bitmap.bmHeight,SWP_FRAMECHANGED);
119
+ ShowWindow (hwnd, nShowCmd);
120
+ GetWindowRect (hwnd,&rcRect);
121
+
122
+ // initialize Clock variables
123
+ CENTRE.x =CENTRE.y =(rcRect.right -4 -rcRect.left ) /2 ;
124
+ // = (rcRect.bottom-1-rcRect.top) /2;
125
+ RADIUS= int (0.395 *(rcRect.right -rcRect.left ));
126
+ while (GetMessage (&msg, NULL , 0 , 0 )) {
127
+ TranslateMessage (&msg);
128
+ DispatchMessage (&msg);
129
+ }
130
+
131
+ /* CoUninitialize();
132
+ }*/
133
+
134
+ return 0 ;
135
+ }
136
+ AnalogClock::AnalogClock (void )
137
+ {
138
+ }
139
+
140
+ AnalogClock::~AnalogClock (void )
141
+ {
142
+ }
143
+ HWND AnalogClock ::CreateClock (HINSTANCE hInst)
144
+ {
145
+ WNDCLASS wc;
146
+ HWND hwnd;
147
+ BITMAP bitmap;
148
+ short X,Y; long wPos;
149
+
150
+ m_hBitMap=(HBITMAP)LoadImage (NULL ," ./skin/AnalogClock.bmp" ,IMAGE_BITMAP,0 ,0 ,LR_LOADFROMFILE);
151
+
152
+ // Load default Image if one is not Present
153
+ if (m_hBitMap==NULL )
154
+ m_hBitMap=(HBITMAP)LoadImage (hInst,MAKEINTRESOURCE (IDB_MainSkin),IMAGE_BITMAP,0 ,0 ,LR_DEFAULTCOLOR);
155
+ g_hBitMap=m_hBitMap;
156
+ LOGBRUSH brBackGround;
157
+ brBackGround.lbStyle = BS_PATTERN;
158
+ brBackGround.lbHatch = (long ) g_hBitMap;
159
+ HBRUSH hBackGndBrush=CreateBrushIndirect (&brBackGround);
160
+
161
+ wc.style = CS_DBLCLKS;
162
+ wc.lpfnWndProc = WndProc;
163
+ wc.cbClsExtra = 0 ;
164
+ wc.cbWndExtra = 0 ;
165
+ wc.hInstance = g_hInstance;
166
+ wc.hIcon = LoadIcon (g_hInstance,MAKEINTRESOURCE (IDI_MAIN));
167
+ wc.hCursor = LoadCursor (NULL , IDC_ARROW);
168
+ wc.hbrBackground =hBackGndBrush; // CreateSolidBrush(RGB(128,128,128));
169
+ wc.lpszMenuName = NULL ;
170
+ wc.lpszClassName =" AnalogClock" ;
171
+
172
+ if (!RegisterClass (&wc)) return NULL ;
173
+ GetObject (g_hBitMap, sizeof (BITMAP), &bitmap);
174
+
175
+
176
+ ReadSetting (NULL ," LastWindowPos" ,(unsigned char &) wPos,sizeof (wPos));
177
+ X=LOWORD (wPos);
178
+ Y=HIWORD (wPos);
179
+ X= short (X<0 ?0 :(X>GetSystemMetrics (SM_CXSCREEN)?GetSystemMetrics (SM_CXSCREEN)-bitmap.bmWidth :X));
180
+ Y= short (Y<0 ?0 :(Y>GetSystemMetrics (SM_CYSCREEN)?GetSystemMetrics (SM_CYSCREEN)-bitmap.bmHeight :Y));
181
+
182
+ hwnd = CreateWindow (
183
+ " AnalogClock" , /* Class Name */
184
+ " AnalogClock" , /* Title */
185
+ WS_POPUP | WS_SYSMENU, /* Style */
186
+ X,Y, /* Position */
187
+ bitmap.bmWidth ,bitmap.bmHeight , /* Size */
188
+ NULL , /* Parent */
189
+ NULL , /* No menu */
190
+ hInst, /* Instance */
191
+ 0 ); /* No special parameters */
192
+
193
+ return hwnd;
194
+ }
0 commit comments