/* --------------------------------------------------------------------- * TerminalVScrollHook * Terminal scroll bar mouse hook * --------------------------------------------------------------------- */ static void TerminalVScrollHook(void* w, int sbcode, int pos) { CUIWINDOW* win = (CUIWINDOW*) w; CUIRECT rc; int sbpos, range; CUI_USE_ARG(pos); WindowGetClientRect(win, &rc); sbpos = WindowGetVScrollPos(win); range = WindowGetVScrollRange(win); switch(sbcode) { case SB_LINEUP: if (sbpos > 0) { WindowSetVScrollPos(win, sbpos - 1); WindowInvalidate(win); } break; case SB_LINEDOWN: if (sbpos < range) { WindowSetVScrollPos(win, sbpos + 1); WindowInvalidate(win); } break; case SB_PAGEUP: if (sbpos > 0) { sbpos -= (rc.H - 1); sbpos = (sbpos < 0) ? 0 : sbpos; WindowSetVScrollPos(win, sbpos); WindowInvalidate(win); } break; case SB_PAGEDOWN: if (sbpos < range) { sbpos += (rc.H - 1); sbpos = (sbpos > range) ? range : sbpos; WindowSetVScrollPos(win, sbpos); WindowInvalidate(win); } break; case SB_THUMBTRACK: WindowInvalidate(win); break; } }
/* --------------------------------------------------------------------- * CbDropdownUpdate * Update listbox view * --------------------------------------------------------------------- */ static void CbDropdownUpdate(CUIWINDOW* win) { if (win->IsCreated) { WindowInvalidate(win); } }
/* --------------------------------------------------------------------- * ComboboxUpdate * Update combo view * --------------------------------------------------------------------- */ static void ComboboxUpdate(CUIWINDOW* win) { if (win->IsCreated) { WindowInvalidate(win); } }
void static OnPaint (HWND hWnd) { // OnPaint PLEGEND pLegend ; HDC hDC ; PAINTSTRUCT ps ; hDC = BeginPaint (hWnd, &ps) ; if (IsLegendLabelVisible ()) { pLegend = LegendData (hWnd) ; DrawLegendLabel (pLegend, hDC, hWnd) ; } if (LBNumItems (pLegend->hWndItems) == 0) { WindowInvalidate(pLegend->hWndItems) ; } EndPaint (hWnd, &ps) ; } // OnPaint
void static OnSelectionChanged (HWND hWnd) { // OnSelectionChanged PLEGEND pLegend ; PGRAPHSTRUCT pGraph ; int iIndex ; pLegend = LegendData (hWnd) ; // set the new selected line iIndex = LBSelection (pLegend->hWndItems) ; if (iIndex == LB_ERR) return ; LegendSetCurrentLine (pLegend, iIndex) ; if (pLegend->iLineType == LineTypeChart) { pGraph = GraphData (hWndGraph) ; if (!PlayingBackLog()) { // update the min, max, & avg of the current line UpdateValueBarData (pGraph) ; } // update the valuebar display StatusTimer (hWndGraphStatus, TRUE) ; // change the Current highlighted line if necessary if (pGraph && pGraph->HighLightOnOff) { WindowInvalidate (hWndGraphDisplay) ; } } } // OnSelectionChanged
/* --------------------------------------------------------------------- * TerminalKeyHook * Handle EVENT_KEY events * --------------------------------------------------------------------- */ static int TerminalKeyHook(void* w, int key) { CUIWINDOW* win = (CUIWINDOW*) w; TERMINALDATA* data = (TERMINALDATA*) win->InstData; CUIRECT rc; int yrange; int yscroll; if (!data) return FALSE; WindowGetClientRect(win, &rc); yscroll = WindowGetVScrollPos(win); yrange = WindowGetVScrollRange(win); if (win->IsEnabled) { /* if the key is processed by the custom callback hook, we are over and done with it, else processing continues */ if (data->PreKeyHook) { if (data->PreKeyHook(data->PreKeyTarget, win, key)) { return TRUE; } } switch(key) { case KEY_DOWN: if (yscroll < yrange) { WindowSetVScrollPos(win, yscroll + 1); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; case KEY_UP: if (yscroll > 0) { WindowSetVScrollPos(win, yscroll - 1); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; case KEY_NPAGE: if (yscroll < yrange) { yscroll += (rc.H - 1); if (yscroll > yrange) { yscroll = yrange; } WindowSetVScrollPos(win, yscroll); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; case KEY_PPAGE: if (yscroll > 0) { yscroll -= (rc.H - 1); if (yscroll < 0) { yscroll = 0; } WindowSetVScrollPos(win, yscroll); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; case KEY_HOME: if (yscroll > 0) { WindowSetVScrollPos(win, 0); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; case KEY_END: if (yscroll < yrange) { WindowSetVScrollPos(win, yrange); WindowInvalidate(win); TerminalCursorOnOff(win); } return TRUE; default: if (data->CoProc) { if ((key >= KEY_SPACE) && (key <= 255)) { wchar_t c = (wchar_t) key; TerminalCoWrite(data->CoProc, &c, 1); return TRUE; } else if (key == KEY_RETURN) { TerminalCoWrite(data->CoProc, _T("\n"), 1); return TRUE; } } if (data->PostKeyHook) { if (data->PostKeyHook(data->PostKeyTarget, win, key)) { return TRUE; } } } } return FALSE; }
LRESULT APIENTRY MainWndProc (HWND hWnd, UINT message, DWORD wParam, LONG lParam) { LONG lRetCode = 0L ; BOOL bCallDefWinProc = FALSE ; switch (LOWORD (message)) { // switch case WM_LBUTTONDBLCLK: ShowPerfmonMenu (!Options.bMenubar) ; if (Options.bMenubar) { PrepareMenu (GetMenu (hWnd)) ; } break ; case WM_COMMAND: if (PerfmonCommand (hWnd,wParam,lParam)) return(0); else bCallDefWinProc = TRUE ; break; case WM_MENUSELECT: MenuBarHit (wParam) ; break ; case WM_NCHITTEST: /* if we have no title/menu bar, clicking and dragging the client * area moves the window. To do this, return HTCAPTION. * Note dragging not allowed if window maximized, or if caption * bar is present. */ wParam = DefWindowProc(hWnd, message, wParam, lParam); if (!Options.bMenubar && (wParam == HTCLIENT) && !IsZoomed (hWndMain)) return HTCAPTION ; else return wParam ; break ; case WM_SHOWWINDOW: PrepareMenu (GetMenu (hWnd)) ; break ; case WM_SIZE: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ; break ; case WM_GETMINMAXINFO: { MINMAXINFO *pMinMax ; pMinMax = (MINMAXINFO *) lParam ; pMinMax->ptMinTrackSize.x = MinimumSize ; pMinMax->ptMinTrackSize.y = MinimumSize ; } break ; case WM_NOTIFY: { LPTOOLTIPTEXT lpTTT = (LPTOOLTIPTEXT)lParam; if (lpTTT->hdr.code == TTN_NEEDTEXT) { LoadString (hInstance, lpTTT->hdr.idFrom, lpTTT->szText, sizeof(lpTTT->szText)/sizeof(TCHAR)); return TRUE; } else { bCallDefWinProc = FALSE ; break; } } case WM_F1DOWN: if (dwCurrentDlgID) { CallWinHelp (dwCurrentDlgID) ; } else if (dwCurrentMenuID) { CallWinHelp (dwCurrentMenuID) ; dwCurrentMenuID = 0 ; } break ; case WM_CREATE: OnCreate (hWnd) ; ViewChart (hWnd) ; PrepareMenu (GetMenu (hWnd)) ; break ; case WM_DESTROY: WinHelp (hWndMain, pszHelpFile, HELP_QUIT, 0) ; PostQuitMessage (0); break ; case WM_QUERYENDSESSION: // please shut it down return (1) ; break ; case WM_ENDSESSION: if (wParam == TRUE) { // close any log file before closing down PerfmonClose (hWnd) ; return (1) ; } else bCallDefWinProc = TRUE ; break ; case WM_CLOSE: PerfmonClose (hWnd) ; break ; case WM_ACTIVATE: { int fActivate = LOWORD (wParam) ; bPerfmonIconic = (BOOL) HIWORD (wParam) ; if (bPerfmonIconic == 0 && fActivate != WA_INACTIVE) { // set focus on the Legend window if (iPerfmonView == IDM_VIEWCHART) { SetFocus (hWndGraphLegend) ; } else if (iPerfmonView == IDM_VIEWALERT) { SetFocus (hWndAlertLegend) ; } else if (iPerfmonView == IDM_VIEWLOG) { SetFocus (hWndLogEntries) ; } else if (iPerfmonView == IDM_VIEWREPORT) { SetFocus (hWndReport) ; } } } break ; case WM_SYSCOLORCHANGE: DeletePerfmonSystemObjects () ; CreatePerfmonSystemObjects () ; WindowInvalidate (PerfmonViewWindow()) ; break ; case WM_WININICHANGE: if (!lParam || strsamei((LPTSTR)lParam, szInternational)) { GetDateTimeFormats () ; } break ; case WM_DROPFILES: OnDropFile (wParam) ; return (0) ; break ; default: bCallDefWinProc = TRUE ; break; } // switch if (bCallDefWinProc) { lRetCode = DefWindowProc (hWnd, message, wParam, lParam) ; } return (lRetCode); } // MainWndProc