|
|
1.1 ! root 1: //==========================================================================// ! 2: // Includes // ! 3: //==========================================================================// ! 4: ! 5: ! 6: ! 7: #include <stdio.h> ! 8: #include <math.h> ! 9: ! 10: #include "perfmon.h" ! 11: #include "addline.h" ! 12: ! 13: #include "alert.h" // for AlertInsertLine, AlertDeleteLine ! 14: #include "grafdata.h" // for ChartInsertLine, ChartDeleteLine ! 15: #include "graph.h" // for SizeGraphComponents ! 16: #include "legend.h" // for LegendAddItem ! 17: #include "line.h" // for LineAllocate, LineFree. ! 18: #include "pmemory.h" // for MemoryXXX (mallloc-type) routines ! 19: #include "perfdata.h" // for QueryPerformanceData ! 20: #include "perfmops.h" // for dlg_error_box ! 21: #include "playback.h" // for PlaybackLines ! 22: #include "report.h" // for ReportInsertLine, ReportDeleteLine ! 23: #include "system.h" // for SystemGet ! 24: #include "utils.h" ! 25: #include "playback.h" // for PlayingBackLog ! 26: #include "counters.h" ! 27: #include "pmhelpid.h" // Help IDs ! 28: ! 29: //==========================================================================// ! 30: // Constants // ! 31: //==========================================================================// ! 32: ! 33: ! 34: #ifdef ADVANCED_PERFMON ! 35: #define ADDLINEDETAILLEVEL PERF_DETAIL_WIZARD ! 36: #else ! 37: #define ADDLINEDETAILLEVEL PERF_DETAIL_NOVICE ! 38: #endif ! 39: ! 40: #define iInitialExplainLen 256 ! 41: ! 42: // defines used in owner-drawn items ! 43: #define OWNER_DRAWN_ITEM 2 ! 44: #define OWNER_DRAW_FOCUS 1 ! 45: ! 46: //==========================================================================// ! 47: // Local Data // ! 48: //==========================================================================// ! 49: ! 50: // defined in PerfData.c ! 51: extern WCHAR NULL_NAME[] ; ! 52: ! 53: ! 54: COLORREF argbColors[] = ! 55: { ! 56: RGB (0xff, 0x00, 0x00), ! 57: RGB (0x00, 0x80, 0x00), ! 58: RGB (0x00, 0x00, 0xff), ! 59: RGB (0xff, 0xff, 0x00), ! 60: RGB (0xff, 0x00, 0xff), ! 61: RGB (0x00, 0xff, 0xff), ! 62: RGB (0x80, 0x00, 0x00), ! 63: RGB (0x40, 0x40, 0x40), ! 64: RGB (0x00, 0x00, 0x80), ! 65: RGB (0x80, 0x80, 0x00), ! 66: RGB (0x80, 0x00, 0x80), ! 67: RGB (0x00, 0x80, 0x80), ! 68: RGB (0x40, 0x00, 0x00), ! 69: RGB (0x00, 0x40, 0x00), ! 70: RGB (0x00, 0x00, 0x40), ! 71: RGB (0x00, 0x00, 0x00) ! 72: } ; ! 73: ! 74: ! 75: TCHAR *apszScaleFmt[] = ! 76: { ! 77: TEXT("%6.6f"), ! 78: TEXT("%5.5f"), ! 79: TEXT("%4.4f"), ! 80: TEXT("%3.3f"), ! 81: TEXT("%2.2f"), ! 82: TEXT("%1.1f"), ! 83: TEXT("%2.1f"), ! 84: TEXT("%3.1f"), ! 85: TEXT("%4.1f"), ! 86: TEXT("%5.1f"), ! 87: TEXT("%6.1f"), ! 88: TEXT("%7.1f") ! 89: } ; ! 90: #define DEFAULT_SCALE 0 ! 91: #define NUMBER_OF_SCALE sizeof(apszScaleFmt)/sizeof(apszScaleFmt[0]) ! 92: ! 93: int iLineType ; ! 94: static PPERFDATA pPerfData ; ! 95: PPERFSYSTEM pSystem ; ! 96: PLINESTRUCT pLineEdit ; ! 97: PPERFSYSTEM *ppSystemFirst ; ! 98: PLINEVISUAL pVisual ; ! 99: ! 100: #define bEditLine (pLineEdit != NULL) ! 101: ! 102: ! 103: BOOL ComputerChange ; ! 104: ! 105: //=============================// ! 106: // Alert-related locals // ! 107: //=============================// ! 108: ! 109: ! 110: BOOL bAlertOver ; // over or under? ! 111: FLOAT eAlertValue ; // value to compare ! 112: BOOL bEveryTime ; // run every time or once? ! 113: ! 114: // program to run; ! 115: LPTSTR pszAlertProgram ; ! 116: ! 117: ! 118: //==========================================================================// ! 119: // Macros // ! 120: //==========================================================================// ! 121: ! 122: ! 123: #define InChartAdd() \ ! 124: (iLineType == LineTypeChart) ! 125: ! 126: ! 127: #define InAlertAdd() \ ! 128: (iLineType == LineTypeAlert) ! 129: ! 130: #define InReportAdd() \ ! 131: (iLineType == LineTypeReport) ! 132: ! 133: ! 134: ! 135: ! 136: #define NumColorIndexes() \ ! 137: (sizeof (argbColors) / sizeof (argbColors[0])) ! 138: ! 139: #define NumWidthIndexes() 5 ! 140: ! 141: #define NumStyleIndexes() 4 ! 142: ! 143: ! 144: //==========================================================================// ! 145: // Forward Declarations // ! 146: //==========================================================================// ! 147: ! 148: BOOL /*static*/ OnObjectChanged (HDLG hDlg) ; ! 149: ! 150: ! 151: //==========================================================================// ! 152: // Local Functions // ! 153: //==========================================================================// ! 154: ! 155: ! 156: PPERFINSTANCEDEF ParentInstance (PPERFINSTANCEDEF pInstance) ! 157: { // ParentInstance ! 158: PPERFOBJECT parent_obj ; ! 159: PPERFINSTANCEDEF parent_instance ; ! 160: PERF_COUNTER_BLOCK *counter_blk; ! 161: LONG i ; ! 162: ! 163: parent_obj = ! 164: GetObjectDefByTitleIndex (pPerfData, ! 165: pInstance->ParentObjectTitleIndex) ; ! 166: if (!parent_obj) ! 167: return (NULL) ; ! 168: ! 169: ! 170: // Then get the parent instance. ! 171: // NOTE: can use unique ID field to match here instead ! 172: // of name compare. ! 173: for (i = 0, ! 174: parent_instance = (PERF_INSTANCE_DEFINITION *) ( (PBYTE)parent_obj ! 175: + parent_obj->DefinitionLength); ! 176: i < parent_obj->NumInstances; ! 177: i++, parent_instance = (PERF_INSTANCE_DEFINITION *) ( (PBYTE)counter_blk ! 178: + counter_blk->ByteLength)) ! 179: { // for ! 180: counter_blk = (PERF_COUNTER_BLOCK *) ( (PBYTE)parent_instance ! 181: + parent_instance->ByteLength); ! 182: if ((DWORD)i == pInstance->ParentObjectInstance) ! 183: return (parent_instance) ; ! 184: } ! 185: ! 186: return (NULL) ; ! 187: } // ParentInstance ! 188: ! 189: ! 190: PPERFOBJECT SelectedObject (HWND hWndObjects, ! 191: LPTSTR lpszObjectName) ! 192: /* ! 193: Effect: Return the pObject associated with the currently selected ! 194: combo-box item of hWndObjects. Set lpszObjectName to ! 195: the object's name. ! 196: ! 197: If no item is selected in the combobox, return NULL. ! 198: ! 199: Assert: The pObject for each CB item was added when the string ! 200: was added to the CB, by CBLoadObjects. ! 201: ! 202: See Also: LoadObjects. ! 203: */ ! 204: { // SelectedObject ! 205: int iIndex ; ! 206: ! 207: iIndex = CBSelection (hWndObjects) ; ! 208: if (iIndex == CB_ERR) ! 209: return (NULL) ; ! 210: ! 211: if (lpszObjectName) ! 212: CBString (hWndObjects, iIndex, lpszObjectName) ; ! 213: ! 214: return ((PPERFOBJECT) CBData (hWndObjects, iIndex)) ; ! 215: } // SelectedObject ! 216: ! 217: ! 218: ! 219: PPERFCOUNTERDEF SelectedCounter (HWND hWndCounters, ! 220: LPTSTR lpszCounterName) ! 221: /* ! 222: Effect: Return the pCounter associated with the currently selected ! 223: LB item of hWndCounters. Set lpszCounterName to ! 224: the Counter's name. ! 225: ! 226: If no item is selected in the listbox, return NULL. ! 227: ! 228: Assert: The pCounter for each LB item was added when the string ! 229: was added to the LB, by LoadCounters. ! 230: ! 231: See Also: LoadCounters. ! 232: */ ! 233: { // SelectedCounter ! 234: int iIndex ; ! 235: ! 236: iIndex = LBSelection (hWndCounters) ; ! 237: if (iIndex == LB_ERR) ! 238: return (NULL) ; ! 239: ! 240: if (lpszCounterName) ! 241: LBString (hWndCounters, iIndex, lpszCounterName) ; ! 242: return ((PPERFCOUNTERDEF) LBData (hWndCounters, iIndex)) ; ! 243: } // SelectedCounter ! 244: ! 245: ! 246: ! 247: void VisualIncrement (PLINEVISUAL pVisual) ! 248: /* ! 249: Effect: Cycle through the combinations of color, width, and ! 250: style to distinguish between lines. The color attributes ! 251: are like a number: ! 252: <style> <width> <color> ! 253: ! 254: Since color is the LSB, it is always incremented. The ! 255: others are incremented whenever the color rolls over. ! 256: ! 257: If a current index is -1, that means don't increment ! 258: that visual attribute. ! 259: */ ! 260: { // VisualIncrement ! 261: pVisual->iColorIndex = ! 262: (pVisual->iColorIndex + 1) % NumColorIndexes () ; ! 263: ! 264: if (pVisual->iColorIndex) ! 265: return ; ! 266: ! 267: ! 268: if (pVisual->iWidthIndex == -1) ! 269: return ; ! 270: ! 271: ! 272: pVisual->iWidthIndex = ! 273: (pVisual->iWidthIndex + 1) % NumWidthIndexes () ; ! 274: ! 275: if (pVisual->iWidthIndex) ! 276: return ; ! 277: ! 278: ! 279: if (pVisual->iStyleIndex == -1) ! 280: return ; ! 281: ! 282: ! 283: pVisual->iStyleIndex = ! 284: (pVisual->iStyleIndex + 1) % NumStyleIndexes () ; ! 285: } // VisualIncrement ! 286: ! 287: ! 288: COLORREF LineColor (int iColorIndex) ! 289: { ! 290: return (argbColors [iColorIndex]) ; ! 291: } ! 292: ! 293: ! 294: int LineWidth (int iWidthIndex) ! 295: { ! 296: switch (iWidthIndex) ! 297: { // switch ! 298: case 0: ! 299: return (1) ; ! 300: break ; ! 301: ! 302: case 1: ! 303: return (3) ; ! 304: break ; ! 305: ! 306: case 2: ! 307: return (5) ; ! 308: break ; ! 309: ! 310: case 3: ! 311: return (7) ; ! 312: break ; ! 313: ! 314: case 4: ! 315: return (9) ; ! 316: break ; ! 317: } // switch ! 318: } // LineWidth ! 319: ! 320: ! 321: ! 322: int LineStyle (int iStyleIndex) ! 323: { ! 324: return (iStyleIndex) ; ! 325: } ! 326: ! 327: ! 328: BOOL /*static*/ LoadInstances (HDLG hDlg) ! 329: { ! 330: PPERFOBJECT pObject ; ! 331: PPERFINSTANCEDEF pInstance, pInstanceParent ; ! 332: TCHAR szInstance [256], szInstanceParent [256] ; ! 333: TCHAR szCompositeName [256] ; ! 334: TCHAR szInstCompositeName [256] ; ! 335: ! 336: LONG iInstance ; ! 337: UINT iIndex ; ! 338: ! 339: int xTextExtent = 0 ; ! 340: int currentTextExtent ; ! 341: HFONT hFont ; ! 342: HDC hDC = 0 ; ! 343: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 344: HWND hWndInstances = DialogControl (hDlg, IDD_ADDLINEINSTANCE); ! 345: ! 346: // turn off horiz. scrollbar ! 347: LBSetHorzExtent (hWndInstances, 0) ; ! 348: LBReset (hWndInstances) ; ! 349: ! 350: pObject = SelectedObject (hWndObjects, NULL) ; ! 351: if (!pObject) ! 352: return (FALSE) ; ! 353: ! 354: if (pObject->NumInstances <= 0) ! 355: { ! 356: MLBSetSelection (hWndInstances, 0, TRUE) ; ! 357: return (FALSE) ; ! 358: } ! 359: ! 360: // turn off Listbox redraw ! 361: LBSetRedraw (hWndInstances, FALSE) ; ! 362: ! 363: if (bEditLine) ! 364: { ! 365: if (pLineEdit->lnObject.NumInstances > 0) ! 366: { ! 367: if (pLineEdit->lnInstanceDef.ParentObjectTitleIndex) ! 368: { ! 369: // Get the Parent Object Instance Name. ! 370: // and prefix it to the Instance Name, to make ! 371: // the string we want to display. ! 372: TSPRINTF (szInstCompositeName, ! 373: TEXT("%s ==> %s"), ! 374: pLineEdit->lnPINName, ! 375: pLineEdit->lnInstanceName) ; ! 376: } ! 377: else ! 378: { ! 379: lstrcpy (szInstCompositeName, pLineEdit->lnInstanceName) ; ! 380: } ! 381: } ! 382: else ! 383: { ! 384: szInstCompositeName[0] = TEXT('\0'); ! 385: } ! 386: } ! 387: ! 388: if (!bEditLine && (hDC = GetDC (hWndInstances))) ! 389: { ! 390: hFont = (HFONT)SendMessage(hWndInstances, WM_GETFONT, 0, 0L); ! 391: if (hFont) ! 392: SelectObject(hDC, hFont); ! 393: } ! 394: ! 395: ! 396: for (iInstance = 0, pInstance = FirstInstance (pObject) ; ! 397: iInstance < pObject->NumInstances; ! 398: iInstance++, pInstance = NextInstance (pInstance)) ! 399: { // for ! 400: GetInstanceName (pInstance, szInstance) ; ! 401: pInstanceParent = ParentInstance (pInstance) ; ! 402: ! 403: if (pInstanceParent) ! 404: { ! 405: GetInstanceName (pInstanceParent, szInstanceParent) ; ! 406: TSPRINTF (szCompositeName, TEXT("%s ==> %s"), ! 407: szInstanceParent, szInstance) ; ! 408: } ! 409: else ! 410: lstrcpy (szCompositeName, szInstance) ; ! 411: ! 412: iIndex = LBAdd (hWndInstances, szCompositeName) ; ! 413: if (iIndex != LB_ERR) ! 414: { ! 415: LBSetData (hWndInstances, iIndex, (LPARAM) pInstance) ; ! 416: } ! 417: ! 418: // get the biggest text width ! 419: if (hDC) ! 420: { ! 421: currentTextExtent = TextWidth (hDC, szCompositeName) + xScrollWidth / 2 ; ! 422: if (currentTextExtent > xTextExtent) ! 423: { ! 424: xTextExtent = currentTextExtent ; ! 425: } ! 426: } ! 427: } // for ! 428: ! 429: if (hDC) ! 430: { ! 431: // turn on horiz. scrollbar if necessary... ! 432: LBSetHorzExtent (hWndInstances, xTextExtent) ; ! 433: ReleaseDC (hWndInstances, hDC) ; ! 434: } ! 435: ! 436: ! 437: if (!bEditLine || szInstCompositeName[0] == TEXT('\0')) ! 438: { ! 439: MLBSetSelection (hWndInstances, 0, TRUE) ; ! 440: } ! 441: else ! 442: { ! 443: BOOL bSetSelection = TRUE ; ! 444: ! 445: iIndex = LBFind (hWndInstances, szInstCompositeName) ; ! 446: if (iIndex == LB_ERR) ! 447: { ! 448: if (bEditLine) ! 449: { ! 450: bSetSelection = FALSE ; ! 451: } ! 452: iIndex = 0 ; ! 453: } ! 454: ! 455: if (bSetSelection) ! 456: { ! 457: MLBSetSelection (hWndInstances, iIndex, TRUE) ; ! 458: } ! 459: ! 460: LBSetVisible (hWndInstances, iIndex) ; ! 461: } ! 462: ! 463: // turn on Listbox redraw ! 464: LBSetRedraw (hWndInstances, TRUE) ; ! 465: ! 466: } // LoadInstances ! 467: ! 468: ! 469: BOOL OnCounterChanged (HDLG hDlg) ! 470: /* ! 471: Effect: Perform any actions necessary when the counter has changed. ! 472: In particular, display the explanation for the counter ! 473: that has the focus rectangle. ! 474: */ ! 475: { ! 476: LPTSTR lpszText ; ! 477: PPERFCOUNTERDEF pCounter ; ! 478: int iStatus ; ! 479: int iFocusIndex ; ! 480: HWND hWndCounters = DialogControl (hDlg, IDD_ADDLINECOUNTER); ! 481: HWND hWndScales = DialogControl (hDlg, IDD_ADDLINESCALE) ; ! 482: ! 483: iFocusIndex = LBFocus (hWndCounters) ; ! 484: if (iFocusIndex == LB_ERR) ! 485: return (FALSE) ; ! 486: ! 487: if (PlayingBackLog()) ! 488: { ! 489: DialogEnable (hDlg, IDD_ADDLINEEXPANDEXPLAIN, FALSE) ; ! 490: return (TRUE) ; ! 491: } ! 492: ! 493: pCounter = (PPERFCOUNTERDEF) LBData (hWndCounters, iFocusIndex) ; ! 494: if ((!pCounter) || (pCounter == (PPERFCOUNTERDEF)LB_ERR)) ! 495: return (FALSE) ; ! 496: ! 497: // no need to get help text before the button is clicked ! 498: if (!bExplainTextButtonHit) ! 499: return (FALSE) ; ! 500: ! 501: // Create initial string ! 502: lpszText = MemoryAllocate (iInitialExplainLen * sizeof (TCHAR)) ; ! 503: ! 504: while (TRUE) ! 505: { ! 506: lpszText[0] = TEXT('\0') ; ! 507: ! 508: #ifdef UNICODE ! 509: iStatus = QueryPerformanceName (pSystem, ! 510: pCounter->CounterHelpTitleIndex, ! 511: iLanguage, ! 512: MemorySize (lpszText) / sizeof(TCHAR), ! 513: lpszText, ! 514: TRUE) ; ! 515: #else ! 516: iStatus = QueryPerformanceNameW (pSystem, ! 517: pCounter->CounterHelpTitleIndex, ! 518: iLanguage, ! 519: MemorySize (lpszText), ! 520: lpszText, ! 521: TRUE) ; ! 522: #endif ! 523: ! 524: if (iStatus == ERROR_SUCCESS) ! 525: break ; ! 526: ! 527: if (iStatus == ERROR_MORE_DATA) ! 528: lpszText = ! 529: MemoryResize (lpszText, ! 530: MemorySize (lpszText) + iInitialExplainLen) ; ! 531: else ! 532: break ; ! 533: } // while ! 534: ! 535: SetDlgItemText (hDlg, IDD_ADDLINEEXPLAIN, lpszText) ; ! 536: MemoryFree (lpszText) ; ! 537: ! 538: return (TRUE) ; ! 539: } // OnCounterChanged ! 540: ! 541: ! 542: ! 543: BOOL LoadCounters (HDLG hDlg, ! 544: UINT iSelectCounterDefn) ! 545: { // LoadCounters ! 546: PPERFOBJECT pObject ; ! 547: ! 548: TCHAR szCounterName [256] ; ! 549: TCHAR szDefaultCounterName [256] ; ! 550: PPERFCOUNTERDEF pCounter ; ! 551: UINT i ; ! 552: int iIndex ; ! 553: int xTextExtent = 0 ; ! 554: int currentTextExtent ; ! 555: HFONT hFont ; ! 556: HDC hDC = 0 ; ! 557: BOOL bSetSelection = TRUE ; ! 558: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 559: HWND hWndCounters = DialogControl (hDlg, IDD_ADDLINECOUNTER); ! 560: ! 561: ! 562: strclr (szDefaultCounterName) ; ! 563: ! 564: // turn off horiz. scrollbar ! 565: LBSetHorzExtent (hWndCounters, 0) ; ! 566: LBReset (hWndCounters) ; ! 567: ! 568: pObject = SelectedObject (hWndObjects, NULL) ; ! 569: if (!pObject) ! 570: return (FALSE) ; ! 571: ! 572: if (!bEditLine && (hDC = GetDC (hWndCounters))) ! 573: { ! 574: hFont = (HFONT)SendMessage(hWndCounters, WM_GETFONT, 0, 0L); ! 575: if (hFont) ! 576: SelectObject(hDC, hFont); ! 577: } ! 578: ! 579: // turn off Listbox redraw ! 580: LBSetRedraw (hWndCounters, FALSE) ; ! 581: ! 582: for (i = 0, pCounter = FirstCounter (pObject) ; ! 583: i < pObject->NumCounters ; ! 584: i++, pCounter = NextCounter (pCounter)) ! 585: { // for ! 586: if (pCounter->CounterType != PERF_SAMPLE_BASE && ! 587: pCounter->CounterType != PERF_COUNTER_NODATA && ! 588: pCounter->CounterType != PERF_AVERAGE_BASE && ! 589: pCounter->CounterType != PERF_COUNTER_QUEUELEN_TYPE && ! 590: pCounter->CounterType != PERF_COUNTER_MULTI_BASE && ! 591: pCounter->CounterType != PERF_RAW_BASE && ! 592: pCounter->DetailLevel <= ADDLINEDETAILLEVEL) ! 593: { // if ! 594: szCounterName[0] = TEXT('\0') ; ! 595: QueryPerformanceName (pSystem, ! 596: pCounter->CounterNameTitleIndex, ! 597: 0, sizeof (szCounterName) / sizeof(TCHAR), ! 598: szCounterName, ! 599: FALSE) ; ! 600: ! 601: // if szCounterName is not empty, add it to the listbox ! 602: if (!strsame(szCounterName, NULL_NAME)) ! 603: { ! 604: iIndex = LBAdd (hWndCounters, szCounterName) ; ! 605: LBSetData (hWndCounters, iIndex, (DWORD) pCounter) ; ! 606: ! 607: // get the biggest text width ! 608: if (hDC) ! 609: { ! 610: currentTextExtent = TextWidth (hDC, szCounterName) + xScrollWidth / 2 ; ! 611: if (currentTextExtent > xTextExtent) ! 612: { ! 613: xTextExtent = currentTextExtent ; ! 614: } ! 615: } ! 616: ! 617: if (iSelectCounterDefn == i) ! 618: lstrcpy (szDefaultCounterName, szCounterName) ; ! 619: } // if szCounterName is not empty ! 620: } // if ! 621: } // for ! 622: ! 623: if (bEditLine) ! 624: lstrcpy (szDefaultCounterName, pLineEdit->lnCounterName) ; ! 625: ! 626: iIndex = LBFind (hWndCounters, szDefaultCounterName) ; ! 627: if (iIndex == LB_ERR) ! 628: { ! 629: if (bEditLine) ! 630: { ! 631: bSetSelection = FALSE ; ! 632: } ! 633: iIndex = 0 ; ! 634: } ! 635: ! 636: if (bSetSelection) ! 637: { ! 638: MLBSetSelection (hWndCounters, iIndex, TRUE) ; ! 639: } ! 640: LBSetVisible (hWndCounters, iIndex) ; ! 641: ! 642: if (hDC) ! 643: { ! 644: // turn on horiz. scrollbar if necessary... ! 645: LBSetHorzExtent (hWndCounters, xTextExtent) ; ! 646: ReleaseDC (hWndCounters, hDC) ; ! 647: } ! 648: ! 649: // turn on Listbox redraw ! 650: LBSetRedraw (hWndCounters, TRUE) ; ! 651: ! 652: OnCounterChanged (hDlg) ; ! 653: } // LoadCounters ! 654: ! 655: ! 656: ! 657: ! 658: void LoadObjects (HDLG hDlg, ! 659: PPERFDATA pPerfData) ! 660: /* ! 661: Effect: Load into the object CB the objects for the current ! 662: pPerfData. ! 663: */ ! 664: { ! 665: LPTSTR lpszObject ; ! 666: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 667: ! 668: ! 669: lpszObject = bEditLine ? pLineEdit->lnObjectName : NULL ; ! 670: ! 671: CBLoadObjects (hWndObjects, ! 672: pPerfData, ! 673: pSystem, ! 674: ADDLINEDETAILLEVEL, ! 675: lpszObject, ! 676: FALSE) ; ! 677: OnObjectChanged (hDlg) ; ! 678: // UpdateWindow (hDlg) ; ! 679: } // LoadObjects ! 680: ! 681: ! 682: ! 683: void OnComputerChanged (HDLG hDlg) ! 684: { ! 685: ! 686: PPERFSYSTEM pLocalSystem; ! 687: PPERFDATA pLocalPerfData; ! 688: ! 689: pLocalPerfData = pPerfData; ! 690: pLocalSystem = GetComputer (hDlg, ! 691: IDD_ADDLINECOMPUTER, ! 692: TRUE, ! 693: &pLocalPerfData, ! 694: ppSystemFirst) ; ! 695: if (pLocalSystem && pLocalPerfData) ! 696: { ! 697: pSystem = pLocalSystem; ! 698: pPerfData = pLocalPerfData; ! 699: LoadObjects (hDlg, pPerfData) ; ! 700: ComputerChange = FALSE ; ! 701: DialogEnable (hDlg, IDD_ADDLINEADD, TRUE) ; ! 702: } ! 703: ! 704: } // OnComputerChanged ! 705: ! 706: ! 707: ! 708: ! 709: BOOL AddOneChartLine (HWND hDlg, ! 710: PPERFCOUNTERDEF pCounter, ! 711: LPTSTR lpszCounter, ! 712: PPERFINSTANCEDEF pInstance) ! 713: { ! 714: TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH] ; ! 715: ! 716: PPERFOBJECT pObject ; ! 717: TCHAR szObject [PerfObjectLen] ; ! 718: ! 719: TCHAR szInstance [256] ; ! 720: ! 721: PLINE pLine ; ! 722: // int i ; ! 723: int iCounterIndex ; ! 724: int j ; ! 725: ! 726: PPERFINSTANCEDEF pInstanceParent ; ! 727: PERF_COUNTER_BLOCK *pCounterBlock ; ! 728: TCHAR szInstanceParent [256] ; ! 729: TCHAR szObjectParent [PerfObjectLen+1] ; ! 730: HWND hWndColors = DialogControl (hDlg, IDD_ADDLINECOLOR) ; ! 731: HWND hWndWidths = DialogControl (hDlg, IDD_ADDLINEWIDTH) ; ! 732: HWND hWndStyles = DialogControl (hDlg, IDD_ADDLINESTYLE) ; ! 733: HWND hWndScales = DialogControl (hDlg, IDD_ADDLINESCALE) ; ! 734: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 735: ! 736: ! 737: //=============================// ! 738: // Get selected data values // ! 739: //=============================// ! 740: ! 741: ! 742: ! 743: DialogText (hDlg, IDD_ADDLINECOMPUTER, szComputer) ; ! 744: ! 745: pObject = SelectedObject (hWndObjects, szObject) ; ! 746: if (!pObject) ! 747: return (FALSE) ; ! 748: ! 749: if (pInstance) ! 750: GetInstanceName (pInstance, szInstance) ; ! 751: ! 752: //=============================// ! 753: // Allocate the line // ! 754: //=============================// ! 755: ! 756: pLine = LineAllocate () ; ! 757: if (!pLine) ! 758: { ! 759: DlgErrorBox (hDlg, ERR_NO_MEMORY); ! 760: return (FALSE) ; ! 761: } ! 762: ! 763: ! 764: //=============================// ! 765: // Set line's data values // ! 766: //=============================// ! 767: ! 768: pLine->iLineType = iLineType ; ! 769: pLine->lnSystemName = StringAllocate (szComputer) ; ! 770: ! 771: pLine->lnObject = *pObject ; ! 772: pLine->lnObjectName = StringAllocate (szObject) ; ! 773: ! 774: pLine->lnCounterDef = *pCounter ; ! 775: pLine->lnCounterName = StringAllocate (lpszCounter) ; ! 776: ! 777: ! 778: if (pObject->NumInstances > 0 && pInstance) ! 779: { ! 780: pLine->lnInstanceDef = *pInstance ; ! 781: pLine->lnInstanceName = StringAllocate (szInstance) ; ! 782: ! 783: pLine->lnUniqueID = pInstance->UniqueID ; ! 784: ! 785: if (pInstance->ParentObjectTitleIndex) ! 786: { ! 787: szObjectParent[0] = (TCHAR)'\0'; ! 788: QueryPerformanceName (pSystem, ! 789: pInstance->ParentObjectTitleIndex, ! 790: 0, PerfObjectLen, szObjectParent, FALSE) ; ! 791: pLine->lnParentObjName = StringAllocate (szObjectParent) ; ! 792: } ! 793: ! 794: pInstanceParent = ParentInstance (pInstance) ; ! 795: if (pInstanceParent) ! 796: { ! 797: GetInstanceName (pInstanceParent, szInstanceParent) ; ! 798: if (pInstance->ParentObjectTitleIndex) ! 799: { ! 800: pLine->lnPINName = StringAllocate (szInstanceParent) ; ! 801: } ! 802: } ! 803: } // if ! 804: ! 805: pLine->lnCounterType = pCounter->CounterType; ! 806: pLine->lnCounterLength = pCounter->CounterSize; ! 807: ! 808: pLine->lnOldTime = pPerfData->PerfTime ; ! 809: pLine->lnNewTime = pPerfData->PerfTime ; ! 810: ! 811: for (j = 0 ; j < 2 ; j++) ! 812: { ! 813: pLine->lnaCounterValue[j].LowPart = 0 ; ! 814: pLine->lnaCounterValue[j].HighPart = 0 ; ! 815: } ! 816: ! 817: ! 818: //=============================// ! 819: // Chart-related Values // ! 820: //=============================// ! 821: ! 822: pLine->iScaleIndex = CBSelection (hWndScales) ; ! 823: if (pLine->iScaleIndex == 0) ! 824: { ! 825: // use the default scale ! 826: pLine->eScale = (FLOAT) pow ((double)10.0, ! 827: (double)pCounter->DefaultScale) ; ! 828: } ! 829: else ! 830: { ! 831: pLine->eScale = DialogFloat (hDlg, IDD_ADDLINESCALE, NULL) ; ! 832: } ! 833: ! 834: if (pObject->NumInstances > 0 && pInstance) ! 835: { ! 836: pCounterBlock = (PERF_COUNTER_BLOCK *) ( (PBYTE) pInstance + ! 837: pInstance->ByteLength); ! 838: } ! 839: else ! 840: { ! 841: pCounterBlock = (PERF_COUNTER_BLOCK *) ( (PBYTE) pObject + ! 842: pObject->DefinitionLength); ! 843: } ! 844: ! 845: if (pLine->lnCounterLength <= 4) ! 846: pLine->lnaOldCounterValue[0].LowPart = ! 847: * ( (DWORD FAR *) ( (PBYTE)pCounterBlock + ! 848: pCounter[0].CounterOffset)); ! 849: else ! 850: { ! 851: pLine->lnaOldCounterValue[0] = ! 852: * ( (LARGE_INTEGER *) ( (PBYTE)pCounterBlock + ! 853: pCounter[0].CounterOffset)); ! 854: } ! 855: ! 856: // Get second counter, only if we are not at ! 857: // the end of the counters; some computations ! 858: // require a second counter ! 859: ! 860: iCounterIndex = CounterIndex (pCounter, pObject) ; ! 861: if ((UINT) iCounterIndex < pObject->NumCounters - 1 && ! 862: iCounterIndex != -1) ! 863: { ! 864: if (pLine->lnCounterLength <= 4) ! 865: pLine->lnaOldCounterValue[1].LowPart = ! 866: * ( (DWORD FAR *) ( (PBYTE)pCounterBlock + ! 867: pCounter[1].CounterOffset)); ! 868: else ! 869: pLine->lnaOldCounterValue[1] = ! 870: * ( (LARGE_INTEGER *) ( (PBYTE)pCounterBlock + ! 871: pCounter[1].CounterOffset)); ! 872: } ! 873: ! 874: // pLine->valNext = CounterFuncEntry; ! 875: pLine->valNext = CounterEntry; ! 876: ! 877: pLine->lnaOldCounterValue[0] = pLine->lnaCounterValue[0]; ! 878: pLine->lnaOldCounterValue[1] = pLine->lnaCounterValue[1]; ! 879: ! 880: //=============================// ! 881: // Visual Values // ! 882: //=============================// ! 883: ! 884: pLine->Visual.iColorIndex = CBSelection (hWndColors) ; ! 885: pLine->Visual.crColor = LineColor (pLine->Visual.iColorIndex) ; ! 886: ! 887: pLine->Visual.iWidthIndex = CBSelection (hWndWidths) ; ! 888: pLine->Visual.iWidth = LineWidth (pLine->Visual.iWidthIndex) ; ! 889: ! 890: pLine->Visual.iStyleIndex = CBSelection (hWndStyles) ; ! 891: pLine->Visual.iStyle = LineStyle (pLine->Visual.iStyleIndex) ; ! 892: ! 893: *pVisual = pLine->Visual ; ! 894: if (!bEditLine) ! 895: VisualIncrement (pVisual) ; ! 896: ! 897: CBSetSelection (hWndColors, pVisual->iColorIndex) ; ! 898: CBSetSelection (hWndWidths, pVisual->iWidthIndex) ; ! 899: CBSetSelection (hWndStyles, pVisual->iStyleIndex) ; ! 900: ! 901: if (iLineType == LineTypeChart) ! 902: { ! 903: pLine->hPen = LineCreatePen (NULL, &(pLine->Visual), FALSE) ; ! 904: } ! 905: ! 906: //=============================// ! 907: // Alert Related Values // ! 908: //=============================// ! 909: ! 910: if (iLineType == LineTypeAlert) ! 911: { ! 912: pLine->bAlertOver = bAlertOver ; ! 913: pLine->eAlertValue = eAlertValue ; ! 914: pLine->bEveryTime = ! 915: IsDlgButtonChecked (hDlg, IDD_ADDLINEPROGRAMEVERYTIME) ; ! 916: pLine->bAlerted = FALSE ; ! 917: pLine->hBrush = CreateSolidBrush (pLine->Visual.crColor) ; ! 918: if (!PlayingBackLog ()) ! 919: { ! 920: pLine->lpszAlertProgram = StringAllocate (pszAlertProgram) ; ! 921: } ! 922: else ! 923: { ! 924: pLine->lpszAlertProgram = NULL ; ! 925: } ! 926: } ! 927: //=============================// ! 928: // Insert the line! // ! 929: //=============================// ! 930: ! 931: if (InsertLine (pLine) == FALSE) ! 932: { ! 933: // no inert occurred due to either line already existed ! 934: // or error detected. ! 935: LineFree (pLine) ; ! 936: } ! 937: else ! 938: { ! 939: if (pSystem->lpszValue) ! 940: { ! 941: if (strsame(pSystem->lpszValue, TEXT("Global "))) ! 942: { ! 943: // take out the "Global " string ! 944: *(pSystem->lpszValue) = 0 ; ! 945: } ! 946: AppendObjectToValueList ( ! 947: pLine->lnObject.ObjectNameTitleIndex, ! 948: pSystem->lpszValue) ; ! 949: } ! 950: } ! 951: } // AddOneChartLine ! 952: ! 953: ! 954: BOOL AddCounter (HWND hDlg, ! 955: PPERFCOUNTERDEF pCounter, ! 956: LPTSTR lpszCounter) ! 957: { // AddCounter ! 958: int iInstanceIndex ; ! 959: int iInstanceNum ; ! 960: PPERFINSTANCEDEF pInstance ; ! 961: HWND hWndInstances = DialogControl (hDlg, IDD_ADDLINEINSTANCE); ! 962: ! 963: // NOTE: for now, we don't check for duplicate lines ! 964: if (!IsCounterSupported (pCounter->CounterType)) ! 965: { ! 966: DlgErrorBox (hDlg, ERR_COUNTER_NOT_IMP); ! 967: return (FALSE) ; ! 968: } ! 969: ! 970: ! 971: if ((iInstanceNum = LBNumItems (hWndInstances)) && iInstanceNum != LB_ERR) ! 972: { ! 973: ! 974: if (iInstanceNum > 1) ! 975: { ! 976: // delay some of the insert actions for performacne improvement ! 977: bDelayAddAction = TRUE ; ! 978: ! 979: if (InChartAdd()) ! 980: { ! 981: LegendSetRedraw (hWndGraphLegend, FALSE) ; ! 982: } ! 983: else if (InAlertAdd()) ! 984: { ! 985: LegendSetRedraw (hWndAlertLegend, FALSE) ; ! 986: } ! 987: } ! 988: ! 989: for (iInstanceIndex = 0 ; ! 990: iInstanceIndex < iInstanceNum ; ! 991: iInstanceIndex++) ! 992: { // for ! 993: if (LBSelected (hWndInstances, iInstanceIndex)) ! 994: { // if ! 995: pInstance = (PPERFINSTANCEDEF) LBData (hWndInstances, iInstanceIndex) ; ! 996: if (pInstance == (PPERFINSTANCEDEF) LB_ERR) ! 997: { ! 998: pInstance = NULL; ! 999: } ! 1000: AddOneChartLine (hDlg, pCounter, lpszCounter, pInstance) ; ! 1001: } // if ! 1002: } // for ! 1003: ! 1004: if (bDelayAddAction) ! 1005: { ! 1006: // now do the post add-line actions ! 1007: bDelayAddAction = FALSE ; ! 1008: if (InReportAdd()) ! 1009: { ! 1010: PREPORT pReport ; ! 1011: ! 1012: pReport = ReportData (hWndReport) ; ! 1013: ReportAddAction (pReport) ; ! 1014: } ! 1015: else if (InChartAdd()) ! 1016: { ! 1017: GraphAddAction () ; ! 1018: LegendSetRedraw (hWndGraphLegend, TRUE) ; ! 1019: } ! 1020: else if (InAlertAdd()) ! 1021: { ! 1022: AlertAddAction () ; ! 1023: LegendSetRedraw (hWndAlertLegend, TRUE) ; ! 1024: } ! 1025: } ! 1026: } ! 1027: else ! 1028: { ! 1029: pInstance = NULL; ! 1030: AddOneChartLine (hDlg, pCounter, lpszCounter, pInstance) ; ! 1031: } ! 1032: ! 1033: return (TRUE) ; ! 1034: } // AddCounter ! 1035: ! 1036: ! 1037: //==========================================================================// ! 1038: // Message Handlers // ! 1039: //==========================================================================// ! 1040: ! 1041: ! 1042: BOOL /*static*/ OnInitDialog (HWND hDlg) ! 1043: { ! 1044: int i ; ! 1045: FLOAT ScaleFactor ; ! 1046: TCHAR tempBuff[ShortTextLen] ; ! 1047: TCHAR szCaption [WindowCaptionLen] ; ! 1048: TCHAR szRemoteComputerName[MAX_COMPUTERNAME_LENGTH + 3] ; ! 1049: HWND hWndComputer = DialogControl (hDlg, IDD_ADDLINECOMPUTER); ! 1050: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 1051: HWND hWndInstances = DialogControl (hDlg, IDD_ADDLINEINSTANCE); ! 1052: HWND hWndCounters = DialogControl (hDlg, IDD_ADDLINECOUNTER); ! 1053: HWND hWndColors = DialogControl (hDlg, IDD_ADDLINECOLOR) ; ! 1054: HWND hWndWidths = DialogControl (hDlg, IDD_ADDLINEWIDTH) ; ! 1055: HWND hWndStyles = DialogControl (hDlg, IDD_ADDLINESTYLE) ; ! 1056: HWND hWndScales = DialogControl (hDlg, IDD_ADDLINESCALE) ; ! 1057: ! 1058: // this is used to tell UPdateLines not to mark any ! 1059: // system as not used ! 1060: bAddLineInProgress = TRUE ; ! 1061: ! 1062: // turn this off until the Explain text button is clicked ! 1063: bExplainTextButtonHit = FALSE ; ! 1064: ! 1065: if (InAlertAdd()) ! 1066: { ! 1067: pszAlertProgram = (LPTSTR) MemoryAllocate (FilePathLen * sizeof (TCHAR)) ; ! 1068: } ! 1069: ! 1070: if (!PlayingBackLog ()) ! 1071: pPerfData = MemoryAllocate (STARTING_SYSINFO_SIZE) ; ! 1072: ! 1073: pSystem = NULL ; ! 1074: ! 1075: if (!bEditLine && PlayingBackLog()) ! 1076: { ! 1077: pPerfData = DataFromIndexPosition (&(PlaybackLog.StartIndexPos), NULL) ; ! 1078: GetPerfComputerName(pPerfData, szRemoteComputerName); ! 1079: DialogSetString (hDlg, IDD_ADDLINECOMPUTER, szRemoteComputerName); ! 1080: } ! 1081: else ! 1082: { ! 1083: DialogSetString (hDlg, IDD_ADDLINECOMPUTER, ! 1084: bEditLine ? pLineEdit->lnSystemName : LocalComputerName) ; ! 1085: } ! 1086: ! 1087: OnComputerChanged (hDlg) ; ! 1088: ! 1089: //=============================// ! 1090: // Set default line values // ! 1091: //=============================// ! 1092: ! 1093: bAlertOver = bEditLine ? pLineEdit->bAlertOver : TRUE ; ! 1094: bEveryTime = bEditLine ? pLineEdit->bEveryTime : TRUE ; ! 1095: ! 1096: //=============================// ! 1097: // Fill line attribute CBs // ! 1098: //=============================// ! 1099: ! 1100: // Load the colors combobox, select the default color. ! 1101: for (i = 0 ; i < NumColorIndexes () ; i++) ! 1102: CBAdd (hWndColors, i) ; ! 1103: CBSetSelection (hWndColors, pVisual->iColorIndex) ; ! 1104: ! 1105: // Load the widths combobox, select the default width. ! 1106: for (i = 0 ; i < NumWidthIndexes () ; i++) ! 1107: CBAdd (hWndWidths, i) ; ! 1108: CBSetSelection (hWndWidths, pVisual->iWidthIndex) ; ! 1109: ! 1110: // Load the styles combobox, select the default style. ! 1111: for (i = 0 ; i < NumStyleIndexes () ; i++) ! 1112: CBAdd (hWndStyles, i) ; ! 1113: CBSetSelection (hWndStyles, pVisual->iStyleIndex) ; ! 1114: ! 1115: ! 1116: // Init the scale combo box. ! 1117: ! 1118: StringLoad (IDS_DEFAULT, tempBuff) ; ! 1119: CBAdd (hWndScales, tempBuff) ; ! 1120: ! 1121: // we are formatting the scale factors during run-time so ! 1122: // the c-runtime library will pick up the default locale ! 1123: // decimal "charatcer". ! 1124: ScaleFactor = (FLOAT)0.000001 ; ! 1125: for (i = 0 ; i < NUMBER_OF_SCALE ; i++) ! 1126: { ! 1127: TSPRINTF(tempBuff, apszScaleFmt[i], ScaleFactor) ; ! 1128: ScaleFactor *= (FLOAT) 10.0 ; ! 1129: CBAdd (hWndScales, tempBuff) ; ! 1130: } ! 1131: ! 1132: CBSetSelection (hWndScales, bEditLine ? pLineEdit->iScaleIndex : DEFAULT_SCALE) ; ! 1133: ! 1134: ! 1135: CheckRadioButton (hDlg, IDD_ADDLINEIFOVER, IDD_ADDLINEIFUNDER, ! 1136: bAlertOver ? IDD_ADDLINEIFOVER: IDD_ADDLINEIFUNDER) ; ! 1137: CheckRadioButton (hDlg, IDD_ADDLINEPROGRAMFIRSTTIME, IDD_ADDLINEPROGRAMEVERYTIME, ! 1138: bEveryTime ? IDD_ADDLINEPROGRAMEVERYTIME: IDD_ADDLINEPROGRAMFIRSTTIME) ; ! 1139: ! 1140: if (bEditLine) ! 1141: { ! 1142: DialogSetText (hDlg, IDD_ADDLINEADD, IDS_OK) ; ! 1143: DialogSetFloat (hDlg, IDD_ADDLINEIFVALUE, pLineEdit->eAlertValue) ; ! 1144: if (pLineEdit->lpszAlertProgram) ! 1145: DialogSetString (hDlg, IDD_ADDLINEPROGRAM, ! 1146: pLineEdit->lpszAlertProgram) ; ! 1147: ! 1148: DialogEnable (hDlg, IDD_ADDLINECOMPUTERTEXT, FALSE) ; ! 1149: DialogEnable (hDlg, IDD_ADDLINECOMPUTER, FALSE) ; ! 1150: DialogEnable (hDlg, IDD_ADDLINEOBJECTTEXT, FALSE) ; ! 1151: DialogEnable (hDlg, IDD_ADDLINEOBJECT, FALSE) ; ! 1152: DialogEnable (hDlg, IDD_ADDLINECOUNTERTEXT, FALSE) ; ! 1153: DialogEnable (hDlg, IDD_ADDLINECOUNTER, FALSE) ; ! 1154: DialogEnable (hDlg, IDD_ADDLINEINSTANCE, FALSE) ; ! 1155: DialogEnable (hDlg, IDD_ADDLINEINSTANCETEXT, FALSE) ; ! 1156: } ! 1157: else ! 1158: { ! 1159: // set the scroll limit on the edit box ! 1160: EditSetLimit (GetDlgItem(hDlg, IDD_CHOOSECOMPUTERNAME), ! 1161: MAX_SYSTEM_NAME_LENGTH-1) ; ! 1162: ! 1163: } ! 1164: ! 1165: if (PlayingBackLog()) ! 1166: { ! 1167: DialogEnable (hDlg, IDD_ADDLINEEXPANDEXPLAIN, FALSE) ; ! 1168: } ! 1169: ! 1170: //=============================// ! 1171: // LineType specific init // ! 1172: //=============================// ! 1173: ! 1174: switch (iLineType) ! 1175: { ! 1176: case LineTypeChart: ! 1177: dwCurrentDlgID = bEditLine ? ! 1178: HC_PM_idDlgEditChartLine : HC_PM_idDlgEditAddToChart ; ! 1179: ! 1180: StringLoad (bEditLine ? ! 1181: IDS_EDITCHART : IDS_ADDTOCHART, szCaption) ; ! 1182: ! 1183: DialogShow (hDlg, IDD_ADDLINEIFGROUP, FALSE) ; ! 1184: DialogShow (hDlg, IDD_ADDLINEIFVALUE, FALSE) ; ! 1185: DialogShow (hDlg, IDD_ADDLINEIFUNDER, FALSE) ; ! 1186: DialogShow (hDlg, IDD_ADDLINEIFOVER, FALSE) ; ! 1187: ! 1188: DialogShow (hDlg, IDD_ADDLINEPROGRAMGROUP, FALSE) ; ! 1189: DialogShow (hDlg, IDD_ADDLINEPROGRAM, FALSE) ; ! 1190: DialogShow (hDlg, IDD_ADDLINEPROGRAMFIRSTTIME, FALSE) ; ! 1191: DialogShow (hDlg, IDD_ADDLINEPROGRAMEVERYTIME, FALSE) ; ! 1192: break ; ! 1193: ! 1194: case LineTypeAlert: ! 1195: dwCurrentDlgID = bEditLine ? ! 1196: HC_PM_idDlgEditAlertEntry : HC_PM_idDlgEditAddToAlert ; ! 1197: ! 1198: StringLoad (bEditLine ? ! 1199: IDS_EDITALERT : IDS_ADDTOALERT, szCaption) ; ! 1200: ! 1201: DialogShow (hDlg, IDD_ADDLINESCALE, FALSE) ; ! 1202: DialogShow (hDlg, IDD_ADDLINESCALETEXT, FALSE) ; ! 1203: ! 1204: DialogShow (hDlg, IDD_ADDLINEWIDTH, FALSE) ; ! 1205: DialogShow (hDlg, IDD_ADDLINEWIDTHTEXT, FALSE) ; ! 1206: ! 1207: DialogShow (hDlg, IDD_ADDLINESTYLE, FALSE) ; ! 1208: DialogShow (hDlg, IDD_ADDLINESTYLETEXT, FALSE) ; ! 1209: ! 1210: if (PlayingBackLog ()) ! 1211: { ! 1212: DialogEnable (hDlg, IDD_ADDLINEPROGRAM, FALSE) ; ! 1213: DialogEnable (hDlg, IDD_ADDLINEPROGRAMGROUP, FALSE) ; ! 1214: DialogEnable (hDlg, IDD_ADDLINEPROGRAMEVERYTIME, FALSE) ; ! 1215: DialogEnable (hDlg, IDD_ADDLINEPROGRAMFIRSTTIME, FALSE) ; ! 1216: } ! 1217: ! 1218: // set the scroll limit on the edit boxes ! 1219: ! 1220: EditSetLimit (GetDlgItem(hDlg, IDD_ADDLINEIFVALUE), ShortTextLen) ; ! 1221: EditSetLimit (GetDlgItem(hDlg, IDD_ADDLINEPROGRAM), FilePathLen-1) ; ! 1222: ! 1223: break ; ! 1224: ! 1225: case LineTypeReport: ! 1226: ! 1227: dwCurrentDlgID = HC_PM_idDlgEditAddToReport ; ! 1228: ! 1229: StringLoad (bEditLine ? ! 1230: IDS_EDITREPORT : IDS_ADDTOREPORT, szCaption) ; ! 1231: ! 1232: DialogShow (hDlg, IDD_ADDLINEIFGROUP, FALSE) ; ! 1233: DialogShow (hDlg, IDD_ADDLINEIFVALUE, FALSE) ; ! 1234: DialogShow (hDlg, IDD_ADDLINEIFUNDER, FALSE) ; ! 1235: DialogShow (hDlg, IDD_ADDLINEIFOVER, FALSE) ; ! 1236: ! 1237: DialogShow (hDlg, IDD_ADDLINEPROGRAMGROUP, FALSE) ; ! 1238: DialogShow (hDlg, IDD_ADDLINEPROGRAM, FALSE) ; ! 1239: DialogShow (hDlg, IDD_ADDLINEPROGRAMFIRSTTIME, FALSE) ; ! 1240: DialogShow (hDlg, IDD_ADDLINEPROGRAMEVERYTIME, FALSE) ; ! 1241: ! 1242: DialogShow (hDlg, IDD_ADDLINECOLOR, FALSE) ; ! 1243: DialogShow (hDlg, IDD_ADDLINECOLORTEXT, FALSE) ; ! 1244: DialogShow (hDlg, IDD_ADDLINESCALE, FALSE) ; ! 1245: DialogShow (hDlg, IDD_ADDLINESCALETEXT, FALSE) ; ! 1246: DialogShow (hDlg, IDD_ADDLINEWIDTH, FALSE) ; ! 1247: DialogShow (hDlg, IDD_ADDLINEWIDTHTEXT, FALSE) ; ! 1248: DialogShow (hDlg, IDD_ADDLINESTYLE, FALSE) ; ! 1249: DialogShow (hDlg, IDD_ADDLINESTYLETEXT, FALSE) ; ! 1250: break ; ! 1251: } // switch ! 1252: ! 1253: SetWindowText (hDlg, szCaption) ; ! 1254: SendDlgItemMessage (hDlg, ! 1255: IDD_ADDLINEEXPLAIN, WM_SETFONT, ! 1256: (WPARAM) hFontScales, (LPARAM) FALSE) ; ! 1257: WindowCenter (hDlg) ; ! 1258: return (TRUE) ; ! 1259: } // OnInitDialog ! 1260: ! 1261: ! 1262: BOOL /*static*/ OnObjectChanged (HDLG hDlg) ! 1263: /* ! 1264: Effect: Perform any actions necessary when the user has selected ! 1265: a new object category from the object CB, or when a default ! 1266: object is first selected into the dialog. In particular, ! 1267: find and load the counters, instances, etc., for this ! 1268: object. ! 1269: ! 1270: Called by: OnInitDialog, AddLineDlgProc (in response to an ! 1271: IDM_ADDLINEOBJECT notification). ! 1272: */ ! 1273: { // OnObjectChanged ! 1274: PPERFOBJECT pObject ; ! 1275: HWND hWndInstances = DialogControl (hDlg, IDD_ADDLINEINSTANCE); ! 1276: HWND hWndCounters = DialogControl (hDlg, IDD_ADDLINECOUNTER); ! 1277: HWND hWndObjects = DialogControl (hDlg, IDD_ADDLINEOBJECT); ! 1278: ! 1279: LBReset (hWndInstances) ; ! 1280: LBReset (hWndCounters) ; ! 1281: ! 1282: pObject = SelectedObject (hWndObjects, NULL) ; ! 1283: if (!pObject) ! 1284: return (FALSE) ; ! 1285: ! 1286: LoadCounters (hDlg, (UINT)pObject->DefaultCounter) ; ! 1287: LoadInstances (hDlg) ; ! 1288: ! 1289: } // OnObjectChanged ! 1290: ! 1291: ! 1292: ! 1293: BOOL LineModifyAttributes (HWND hDlg, PLINE pLineToModify) ! 1294: { ! 1295: LINEVISUAL LineVisual ; ! 1296: HPEN hLinePen ; ! 1297: int iScaleIndex ; // chart attribute ! 1298: FLOAT eScale ; // chart attribute ! 1299: ! 1300: BOOL bLocalAlertOver ; // alert attribute - over or under? ! 1301: FLOAT eLocalAlertValue ; // alert attribute - value to compare ! 1302: LPTSTR lpLocalszAlertProgram ; // alert attribute - program to run ! 1303: BOOL bLocalEveryTime ; // alert attribute - run every time or once? ! 1304: BOOL bLocalAlerted ; // alert attribute - alert happened on line? ! 1305: ! 1306: HPEN hTempPen ; ! 1307: LPTSTR lpTempAlertProgram ; ! 1308: HWND hWndColors = DialogControl (hDlg, IDD_ADDLINECOLOR) ; ! 1309: HWND hWndWidths = DialogControl (hDlg, IDD_ADDLINEWIDTH) ; ! 1310: HWND hWndStyles = DialogControl (hDlg, IDD_ADDLINESTYLE) ; ! 1311: HWND hWndScales = DialogControl (hDlg, IDD_ADDLINESCALE) ; ! 1312: ! 1313: //=============================// ! 1314: // Visual Values // ! 1315: //=============================// ! 1316: ! 1317: LineVisual.iColorIndex = CBSelection (hWndColors) ; ! 1318: LineVisual.crColor = LineColor (LineVisual.iColorIndex) ; ! 1319: ! 1320: LineVisual.iWidthIndex = CBSelection (hWndWidths) ; ! 1321: LineVisual.iWidth = LineWidth (LineVisual.iWidthIndex) ; ! 1322: ! 1323: LineVisual.iStyleIndex = CBSelection (hWndStyles) ; ! 1324: LineVisual.iStyle = LineStyle (LineVisual.iStyleIndex) ; ! 1325: ! 1326: hLinePen = LineCreatePen (NULL, &(LineVisual), FALSE) ; ! 1327: ! 1328: //=============================// ! 1329: // Chart-related Values // ! 1330: //=============================// ! 1331: ! 1332: if (InChartAdd()) ! 1333: { ! 1334: iScaleIndex = CBSelection (hWndScales) ; ! 1335: if (iScaleIndex == 0) ! 1336: { ! 1337: // use the default scale ! 1338: eScale = (FLOAT) pow ((double)10.0, ! 1339: (double)pLineToModify->lnCounterDef.DefaultScale) ; ! 1340: } ! 1341: else ! 1342: { ! 1343: eScale = DialogFloat (hDlg, IDD_ADDLINESCALE, NULL) ; ! 1344: } ! 1345: } ! 1346: ! 1347: //=============================// ! 1348: // Alert Related Values // ! 1349: //=============================// ! 1350: ! 1351: if (InAlertAdd()) ! 1352: { ! 1353: bLocalAlertOver = bAlertOver ; ! 1354: eLocalAlertValue = eAlertValue ; ! 1355: bLocalEveryTime = ! 1356: IsDlgButtonChecked (hDlg, IDD_ADDLINEPROGRAMEVERYTIME) ; ! 1357: bLocalAlerted = FALSE ; ! 1358: lpLocalszAlertProgram = StringAllocate (pszAlertProgram) ; ! 1359: } ! 1360: ! 1361: // Just do it.. ! 1362: pLineToModify->Visual = LineVisual ; ! 1363: if (pLineToModify->hPen) ! 1364: { ! 1365: hTempPen = pLineToModify->hPen ; ! 1366: pLineToModify->hPen = hLinePen ; ! 1367: DeleteObject (hTempPen) ; ! 1368: } ! 1369: ! 1370: if (InChartAdd()) ! 1371: { ! 1372: pLineToModify->iScaleIndex = iScaleIndex ; ! 1373: pLineToModify->eScale = eScale ; ! 1374: ! 1375: } ! 1376: ! 1377: if (InAlertAdd()) ! 1378: { ! 1379: pLineToModify->bAlertOver = bLocalAlertOver ; ! 1380: pLineToModify->eAlertValue = eLocalAlertValue ; ! 1381: pLineToModify->bEveryTime = bLocalEveryTime ; ! 1382: pLineToModify->bAlerted = FALSE ; ! 1383: ! 1384: lpTempAlertProgram = pLineToModify->lpszAlertProgram ; ! 1385: pLineToModify->lpszAlertProgram = lpLocalszAlertProgram ; ! 1386: ! 1387: if (lpTempAlertProgram) ! 1388: { ! 1389: MemoryFree (lpTempAlertProgram) ; ! 1390: } ! 1391: } ! 1392: ! 1393: return (TRUE) ; ! 1394: ! 1395: } // LineModifyAttributes ! 1396: ! 1397: BOOL OnAddLines (HWND hDlg) ! 1398: { ! 1399: PPERFCOUNTERDEF pCounter ; ! 1400: TCHAR szCounter [256] ; ! 1401: BOOL bOK ; ! 1402: int iCounter ; ! 1403: int iCounterNum ; ! 1404: HWND hWndCounters = DialogControl (hDlg, IDD_ADDLINECOUNTER); ! 1405: ! 1406: if (ComputerChange) ! 1407: { ! 1408: // if computer has changed, don't want to continue ! 1409: // because the perfdata may have changed ! 1410: OnComputerChanged (hDlg) ; ! 1411: return (TRUE) ; ! 1412: } ! 1413: ! 1414: //=============================// ! 1415: // Dialog Values Acceptable? // ! 1416: //=============================// ! 1417: ! 1418: if (InAlertAdd ()) ! 1419: { ! 1420: eAlertValue = DialogFloat (hDlg, IDD_ADDLINEIFVALUE, &bOK) ; ! 1421: if (!bOK) ! 1422: { ! 1423: DlgErrorBox (hDlg, ERR_NEEDALERTVALUE); ! 1424: SetFocus (DialogControl (hDlg, IDD_ADDLINEIFVALUE)) ; ! 1425: return (FALSE) ; ! 1426: } // if ! 1427: } // if ! 1428: ! 1429: if (bEditLine) ! 1430: { ! 1431: LineModifyAttributes (hDlg, pLineEdit) ; ! 1432: EndDialog (hDlg, TRUE) ; ! 1433: } ! 1434: ! 1435: // If the user changed the textbox for computer name and pressed enter, ! 1436: // the OnAddLines function would be called without a check of the ! 1437: // computer name. This solves that problem. ! 1438: else ! 1439: { ! 1440: ! 1441: iCounterNum = LBNumItems (hWndCounters) ; ! 1442: for (iCounter = 0 ; ! 1443: iCounter < iCounterNum ; ! 1444: iCounter++) ! 1445: { // for ! 1446: // NOTE: for now, we don't check for duplicate lines ! 1447: if (LBSelected (hWndCounters, iCounter)) ! 1448: { // if ! 1449: pCounter = (PPERFCOUNTERDEF) LBData (hWndCounters, iCounter) ; ! 1450: LBString (hWndCounters, iCounter, szCounter) ; ! 1451: ! 1452: if (!IsCounterSupported (pCounter->CounterType)) ! 1453: { ! 1454: DlgErrorBox (hDlg, ERR_COUNTER_NOT_IMP); ! 1455: } ! 1456: else ! 1457: { ! 1458: AddCounter (hDlg, pCounter, szCounter) ; ! 1459: } ! 1460: } // if ! 1461: } // for ! 1462: DialogSetText (hDlg, IDCANCEL, IDS_DONE) ; ! 1463: } // else (not bEditLine) ! 1464: ! 1465: if (InChartAdd ()) ! 1466: SizeGraphComponents (hWndGraph) ; ! 1467: if (InAlertAdd ()) ! 1468: SizeAlertComponents (hWndAlert) ; ! 1469: ! 1470: WindowInvalidate (PerfmonViewWindow ()) ; ! 1471: ! 1472: } // OnAddLines ! 1473: ! 1474: ! 1475: void OnExpandExplain (HWND hDlg) ! 1476: /* ! 1477: Effect: Perform actions needed when user clicks on the Explain... ! 1478: button. In particular, expand the dialog size to ! 1479: uncover the explain edit box, and gray out the button. ! 1480: */ ! 1481: { // OnExpandExplain ! 1482: RECT rectWindow ; ! 1483: ! 1484: // Disable button first ! 1485: DialogEnable (hDlg, IDD_ADDLINEEXPANDEXPLAIN, FALSE) ; ! 1486: ! 1487: // go get the help text ! 1488: bExplainTextButtonHit = TRUE ; ! 1489: OnCounterChanged (hDlg) ; ! 1490: ! 1491: GetWindowRect (hDlg, &rectWindow) ; ! 1492: MoveWindow (hDlg, ! 1493: rectWindow.left, ! 1494: rectWindow.top, ! 1495: rectWindow.right - rectWindow.left, ! 1496: rectWindow.bottom - rectWindow.top + ! 1497: DialogHeight (hDlg, IDD_ADDLINEEXPLAINGROUP) + ! 1498: yScrollHeight, ! 1499: TRUE) ; ! 1500: } // OnExpandExplain ! 1501: ! 1502: ! 1503: ! 1504: BOOL /*static*/ OnCommand (HWND hDlg, ! 1505: WPARAM wParam, ! 1506: LPARAM lParam) ! 1507: { ! 1508: int iWidthIndex ; ! 1509: int iStyleIndex ; ! 1510: HWND hWndWidths = DialogControl (hDlg, IDD_ADDLINEWIDTH) ; ! 1511: HWND hWndStyles = DialogControl (hDlg, IDD_ADDLINESTYLE) ; ! 1512: ! 1513: switch (LOWORD (wParam)) ! 1514: { ! 1515: case IDD_ADDLINEIFVALUE: ! 1516: // We don't get the value when the user types it. We get it when ! 1517: // the user attempts to add the line. ! 1518: break ; ! 1519: ! 1520: case IDD_ADDLINEPROGRAM: ! 1521: GetDlgItemText (hDlg, ! 1522: IDD_ADDLINEPROGRAM, ! 1523: pszAlertProgram, ! 1524: FilePathLen - 1) ; ! 1525: break ; ! 1526: ! 1527: case IDD_ADDLINEIFOVER: ! 1528: case IDD_ADDLINEIFUNDER: ! 1529: bAlertOver = !bAlertOver ; ! 1530: CheckRadioButton (hDlg, IDD_ADDLINEIFOVER, IDD_ADDLINEIFUNDER, ! 1531: bAlertOver ? IDD_ADDLINEIFOVER: IDD_ADDLINEIFUNDER) ; ! 1532: break ; ! 1533: ! 1534: case IDD_ADDLINEPROGRAMFIRSTTIME: ! 1535: case IDD_ADDLINEPROGRAMEVERYTIME: ! 1536: bEveryTime = !bEveryTime ; ! 1537: CheckRadioButton (hDlg, IDD_ADDLINEPROGRAMFIRSTTIME, IDD_ADDLINEPROGRAMEVERYTIME, ! 1538: bEveryTime ? IDD_ADDLINEPROGRAMEVERYTIME: IDD_ADDLINEPROGRAMFIRSTTIME) ; ! 1539: break ; ! 1540: ! 1541: case IDD_ADDLINEWIDTH: ! 1542: iWidthIndex = CBSelection (hWndWidths) ; ! 1543: #if (!WIDESTYLES) ! 1544: DialogEnable (hDlg, IDD_ADDLINESTYLETEXT, ! 1545: iWidthIndex == 0 || iWidthIndex == CB_ERR) ; ! 1546: DialogEnable (hDlg, IDD_ADDLINESTYLE, ! 1547: iWidthIndex == 0 || iWidthIndex == CB_ERR) ; ! 1548: #endif ! 1549: break ; ! 1550: ! 1551: case IDD_ADDLINESTYLE: ! 1552: iStyleIndex = CBSelection (hWndStyles) ; ! 1553: #if (!WIDESTYLES) ! 1554: DialogEnable (hDlg, IDD_ADDLINEWIDTHTEXT, ! 1555: iStyleIndex == 0 || iStyleIndex == CB_ERR) ; ! 1556: DialogEnable (hDlg, IDD_ADDLINEWIDTH, ! 1557: iStyleIndex == 0 || iStyleIndex == CB_ERR) ; ! 1558: #endif ! 1559: break ; ! 1560: ! 1561: case IDCANCEL: ! 1562: EndDialog (hDlg, 0); ! 1563: return (TRUE); ! 1564: break ; ! 1565: ! 1566: case IDD_ADDLINEADD : ! 1567: SetHourglassCursor() ; ! 1568: OnAddLines (hDlg) ; ! 1569: SetArrowCursor() ; ! 1570: break; ! 1571: ! 1572: case IDD_ADDLINEEXPANDEXPLAIN : ! 1573: OnExpandExplain (hDlg) ; ! 1574: break; ! 1575: ! 1576: case IDD_ADDLINECOUNTER: ! 1577: if (HIWORD (wParam) == LBN_SELCHANGE) ! 1578: OnCounterChanged (hDlg) ; ! 1579: break ; ! 1580: ! 1581: ! 1582: case IDD_ADDLINEOBJECT: ! 1583: if (HIWORD (wParam) == CBN_SELCHANGE) ! 1584: OnObjectChanged (hDlg) ; ! 1585: break ; ! 1586: ! 1587: case IDD_ADDLINECOMPUTER: ! 1588: if (HIWORD (wParam) == EN_UPDATE) ! 1589: { ! 1590: ComputerChange = TRUE ; ! 1591: DialogEnable (hDlg, IDD_ADDLINEADD, FALSE) ; ! 1592: } ! 1593: else if (HIWORD (wParam) == EN_KILLFOCUS) ! 1594: { ! 1595: if (ComputerChange) ! 1596: { ! 1597: SetHourglassCursor() ; ! 1598: OnComputerChanged (hDlg) ; ! 1599: } ! 1600: } ! 1601: break ; ! 1602: ! 1603: case IDD_ADDLINEHELP: ! 1604: CallWinHelp (dwCurrentDlgID) ; ! 1605: break ; ! 1606: ! 1607: default: ! 1608: break; ! 1609: } // switch ! 1610: ! 1611: return (FALSE) ; ! 1612: } // OnCommand ! 1613: ! 1614: ! 1615: void /*static*/ OnMeasureItem (HWND hDlg, ! 1616: PMEASUREITEMSTRUCT pMI) ! 1617: { ! 1618: pMI->CtlType = ODT_COMBOBOX ; ! 1619: pMI->CtlID = IDD_ADDLINECOLOR ; ! 1620: pMI->itemData = 0 ; ! 1621: pMI->itemWidth = 0 ; ! 1622: ! 1623: // need 14 in order to draw the thickest line width ! 1624: pMI->itemHeight = 14 ; ! 1625: // pMI->itemHeight = 12 ; ! 1626: } ! 1627: ! 1628: //*************************************************************************** ! 1629: // * ! 1630: // FUNCTION : HandleSelectionState(LPDRAWITEMSTRUCT) * ! 1631: // * ! 1632: // PURPOSE : Handles a change in an item selection state. If an item is * ! 1633: // selected, a black rectangular frame is drawn around that * ! 1634: // item; if an item is de-selected, the frame is removed. * ! 1635: // * ! 1636: // COMMENT : The black selection frame is slightly larger than the gray * ! 1637: // focus frame so they won't paint over each other. * ! 1638: // * ! 1639: //*************************************************************************** ! 1640: void static HandleSelectionState (LPDRAWITEMSTRUCT lpdis) ! 1641: { ! 1642: HBRUSH hbr ; ! 1643: ! 1644: if (lpdis->itemState & ODS_SELECTED) ! 1645: { ! 1646: // selecting item -- paint a black frame ! 1647: hbr = GetStockObject(BLACK_BRUSH) ; ! 1648: } ! 1649: else ! 1650: { ! 1651: // de-selecting item -- remove frame ! 1652: hbr = CreateSolidBrush(GetSysColor(COLOR_WINDOW)) ; ! 1653: } ! 1654: FrameRect(lpdis->hDC, (LPRECT)&lpdis->rcItem, hbr) ; ! 1655: DeleteObject (hbr) ; ! 1656: } // HandleSelectionState ! 1657: ! 1658: //*************************************************************************** ! 1659: // * ! 1660: // FUNCTION : HandleFocusState(LPDRAWITEMSTRUCT) * ! 1661: // * ! 1662: // PURPOSE : Handle a change in item focus state. If an item gains the * ! 1663: // input focus, a gray rectangular frame is drawn around that * ! 1664: // item; if an item loses the input focus, the gray frame is * ! 1665: // removed. * ! 1666: // * ! 1667: // COMMENT : The gray focus frame is slightly smaller than the black * ! 1668: // selection frame so they won't paint over each other. * ! 1669: // * ! 1670: //*************************************************************************** ! 1671: void static HandleFocusState (LPDRAWITEMSTRUCT lpdis) ! 1672: { ! 1673: RECT rc ; ! 1674: HBRUSH hbr ; ! 1675: ! 1676: // Resize rectangle to place focus frame between the selection ! 1677: // frame and the item. ! 1678: CopyRect ((LPRECT)&rc, (LPRECT)&lpdis->rcItem) ; ! 1679: InflateRect ((LPRECT)&rc, -OWNER_DRAW_FOCUS, -OWNER_DRAW_FOCUS) ; ! 1680: ! 1681: if (lpdis->itemState & ODS_FOCUS) ! 1682: { ! 1683: // gaining input focus -- paint a gray frame ! 1684: hbr = GetStockObject(GRAY_BRUSH) ; ! 1685: } ! 1686: else ! 1687: { ! 1688: // losing input focus -- remove (paint over) frame ! 1689: hbr = CreateSolidBrush(GetSysColor(COLOR_WINDOW)) ; ! 1690: } ! 1691: FrameRect(lpdis->hDC, (LPRECT)&rc, hbr) ; ! 1692: DeleteObject (hbr) ; ! 1693: } // HandleFocusState ! 1694: ! 1695: void /*static*/ OnDrawItem (HWND hDlg, PDRAWITEMSTRUCT pDI) ! 1696: { // OnDrawItem ! 1697: HDC hDC ; ! 1698: PRECT prect ; ! 1699: INT itemData, ! 1700: itemID, ! 1701: CtlID, ! 1702: itemAction ; ! 1703: LOGBRUSH logBrush ; ! 1704: HANDLE hBrush, ! 1705: hOldBrush, ! 1706: hPen, ! 1707: hOldPen ; ! 1708: INT x1, y1, x2, y2, cy ; ! 1709: POINT point ; ! 1710: INT iPenWidth ; ! 1711: COLORREF BackgroundColor ; ! 1712: ! 1713: hDC = pDI-> hDC ; ! 1714: CtlID = pDI->CtlID ; ! 1715: prect = &pDI->rcItem ; ! 1716: itemData = pDI->itemData ; ! 1717: itemID = pDI->itemID ; ! 1718: itemAction = pDI->itemAction ; ! 1719: ! 1720: ! 1721: if (itemID == -1) ! 1722: { ! 1723: // invalid ID, can't go on ! 1724: HandleFocusState (pDI) ; ! 1725: } ! 1726: else if (itemAction == ODA_SELECT) ! 1727: { ! 1728: HandleSelectionState(pDI); ! 1729: } ! 1730: else if (itemAction == ODA_FOCUS) ! 1731: { ! 1732: HandleFocusState (pDI) ; ! 1733: } ! 1734: else ! 1735: { ! 1736: ! 1737: // draw the entire item ! 1738: ! 1739: InflateRect (prect, -OWNER_DRAWN_ITEM, -OWNER_DRAWN_ITEM) ; ! 1740: ! 1741: switch (CtlID) ! 1742: { // switch ! 1743: case IDD_ADDLINECOLOR: ! 1744: ! 1745: // Draw a color rectangle into the control area ! 1746: ! 1747: logBrush.lbStyle = BS_SOLID ; ! 1748: logBrush.lbColor = (COLORREF) argbColors[itemID] ; ! 1749: logBrush.lbHatch = 0 ; ! 1750: ! 1751: hBrush = CreateBrushIndirect (&logBrush) ; ! 1752: hOldBrush = SelectObject (hDC, hBrush) ; ! 1753: ! 1754: hPen = GetStockObject (NULL_PEN) ; ! 1755: hOldPen = SelectObject (hDC, hPen) ; ! 1756: ! 1757: x1 = prect->left ; ! 1758: y1 = prect->top ; ! 1759: x2 = prect->right ; ! 1760: y2 = prect->bottom ; ! 1761: ! 1762: Rectangle (hDC, x1, y1, x2, y2) ; ! 1763: ! 1764: SelectObject (hDC, hOldBrush) ; ! 1765: DeleteObject (hBrush) ; ! 1766: ! 1767: InflateRect (prect, OWNER_DRAWN_ITEM, OWNER_DRAWN_ITEM) ; ! 1768: ! 1769: HandleSelectionState (pDI) ; ! 1770: HandleFocusState (pDI) ; ! 1771: ! 1772: break ; ! 1773: ! 1774: case IDD_ADDLINEWIDTH: ! 1775: case IDD_ADDLINESTYLE: ! 1776: ! 1777: // First draw a rectangle, white interior, null border ! 1778: hBrush = GetStockObject (WHITE_BRUSH) ; ! 1779: hOldBrush = SelectObject (hDC, hBrush) ; ! 1780: ! 1781: // we need to set the bk color in order to draw ! 1782: // the dash lines coorectly during focus. Otherwise, ! 1783: // the COLOR_WINDOW background will make all dash lines ! 1784: // look like solid line... ! 1785: BackgroundColor = SetBkColor (hDC, crWhite) ; ! 1786: ! 1787: hPen = GetStockObject (NULL_PEN) ; ! 1788: hOldPen = SelectObject (hDC, hPen) ; ! 1789: ! 1790: x1 = prect->left ; ! 1791: y1 = prect->top ; ! 1792: x2 = prect->right ; ! 1793: y2 = prect->bottom ; ! 1794: ! 1795: Rectangle (hDC, x1, y1, x2, y2) ; ! 1796: ! 1797: SelectObject (hDC, hOldPen) ; ! 1798: ! 1799: // Draw a line of the itemID width in the middle ! 1800: // of the control area. ! 1801: ! 1802: if (CtlID == IDD_ADDLINEWIDTH) ! 1803: { ! 1804: iPenWidth = LineWidth (itemID) ; ! 1805: hPen = CreatePen (PS_SOLID, iPenWidth, RGB (0, 0, 0)) ; ! 1806: } ! 1807: else ! 1808: { ! 1809: hPen = CreatePen (itemID, 1, RGB (0, 0, 0)) ; ! 1810: } ! 1811: ! 1812: hOldPen = SelectObject (hDC, hPen) ; ! 1813: ! 1814: x1 = prect->left + 8 ; ! 1815: cy = prect->bottom - prect->top ; ! 1816: y1 = prect->top + (cy / 2) - 1 ; ! 1817: x2 = prect->right - 8 ; ! 1818: MoveToEx (hDC, x1, y1, &point) ; ! 1819: LineTo (hDC, x2, y1) ; ! 1820: ! 1821: SelectObject (hDC, hOldPen) ; ! 1822: DeleteObject (hPen) ; ! 1823: SelectObject (hDC, hOldBrush) ; ! 1824: BackgroundColor = SetBkColor (hDC, BackgroundColor) ; ! 1825: ! 1826: InflateRect (prect, OWNER_DRAWN_ITEM, OWNER_DRAWN_ITEM) ; ! 1827: ! 1828: HandleSelectionState (pDI) ; ! 1829: HandleFocusState (pDI) ; ! 1830: ! 1831: break ; ! 1832: } // switch ! 1833: } // draw entire item ! 1834: } // OnDrawItem ! 1835: ! 1836: ! 1837: void /*static*/ OnDestroy (HDLG hDlg) ! 1838: { // OnDestroy ! 1839: #if 0 ! 1840: if (!bEditLine) ! 1841: { ! 1842: switch (iLineType) ! 1843: { ! 1844: case LineTypeAlert: ! 1845: BuildNewValueListForAlert (); ! 1846: break; ! 1847: ! 1848: case LineTypeChart: ! 1849: BuildNewValueListForGraph (); ! 1850: break; ! 1851: ! 1852: case LineTypeReport: ! 1853: BuildNewValueListForReport (); ! 1854: break; ! 1855: ! 1856: default: ! 1857: break; ! 1858: } ! 1859: } ! 1860: #endif ! 1861: if (!PlayingBackLog ()) ! 1862: MemoryFree (pPerfData) ; ! 1863: ! 1864: if (pszAlertProgram) ! 1865: { ! 1866: MemoryFree (pszAlertProgram) ; ! 1867: pszAlertProgram = NULL ; ! 1868: } ! 1869: ! 1870: pLineEdit = NULL ; ! 1871: bAddLineInProgress = FALSE ; ! 1872: dwCurrentDlgID = 0 ; ! 1873: bExplainTextButtonHit = FALSE ; ! 1874: } // OnDestroy ! 1875: ! 1876: ! 1877: ! 1878: //==========================================================================// ! 1879: // Exported Functions // ! 1880: //==========================================================================// ! 1881: ! 1882: ! 1883: ! 1884: BOOL FAR PASCAL AddLineDlgProc (HWND hDlg, ! 1885: WORD msg, ! 1886: DWORD wParam, ! 1887: LONG lParam) ! 1888: { // AddLineDlgProc ! 1889: ! 1890: BOOL Status; ! 1891: ! 1892: switch (msg) ! 1893: { // switch ! 1894: case WM_COMMAND: ! 1895: OnCommand (hDlg, wParam, lParam) ; ! 1896: return (FALSE) ; ! 1897: break ; ! 1898: ! 1899: #if 0 ! 1900: case WM_DLGKILLFOCUS: ! 1901: case WM_KILLFOCUS: ! 1902: if (EditModified (hWndComputer)) ! 1903: { ! 1904: SetHourglassCursor() ; ! 1905: OnComputerChanged (hDlg) ; ! 1906: SetArrowCursor() ; ! 1907: } ! 1908: EditSetModified (hWndComputer, FALSE) ; ! 1909: break ; ! 1910: #endif ! 1911: ! 1912: case WM_INITDIALOG: ! 1913: SetHourglassCursor() ; ! 1914: Status = OnInitDialog (hDlg) ; ! 1915: SetArrowCursor() ; ! 1916: ! 1917: // set focus on the "Add" button instead of the "Computer" ! 1918: SetFocus (DialogControl (hDlg, IDD_ADDLINEADD)) ; ! 1919: return FALSE ; ! 1920: break ; ! 1921: ! 1922: case WM_MEASUREITEM: ! 1923: OnMeasureItem (hDlg, (PMEASUREITEMSTRUCT) lParam) ; ! 1924: return (TRUE) ; ! 1925: break ; ! 1926: ! 1927: case WM_DRAWITEM: ! 1928: OnDrawItem (hDlg, (PDRAWITEMSTRUCT) lParam) ; ! 1929: return (TRUE) ; ! 1930: break ; ! 1931: ! 1932: case WM_DESTROY: ! 1933: OnDestroy (hDlg) ; ! 1934: break ; ! 1935: ! 1936: default: ! 1937: break; ! 1938: } // switch ! 1939: ! 1940: return (FALSE) ; ! 1941: } // AddLineDlgProc ! 1942: ! 1943: ! 1944: ! 1945: ! 1946: BOOL AddLine (HWND hWndParent, ! 1947: PPERFSYSTEM *ppSystemFirstView, ! 1948: PLINEVISUAL pLineVisual, ! 1949: int iLineTypeToAdd) ! 1950: /* ! 1951: Effect: Display the add line dialog box, allowing the user ! 1952: to specify the computer, object, counter, instance, ! 1953: and scale for a line. The user can also select the ! 1954: visual aspects of color, width and line style. ! 1955: ! 1956: */ ! 1957: { // AddLine ! 1958: pLineEdit = NULL ; ! 1959: ! 1960: ppSystemFirst = ppSystemFirstView ; ! 1961: iLineType = iLineTypeToAdd ; ! 1962: pVisual = pLineVisual ; ! 1963: ! 1964: ! 1965: return (DialogBox (hInstance, idDlgAddLine, ! 1966: hWndParent, (DLGPROC) AddLineDlgProc)) ; ! 1967: } // AddLine ! 1968: ! 1969: ! 1970: ! 1971: BOOL EditLine (HWND hWndParent, ! 1972: PPERFSYSTEM *ppSystemFirstView, ! 1973: PLINE pLineToEdit, ! 1974: int iLineTypeToEdit) ! 1975: { // EditLine ! 1976: if (!pLineToEdit) ! 1977: { ! 1978: MessageBeep (0) ; ! 1979: return (FALSE) ; ! 1980: } ! 1981: ! 1982: pLineEdit = pLineToEdit ; ! 1983: ! 1984: ppSystemFirst = ppSystemFirstView ; ! 1985: iLineType = iLineTypeToEdit ; ! 1986: pVisual = &(pLineToEdit->Visual) ; ! 1987: ! 1988: return (DialogBox (hInstance, idDlgAddLine, ! 1989: hWndParent, (DLGPROC) AddLineDlgProc)) ; ! 1990: } // EditLine ! 1991:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.