|
|
1.1 root 1: /*****************************************************************************
2: *
3: * Perfmon.c - This is the WinMain module. It creates the main window and
4: * the threads, and contains the main MainWndProc.
5: *
6: * Microsoft Confidential
7: * Copyright (c) 1992-1993 Microsoft Corporation
8: *
9: * Authors -
10: *
11: * Russ Blake
12: * Mike Moskowitz
13: * Hon-Wah Chan
14: * Bob Watson
15: *
16: ****************************************************************************/
17:
18:
19: //==========================================================================//
20: // Includes //
21: //==========================================================================//
22: #undef NOSYSCOMMANDS
23:
24: // DEFINE_GLOBALS will define all the globals listed in globals.h
25: #define DEFINE_GLOBALS
26:
27: #include "perfmon.h"
28:
29: #include "command.h"
30:
31: #include "graph.h"
32: #include "log.h"
33: #include "alert.h"
34: #include "report.h" // for CreateReportWindow
35: #include "legend.h"
36: #include "init.h"
37: #include "perfmops.h"
38: #include "toolbar.h" // for CreateToolbar
39: #include "status.h" // for CreatePMStatusWindow
40: #include "utils.h"
41:
42: #include "fileopen.h" // for FileOpen
43: #ifdef DEBUGDUMP
44: #include "debug.h"
45: #endif
46:
47:
48:
49: #define dwToolbarStyle (WS_CHILD | WS_VISIBLE | TBS_NOCAPTION)
50:
51: extern TCHAR szInternational[] ;
52:
53: //==========================================================================//
54: // Message Handlers //
55: //==========================================================================//
56:
57: void static OnSize (HWND hWnd,
58: WORD xWidth,
59: WORD yHeight)
60: /*
61: Effect: Perform any actions needed when the main window is
62: resized. In particular, size the four data windows,
63: only one of which is visible right now.
64: */
65: { // OnSize
66: SizePerfmonComponents () ;
67: }
68:
69:
70: void static OnCreate (HWND hWnd)
71: /*
72: Effect: Perform all actions needed when the main window is
73: created. In particular, create the three data windows,
74: and show one of them.
75:
76: To Do: Check for proper creation. If not possible, we will
77: need to abort creation of the program.
78:
79: Called By: MainWndProc only, in response to a WM_CREATE message.
80: */
81: { // OnCreate
82: hWndGraph = CreateGraphWindow (hWnd) ;
83:
84: #ifdef ADVANCED_PERFMON
85: hWndLog = CreateLogWindow (hWnd) ;
86: hWndAlert = CreateAlertWindow (hWnd) ;
87: hWndReport = CreateReportWindow (hWnd) ;
88: #endif
89:
90: hWndStatus = CreatePMStatusWindow (hWnd) ;
91:
92: CreateToolbarWnd (hWnd) ;
93: MinimumSize += WindowHeight (hWndToolbar) ;
94:
95: Options.bMenubar = TRUE ;
96: Options.bToolbar = TRUE ;
97: Options.bStatusbar = TRUE;
98: Options.bAlwaysOnTop = FALSE ;
99:
100: // initialize to chart view - HWC
101: iPerfmonView = IDM_VIEWCHART;
102:
103:
104: ShowWindow (PerfmonViewWindow (), SW_SHOWNORMAL) ;
105: } // OnCreate
106:
107:
108:
109: //==========================================================================//
110: // Exported Functions //
111: //==========================================================================//
112:
113: void MenuBarHit (DWORD wParam)
114: {
115: if (wParam == MENUCLOSING)
116: {
117: StatusLineReady (hWndStatus) ;
118: dwCurrentMenuID = 0 ;
119: }
120: else if (HIWORD(wParam) & MF_SYSMENU)
121: {
122: WORD SystemMenuItem = 0 ;
123: switch (LOWORD (wParam))
124: {
125: case SC_RESTORE:
126: SystemMenuItem = IDM_SYSTEMRESTORE ;
127: break ;
128:
129: case SC_SIZE:
130: SystemMenuItem = IDM_SYSTEMSIZE ;
131: break ;
132:
133: case SC_MOVE:
134: SystemMenuItem = IDM_SYSTEMMOVE ;
135: break ;
136:
137: case SC_MINIMIZE:
138: SystemMenuItem = IDM_SYSTEMMINIMIZE ;
139: break ;
140:
141: case SC_MAXIMIZE:
142: SystemMenuItem = IDM_SYSTEMMAXIMIZE ;
143: break ;
144:
145: case SC_CLOSE:
146: SystemMenuItem = IDM_SYSTEMCLOSE ;
147: break ;
148:
149: case SC_TASKLIST:
150: SystemMenuItem = IDM_SYSTEMSWITCHTO ;
151: break ;
152: }
153:
154: if (SystemMenuItem)
155: {
156: StatusLine (hWndStatus, SystemMenuItem) ;
157: dwCurrentMenuID = MenuIDToHelpID (SystemMenuItem) ;
158: }
159: }
160: else
161: {
162: StatusLine (hWndStatus, LOWORD (wParam)) ;
163: }
164: }
165:
166: void OnDropFile (DWORD wParam)
167: {
168: TCHAR FileName [FilePathLen + 1] ;
169: LPTSTR pFileNameStart ;
170: HANDLE hFindFile ;
171: WIN32_FIND_DATA FindFileInfo ;
172: int NameOffset ;
173: int NumOfFiles = 0 ;
174:
175: NumOfFiles = DragQueryFile ((HDROP) wParam, 0xffffffff, NULL, 0) ;
176: if (NumOfFiles > 0)
177: {
178: // we only open the first file for now
179: DragQueryFile((HDROP) wParam, 0, FileName, FilePathLen) ;
180:
181: pFileNameStart = ExtractFileName (FileName) ;
182: NameOffset = pFileNameStart - FileName ;
183:
184: // convert short filename to long NTFS filename if necessary
185: hFindFile = FindFirstFile (FileName, &FindFileInfo) ;
186: if (hFindFile && hFindFile != INVALID_HANDLE_VALUE)
187: {
188: // append the file name back to the path name
189: lstrcpy (&FileName[NameOffset], FindFileInfo.cFileName) ;
190: FindClose (hFindFile) ;
191: }
192:
193: FileOpen (hWndMain, (int)0, (LPTSTR)FileName) ;
194: PrepareMenu (GetMenu (hWndMain));
195: }
196:
197: DragFinish ((HDROP) wParam) ;
198: }
199:
200: LRESULT APIENTRY MainWndProc (HWND hWnd,
201: UINT message,
202: DWORD wParam,
203: LONG lParam)
204: {
205: LONG lRetCode = 0L ;
206: BOOL bCallDefWinProc = FALSE ;
207:
208: switch (LOWORD (message))
209: { // switch
210: case WM_LBUTTONDBLCLK:
211: ShowPerfmonMenu (!Options.bMenubar) ;
212: if (Options.bMenubar)
213: {
214: PrepareMenu (GetMenu (hWnd)) ;
215: }
216: break ;
217:
218: case WM_COMMAND:
219: if (PerfmonCommand (hWnd,wParam,lParam))
220: return(0);
221: else
222: bCallDefWinProc = TRUE ;
223: break;
224:
225: case WM_MENUSELECT:
226: MenuBarHit (wParam) ;
227: break ;
228:
229: case WM_NCHITTEST:
230: /* if we have no title/menu bar, clicking and dragging the client
231: * area moves the window. To do this, return HTCAPTION.
232: * Note dragging not allowed if window maximized, or if caption
233: * bar is present.
234: */
235: wParam = DefWindowProc(hWnd, message, wParam, lParam);
236: if (!Options.bMenubar &&
237: (wParam == HTCLIENT) &&
238: !IsZoomed (hWndMain))
239: return HTCAPTION ;
240: else
241: return wParam ;
242: break ;
243:
244:
245: case WM_SHOWWINDOW:
246: PrepareMenu (GetMenu (hWnd)) ;
247: break ;
248:
249: case WM_SIZE:
250: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ;
251: break ;
252:
253: case WM_GETMINMAXINFO:
254: {
255: MINMAXINFO *pMinMax ;
256:
257: pMinMax = (MINMAXINFO *) lParam ;
258: pMinMax->ptMinTrackSize.x = MinimumSize ;
259: pMinMax->ptMinTrackSize.y = MinimumSize ;
260: }
261: break ;
262:
263: case WM_F1DOWN:
264: if (dwCurrentDlgID)
265: {
266: CallWinHelp (dwCurrentDlgID) ;
267: }
268: else if (dwCurrentMenuID)
269: {
270: CallWinHelp (dwCurrentMenuID) ;
271: dwCurrentMenuID = 0 ;
272: }
273: break ;
274:
275: case WM_CREATE:
276: OnCreate (hWnd) ;
277: ViewChart (hWnd) ;
278: PrepareMenu (GetMenu (hWnd)) ;
279: break ;
280:
281: case WM_DESTROY:
282: WinHelp (hWndMain, pszHelpFile, HELP_QUIT, 0) ;
283: PostQuitMessage (0);
284: break ;
285:
286: case WM_QUERYENDSESSION:
287: // please shut it down
288: return (1) ;
289: break ;
290:
291: case WM_ENDSESSION:
292: if (wParam == TRUE)
293: {
294: // close any log file before closing down
295: PerfmonClose (hWnd) ;
296: return (1) ;
297: }
298: else
299: bCallDefWinProc = TRUE ;
300: break ;
301:
302: case WM_CLOSE:
303: PerfmonClose (hWnd) ;
304: break ;
305:
306: case WM_ACTIVATE:
307: bPerfmonIconic = (BOOL) HIWORD (wParam) ;
308: break ;
309:
310: case WM_SYSCOLORCHANGE:
311: DeletePerfmonSystemObjects () ;
312: CreatePerfmonSystemObjects () ;
313: WindowInvalidate (PerfmonViewWindow()) ;
314: break ;
315:
316: case WM_WININICHANGE:
317: if (!lParam || strsamei((LPTSTR)lParam, szInternational))
318: {
319: GetDateTimeFormats () ;
320: }
321: break ;
322:
323: case WM_DROPFILES:
324: OnDropFile (wParam) ;
325: return (0) ;
326: break ;
327:
328: default:
329: bCallDefWinProc = TRUE ;
330: break;
331:
332: } // switch
333:
334: if (bCallDefWinProc)
335: {
336: lRetCode = DefWindowProc (hWnd, message, wParam, lParam) ;
337: }
338: return (lRetCode);
339: } // MainWndProc
340:
341:
342: int PASCAL WinMain (HINSTANCE hCurrentInstance,
343: HINSTANCE hPrevInstance,
344: LPSTR lpszCmdLine,
345: int nCmdShow)
346: { // WinMain
347: MSG msg;
348:
349: if (!PerfmonInitialize (hCurrentInstance, hPrevInstance,
350: lpszCmdLine, nCmdShow))
351: return (FALSE) ;
352:
353: DragAcceptFiles (hWndMain, TRUE) ;
354:
355: while (GetMessage (&msg, NULL, 0, 0))
356: {
357: if (!TranslateAccelerator(hWndMain, hAccelerators, &msg))
358: {
359: TranslateMessage (&msg) ;
360: DispatchMessage (&msg) ;
361: }
362: } // while
363:
364: return(msg.wParam);
365: }
366:
367: DWORD FAR PASCAL MessageFilterProc (int nCode,
368: WPARAM wParam,
369: LPARAM lParam)
370: {
371: LPMSG lpMsg = (LPMSG)lParam ;
372: extern HHOOK lpMsgFilterProc ;
373:
374: if (nCode < 0)
375: {
376: return FALSE ;
377: }
378:
379: if (nCode == MSGF_DIALOGBOX || nCode == MSGF_MENU)
380: {
381: if (lpMsg->message == WM_KEYDOWN && lpMsg->wParam == VK_F1)
382: {
383: PostMessage (hWndMain, WM_F1DOWN, nCode, 0L) ;
384: return TRUE ;
385: }
386: }
387:
388: return (DefHookProc (nCode, wParam,
389: (DWORD)lpMsg,
390: &lpMsgFilterProc)) ;
391: }
392:
393:
394: #if 0
395: /***************************************/
396: VOID ErrorExit(LPTSTR pszError,HWND hwnd)
397: /***************************************/
398: {
399: // NOTE: make sure all lgraph calls set StopQuerying.
400:
401: if (hwnd)
402: {
403: MessageBox(NULL, pszError, nm_buf, MB_ICONHAND | MB_OK | MB_SYSTEMMODAL);
404: DestroyWindow(hwnd);
405: }
406: return;
407: }
408: #endif
409:
410:
411:
412: void SizePerfmonComponents (void)
413: {
414: RECT rectClient ;
415: int xWidth, yHeight ;
416: int yToolbarHeight ;
417: int yStatusHeight ;
418: int yViewHeight ;
419:
420: GetClientRect (hWndMain, &rectClient) ;
421: xWidth = rectClient.right - rectClient.left ;
422: yHeight = rectClient.bottom - rectClient.top ;
423:
424: if (Options.bToolbar)
425: {
426: SendMessage (hWndToolbar, WM_SIZE, 0, 0L) ;
427: }
428:
429: yToolbarHeight = Options.bToolbar ? (WindowHeight (hWndToolbar) - 1) : 0 ;
430: yStatusHeight = Options.bStatusbar ? StatusHeight (hWndStatus) : 0 ;
431:
432: if (Options.bStatusbar)
433: {
434: if (yToolbarHeight + yStatusHeight > yHeight)
435: {
436: // too small to display both toolbar and status bar
437: // just display part of the status bar
438: yStatusHeight = yHeight - yToolbarHeight ;
439: }
440:
441: MoveWindow (hWndStatus,
442: 0, yHeight - yStatusHeight, xWidth, yStatusHeight, TRUE) ;
443: //WindowInvalidate (hWndStatus) ;
444: }
445: //WindowInvalidate (hWndMain) ;
446: WindowShow (hWndStatus, Options.bStatusbar) ;
447: WindowShow (hWndToolbar, Options.bToolbar) ;
448:
449: yViewHeight = yHeight - yStatusHeight - yToolbarHeight ;
450:
451: MoveWindow (hWndGraph,
452: 0, yToolbarHeight,
453: xWidth, yViewHeight,
454: TRUE) ;
455: MoveWindow (hWndAlert,
456: 0, yToolbarHeight,
457: xWidth, yViewHeight,
458: TRUE) ;
459: MoveWindow (hWndLog,
460: 0, yToolbarHeight,
461: xWidth, yViewHeight,
462: TRUE) ;
463: MoveWindow (hWndReport,
464: 0, yToolbarHeight,
465: xWidth, yViewHeight,
466: TRUE) ;
467:
468:
469: } // SizePerfmonComponents
470:
471:
472:
473:
474:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.