|
|
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.