/***************************************************************************** * * SetEdit.c - This is the WinMain module. It creates the main window and * the threads, and contains the main MainWndProc. * * Microsoft Confidential * Copyright (c) 1992-1993 Microsoft Corporation * * Authors - * * Russ Blake * Hon-Wah Chan * ****************************************************************************/ //==========================================================================// // Includes // //==========================================================================// #undef NOSYSCOMMANDS // DEFINE_GLOBALS will define all the globals listed in globals.h #define DEFINE_GLOBALS #include "setedit.h" #include "command.h" #include "graph.h" #include "grafdata.h" // for QuerySaveChart #include "legend.h" #include "init.h" #include "perfmops.h" #include "toolbar.h" // for CreateToolbar #include "status.h" // for CreatePMStatusWindow #include "utils.h" #include "fileopen.h" // for FileOpen #ifdef DEBUGDUMP #include "debug.h" #endif #define dwToolbarStyle (WS_CHILD | WS_VISIBLE | TBS_NOCAPTION) extern TCHAR szInternational[] ; //==========================================================================// // Message Handlers // //==========================================================================// void static OnSize (HWND hWnd, WORD xWidth, WORD yHeight) /* Effect: Perform any actions needed when the main window is resized. In particular, size the four data windows, only one of which is visible right now. */ { // OnSize SizePerfmonComponents () ; } void static OnCreate (HWND hWnd) /* Effect: Perform all actions needed when the main window is created. In particular, create the three data windows, and show one of them. To Do: Check for proper creation. If not possible, we will need to abort creation of the program. Called By: MainWndProc only, in response to a WM_CREATE message. */ { // OnCreate hWndGraph = CreateGraphWindow (hWnd) ; hWndStatus = CreatePMStatusWindow (hWnd) ; CreateToolbarWnd (hWnd) ; MinimumSize += WindowHeight (hWndToolbar) ; Options.bMenubar = TRUE ; Options.bToolbar = TRUE ; Options.bStatusbar = TRUE; Options.bAlwaysOnTop = FALSE ; // initialize to chart view - HWC iPerfmonView = IDM_VIEWCHART; ShowWindow (PerfmonViewWindow (), SW_SHOWNORMAL) ; } // OnCreate //==========================================================================// // Exported Functions // //==========================================================================// void MenuBarHit (WPARAM wParam) { if (wParam == MENUCLOSING) { StatusLineReady (hWndStatus) ; dwCurrentMenuID = 0 ; } else if (HIWORD(wParam) & MF_SYSMENU) { WORD SystemMenuItem = 0 ; switch (LOWORD (wParam)) { case SC_RESTORE: SystemMenuItem = IDM_SYSTEMRESTORE ; break ; case SC_SIZE: SystemMenuItem = IDM_SYSTEMSIZE ; break ; case SC_MOVE: SystemMenuItem = IDM_SYSTEMMOVE ; break ; case SC_MINIMIZE: SystemMenuItem = IDM_SYSTEMMINIMIZE ; break ; case SC_MAXIMIZE: SystemMenuItem = IDM_SYSTEMMAXIMIZE ; break ; case SC_CLOSE: SystemMenuItem = IDM_SYSTEMCLOSE ; break ; case SC_TASKLIST: SystemMenuItem = IDM_SYSTEMSWITCHTO ; break ; } if (SystemMenuItem) { StatusLine (hWndStatus, SystemMenuItem) ; dwCurrentMenuID = MenuIDToHelpID (SystemMenuItem) ; } } else { StatusLine (hWndStatus, LOWORD (wParam)) ; } } void OnDropFile (WPARAM wParam) { TCHAR FileName [FilePathLen + 1] ; LPTSTR pFileNameStart ; HANDLE hFindFile ; WIN32_FIND_DATA FindFileInfo ; int NameOffset ; int NumOfFiles = 0 ; NumOfFiles = DragQueryFile ((HDROP) wParam, 0xffffffff, NULL, 0) ; if (NumOfFiles > 0) { // we only open the first file for now DragQueryFile((HDROP) wParam, 0, FileName, FilePathLen) ; pFileNameStart = ExtractFileName (FileName) ; NameOffset = (int)(pFileNameStart - FileName) ; // convert short filename to long NTFS filename if necessary hFindFile = FindFirstFile (FileName, &FindFileInfo) ; if (hFindFile && hFindFile != INVALID_HANDLE_VALUE) { // append the file name back to the path name lstrcpy (&FileName[NameOffset], FindFileInfo.cFileName) ; FindClose (hFindFile) ; } FileOpen (hWndMain, (int)0, (LPTSTR)FileName) ; PrepareMenu (GetMenu (hWndMain)); } DragFinish ((HDROP) wParam) ; } LRESULT APIENTRY MainWndProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { LRESULT lRetCode = 0L ; BOOL bCallDefWinProc = FALSE ; switch (LOWORD (message)) { // switch case WM_COMMAND: if (PerfmonCommand (hWnd,wParam,lParam)) return(0); else bCallDefWinProc = TRUE ; break; case WM_MENUSELECT: MenuBarHit (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_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: if (QuerySaveChart (hWnd, pGraphs)) { 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 SetFocus (hWndGraphLegend) ; } } break ; case WM_SYSCOLORCHANGE: DeletePerfmonSystemObjects () ; CreatePerfmonSystemObjects () ; WindowInvalidate (PerfmonViewWindow()) ; 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 int PASCAL WinMain ( HINSTANCE hCurrentInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ) { // WinMain MSG msg; if (!PerfmonInitialize (hCurrentInstance, hPrevInstance, lpszCmdLine, nCmdShow)) return (FALSE) ; DragAcceptFiles (hWndMain, TRUE) ; while (GetMessage (&msg, NULL, 0, 0)) { if (//FIXFIX !ModelessDispatch (hWndLog, &msg) && // doesnt work !TranslateAccelerator(hWndMain, hAccelerators, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } } // while return((int)msg.wParam); } void SizePerfmonComponents (void) { RECT rectClient ; int xWidth, yHeight ; int yToolbarHeight ; int yStatusHeight ; int yViewHeight ; GetClientRect (hWndMain, &rectClient) ; xWidth = rectClient.right - rectClient.left ; yHeight = rectClient.bottom - rectClient.top ; if (Options.bToolbar) { SendMessage (hWndToolbar, WM_SIZE, 0, 0L) ; } yToolbarHeight = Options.bToolbar ? (WindowHeight (hWndToolbar) - 1) : 0 ; yStatusHeight = Options.bStatusbar ? StatusHeight (hWndStatus) : 0 ; if (Options.bStatusbar) { if (yToolbarHeight + yStatusHeight > yHeight) { // too small to display both toolbar and status bar // just display part of the status bar yStatusHeight = yHeight - yToolbarHeight ; } MoveWindow (hWndStatus, 0, yHeight - yStatusHeight, xWidth, yStatusHeight, TRUE) ; //WindowInvalidate (hWndStatus) ; } //WindowInvalidate (hWndMain) ; WindowShow (hWndStatus, Options.bStatusbar) ; WindowShow (hWndToolbar, Options.bToolbar) ; yViewHeight = yHeight - yStatusHeight - yToolbarHeight ; MoveWindow (hWndGraph, 0, yToolbarHeight, xWidth, yViewHeight, TRUE) ; } // SizePerfmonComponents