Annotation of mstools/samples/deb/debmain.c, revision 1.1.1.1

1.1       root        1: // ************************************************************************
                      2: // MODULE    : DEBMain.c
                      3: // PURPOSE   : A Win32 Application demonstrating the Debug APIs
                      4: // FUNCTIONS :
                      5: //   WinMain()                - application entry point
                      6: //   MainWndProc()            - processes messages
                      7: //   ProcessCommandsWndProc() - processes WM_COMMAND messages
                      8: //   PreferencesDlgProc()     - processes messages for "Preferences" dialog box
                      9: //   AttachDlgProc()          - processes messages for "Attach" dialog box
                     10: //   AboutDlgProc()           - processes messages for "About" dialog box
                     11: //   NewListBoxWndProc()      - subclass procedure to prevent listbox moving
                     12: // COMMENTS  :
                     13: // ************************************************************************
                     14: #include <Windows.H>           // required for all Windows applications
                     15: #include <StdIO.H>             // sprintf()
                     16: #include <String.H>            // lstrcat()
                     17: #include <Memory.H>            // memcmp()
                     18: 
                     19: #include "LinkList.H"          // double linked list package (OBJ)
                     20: #include "ToolBar.H"           // various ToolBar controls (DLL)
                     21: #include "DEBDebug.H"          // debugging support functions
                     22: #include "DEBMisc.H"           // misc support functions
                     23: #include "DEBMain.H"           // specific to this module
                     24: 
                     25: // ***********
                     26: // global data
                     27: // ***********
                     28: HWND      hWndMain;            // main window handle
                     29: HWND      hWndDebugList;       // debug event listbox handle
                     30: HWND      hWndTextButtonBar;   // windows handle to the text toolbar
                     31: HINSTANCE hInstance;           // instance handle of this EXE
                     32: LIST      ProcessList;         // linked list of debugee process information
                     33: INT       ActiveProcesses = 0; // count of active debugee processes
                     34: TCHAR     szAppTitle[32];      // name of the application
                     35: HANDLE    hProcess;            // handle to current running debugee process
                     36: LONG      MaxStrLen = 0;       // maximum string length in Debug Event listbox
                     37: 
                     38: //-- debugee specific data
                     39: PROCESS_INFORMATION pi;        // process information
                     40: STARTUPINFO         si;        // debugee startup information
                     41: 
                     42: //-- private profile settings
                     43: int      xPos;                 // application window's horizontal position
                     44: int      yPos;                 // application window's vertical position
                     45: int      nWidth;               // application window's width
                     46: int      nHeight;              // application window's height
                     47: BOOL     fMaximized;           // flag: maximized state?
                     48: BOOL     fToolBar;             // flag: display the ToolBar?
                     49: BOOL     fSaveOnExit;          // flag: save settings upon exit?
                     50: BOOL     fSavedDirectory;      // flag: use saved directory for opening files?
                     51: BOOL     fClearOnNew;          // flag: clears the event listbox on a new debugee
                     52: BOOL     fVerbose;             // flag: verbose event listings
                     53: BOOL     fShowSymbols;         // flag: show symbols (limited)
                     54: BOOL     fSavePreferences;     // flag: save the preferences settings
                     55: HFONT    hFont;                // current handle to the Debug Event listbox font
                     56: LOGFONT  LogFont;              // current logical font
                     57: COLORREF rgbColor;             // current listbox text foreground color
                     58: COLORREF rgbBkColor;           // current listbox text foreground color
                     59: LONG     DebugMode;            // debug mode flag CreateProcess
                     60: LONG     DebugeePriority;      // debugee priority CreateProcess
                     61: 
                     62: // *************
                     63: // internal data
                     64: // *************
                     65: #define TOP_BORDER      4
                     66: #define BOTTOM_BORDER   4
                     67: #define SIDE_BORDER     4
                     68: #define MIN_HEIGHT    128
                     69: 
                     70: WNDPROC OldListBoxWndProc;     // original listbox procedure
                     71: TCHAR   szShortAppTitle[16];   // short name of the application
                     72: BOOL    fHelpUsed = FALSE;     // boolean denoting online help invoked
                     73: SIZE    ClientSize;            // client windows size
                     74: SIZE    DebugListBoxSize;      // debug event listbox size
                     75: int     TextButtonBarHeight;   // text button bar height
                     76: int     xPosOld;               // application window's old horizontal position
                     77: int     yPosOld;               // application window's old vertical position
                     78: 
                     79: //-- location of various files
                     80: TCHAR   szPath[MAX_PATH];         // path where the running application resides
                     81: TCHAR   szExePathName[MAX_PATH];  // full pathname of the application
                     82: TCHAR   szHelpPathName[MAX_PATH]; // full pathname of the application's help file
                     83: TCHAR   szIniPathName[MAX_PATH];  // full pathname of the application's ini file
                     84: 
                     85: 
                     86: // ************************************************************************
                     87: // FUNCTION : WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
                     88: // PURPOSE  : initialize the window, process the message dispatch loop
                     89: // COMMENTS :
                     90: // ************************************************************************
                     91: int PASCAL
                     92: WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
                     93: {
                     94:   MSG       msg;
                     95:   WNDCLASS  wndclass;
                     96: 
                     97:   LPCTSTR lpszMenuName    = (LPCTSTR) "DebugMenu";
                     98:   LPCTSTR lpszClassName   = (LPCTSTR) "DebugClass";
                     99:   LPCTSTR lpszIconName    = (LPCTSTR) "DebugIcon";
                    100:   LPCTSTR lpszAccelName   = (LPCTSTR) "DebugAccel";
                    101:   LPCTSTR lpszIniFileExt  = (LPCTSTR) "INI";
                    102:   LPCTSTR lpszHelpFileExt = (LPCTSTR) "HLP";
                    103: 
                    104:   HANDLE hAccel;                // handle to the accelerator table
                    105: 
                    106:   UNREFERENCED_PARAMETER( lpCmdLine );  // avoid warnings
                    107:   UNREFERENCED_PARAMETER( hPrevInst );
                    108: 
                    109:   hInstance = hInst;
                    110: 
                    111:   //-- register the debug event window class
                    112:   wndclass.style         = (UINT) NULL;
                    113:   wndclass.lpfnWndProc   = (WNDPROC) MainWndProc;
                    114:   wndclass.cbClsExtra    = (int) NULL;
                    115:   wndclass.cbWndExtra    = (int) NULL;
                    116:   wndclass.hInstance     = hInstance;
                    117:   wndclass.hIcon         = LoadIcon( hInstance, lpszIconName );
                    118:   wndclass.hCursor       = LoadCursor( hInstance, (LPTSTR) IDC_ARROW );
                    119:   wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE+1);
                    120:   wndclass.lpszMenuName  = lpszMenuName;
                    121:   wndclass.lpszClassName = lpszClassName;
                    122: 
                    123:   if( !RegisterClass(&wndclass) )
                    124:     return( FALSE );
                    125: 
                    126:   //-- Load resource strings
                    127:   LoadString( hInstance, IDS_APPTITLE, szAppTitle, sizeof(szAppTitle) );
                    128:   LoadString( hInstance, IDS_SHORT_APPTITLE, szShortAppTitle,
                    129:     sizeof(szShortAppTitle) );
                    130: 
                    131:   //-- get application pathname and store the ini and help file pathname
                    132:   //   (which is located in the same directory as the application)
                    133:   GetModuleFileName( (HANDLE) NULL, szExePathName, sizeof(szExePathName)/sizeof(TCHAR) );
                    134:   GetPathFromFullPathName( szExePathName, szPath, sizeof(szPath) );
                    135:   wsprintf( szIniPathName,  (LPCSTR) "%s\\%s.%s", szPath, szShortAppTitle, lpszIniFileExt  );
                    136:   wsprintf( szHelpPathName, (LPCSTR) "%s\\%s.%s", szPath, szShortAppTitle, lpszHelpFileExt );
                    137: 
                    138:   //-- retrieve stored default location from private profile data
                    139:   GetPrivateProfileSettings( szAppTitle, szIniPathName );
                    140: 
                    141:   //-- Create a main window for this application instance
                    142:   hWndMain = CreateWindow(
                    143:                lpszClassName,         // See RegisterClass() call
                    144:                szAppTitle,            // Text for window title bar
                    145:                WS_OVERLAPPEDWINDOW,   // Window style
                    146:                xPos,                  // horizontal position
                    147:                yPos,                  // vertical position
                    148:                nWidth,                // width
                    149:                nHeight,               // height
                    150:                NULL,                  // Overlapped windows have no parent
                    151:                NULL,                  // Use the window class menu
                    152:                hInstance,             // This instance owns this window
                    153:                NULL );                // Extra pointer not needed
                    154: 
                    155:   //-- If window could not be created, return "failure"
                    156:   if( !hWndMain )
                    157:     return( FALSE );
                    158: 
                    159:   //-- Load main menu accelerators
                    160:   if( !(hAccel = LoadAccelerators( hInstance, lpszAccelName) ) )
                    161:     return( FALSE );
                    162: 
                    163:   //-- modify the menu to reflect saved settings
                    164:   UpdateMenuSettings();
                    165: 
                    166:   //-- Make the window visible; update its client area; and return "success"
                    167:   ShowWindow( hWndMain, (fMaximized) ? SW_SHOWMAXIMIZED : nCmdShow );
                    168:   UpdateWindow( hWndMain );          // Sends WM_PAINT message
                    169: 
                    170:   //-- initialize the double linked list package that stores the thread handles
                    171:   InitList( &ProcessList, OrderFunc );
                    172: 
                    173:   //-- Acquire and dispatch messages until a WM_QUIT message is received.
                    174:   while( GetMessage( &msg, NULL, 0, 0 ) ) {
                    175:     if( !TranslateAccelerator( hWndMain, hAccel, &msg ) ) {
                    176:       TranslateMessage( &msg );     // Translates virtual key codes
                    177:       DispatchMessage( &msg );      // Dispatches message to window
                    178:     }
                    179:   }
                    180: 
                    181:   return( msg.wParam );           // Returns the value from PostQuitMessage
                    182: }
                    183: 
                    184: 
                    185: // ************************************************************************
                    186: // FUNCTION : MainWndProc( HWND, UINT, WPARAM, LPARAM )
                    187: // PURPOSE  : Processes uMsgs
                    188: // MESSAGES :
                    189: //   WM_COMMAND   - passed to ProcessCommandsWndProc()
                    190: //   WM_DESTROY   - destroy window
                    191: //    ...
                    192: // COMMENTS : !! I will document this better at a later date !!
                    193: // ************************************************************************
                    194: LRESULT CALLBACK
                    195: MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    196: {
                    197:   static HDC hDC;
                    198: 
                    199:   switch( uMsg ) {
                    200: 
                    201:     case WM_COMMAND:
                    202:       return( ProcessCommandsWndProc( hWnd, uMsg, wParam, lParam) );
                    203: 
                    204:     //-- create debug event listbox
                    205:     case UM_CREATE_LISTBOX: {
                    206:       TCHAR  szWindowName[64];
                    207: 
                    208:       LoadString( hInstance, IDS_DEBUG_EVENTS, szWindowName,
                    209:         sizeof(szWindowName) );
                    210: 
                    211:       hWndDebugList = CreateWindow(
                    212:                         (LPCTSTR) "ListBox",
                    213:                         szWindowName,
                    214:                         WS_CHILD            | WS_VISIBLE      |
                    215:                         WS_CAPTION          | WS_VSCROLL      |
                    216:                         WS_HSCROLL          | LBS_NOTIFY      |
                    217:                         LBS_DISABLENOSCROLL | LBS_USETABSTOPS |
                    218:                         LBS_NOINTEGRALHEIGHT,
                    219:                         SIDE_BORDER,
                    220:                         fToolBar ? TextButtonBarHeight + TOP_BORDER : TOP_BORDER,
                    221:                         DebugListBoxSize.cx, DebugListBoxSize.cy,
                    222:                         hWnd, (HMENU) NULL, hInstance, NULL );
                    223: 
                    224:       //-- Subclass the listbox so the user cannot move it
                    225:       OldListBoxWndProc = SubclassWindow( hWndDebugList, (WNDPROC) NewListBoxWndProc );
                    226: 
                    227:       //-- set listbox font & background color
                    228:       hDC = GetDC( hWndDebugList );
                    229:       hFont = CreateFontIndirect( &LogFont );
                    230:       SelectObject( hDC, hFont );
                    231:       SendMessage( hWndDebugList, WM_CTLCOLORLISTBOX, (DWORD) hDC,
                    232:         (LONG) hWndDebugList );
                    233:       SendMessage( hWndDebugList, WM_SETFONT, (DWORD) hFont, TRUE );
                    234:       ReleaseDC( hWndDebugList, hDC );
                    235: 
                    236:       return( NULL );
                    237:     }
                    238: 
                    239:     //-- Create ToolBar & Debug Events listbox
                    240:     case WM_CREATE:
                    241:       hWndTextButtonBar = CreateTextButtonBar( hWnd, &TextButtonBarHeight );
                    242:       if( fToolBar )
                    243:         ShowWindow( hWndTextButtonBar, SW_SHOW );
                    244:       PostMessage( hWnd, UM_CREATE_LISTBOX, 0, 0 );
                    245:       return( NULL );
                    246: 
                    247:     //-- resize the debug event listbox when the window size changes
                    248:     case WM_SIZE:
                    249:       ClientSize.cx = LOWORD( lParam );
                    250:       ClientSize.cy = HIWORD( lParam );
                    251:       DebugListBoxSize.cx = ClientSize.cx - ( 2*SIDE_BORDER );
                    252:       DebugListBoxSize.cy = max( ClientSize.cy, MIN_HEIGHT + TOP_BORDER )
                    253:         - (TOP_BORDER + BOTTOM_BORDER);
                    254: 
                    255:       if( fToolBar )
                    256:         DebugListBoxSize.cy -= TextButtonBarHeight;
                    257: 
                    258:       if( hWndDebugList != NULL)
                    259:         MoveWindow( hWndDebugList,
                    260:           SIDE_BORDER,
                    261:           fToolBar ? TextButtonBarHeight + TOP_BORDER : TOP_BORDER,
                    262:           DebugListBoxSize.cx, DebugListBoxSize.cy, TRUE );
                    263: 
                    264:       if( wParam == SIZEFULLSCREEN ) {
                    265:         fMaximized = 1;
                    266:         xPos = xPosOld;
                    267:         yPos = yPosOld;
                    268:       }
                    269:       else if( wParam == SIZENORMAL ) {
                    270:         RECT rect;
                    271: 
                    272:         fMaximized = 0;
                    273:         GetWindowRect( hWndMain, &rect );
                    274:         nWidth  = (int) (rect.right - rect.left);
                    275:         nHeight = (int) (rect.bottom - rect.top);
                    276:       }
                    277: 
                    278:       return( NULL );
                    279: 
                    280:     case WM_MOVE: {
                    281:       RECT rect;
                    282: 
                    283:       GetWindowRect( hWndMain, &rect );
                    284:       xPosOld = xPos;
                    285:       yPosOld = yPos;
                    286:       xPos    = (int) rect.left;
                    287:       yPos    = (int) rect.top;
                    288:       return( NULL );
                    289:     }
                    290: 
                    291:     case WM_CTLCOLORLISTBOX: {
                    292:       LOGBRUSH LogBrush;
                    293: 
                    294:       LogBrush.lbStyle = BS_SOLID;
                    295:       LogBrush.lbColor = rgbBkColor;
                    296:       LogBrush.lbHatch = NULL;
                    297: 
                    298:       SetTextColor( (HDC) wParam, rgbColor );
                    299:       SetBkColor( (HDC) wParam, rgbBkColor );
                    300: 
                    301:       return( (LPARAM) CreateBrushIndirect( &LogBrush ) );
                    302:     }
                    303: 
                    304:     case WM_CLOSE:
                    305:       if( ActiveProcesses ) {
                    306:         TCHAR  szExitBoxTitle[64];
                    307:         TCHAR  szExitBoxText[256];
                    308: 
                    309:         LoadString( hInstance, IDS_EXIT_BOX_TITLE, szExitBoxTitle,
                    310:           sizeof(szExitBoxTitle) );
                    311:         LoadString( hInstance, IDS_EXIT_BOX_TEXT, szExitBoxText,
                    312:           sizeof(szExitBoxText) );
                    313:         if ( MessageBox( hWnd, szExitBoxText, szExitBoxTitle,
                    314:                MB_YESNO | MB_ICONEXCLAMATION ) == IDNO )
                    315:           return( NULL );
                    316:       }
                    317: 
                    318:       //-- store location information to private profile data
                    319:       WritePrivateProfileSettings( szAppTitle, szIniPathName );
                    320: 
                    321:       DestroyWindow( hWndTextButtonBar );
                    322:       DestroyWindow( hWndDebugList );
                    323:       DestroyWindow( hWndMain );
                    324: 
                    325:       return( NULL );
                    326: 
                    327:     case WM_DESTROY:
                    328:       if( fHelpUsed )
                    329:         WinHelp( hWnd, szHelpPathName, (UINT) HELP_QUIT, (DWORD) NULL );
                    330:       PostQuitMessage( 0 );
                    331:       return( NULL );
                    332: 
                    333:     default:               // Passes it on if unproccessed
                    334:       return( DefWindowProc(hWnd, uMsg, wParam, lParam) );
                    335:   }
                    336: 
                    337:   return( NULL );
                    338: }
                    339: 
                    340: 
                    341: // ************************************************************************
                    342: // FUNCTION : ProcessCommandsWndProc( HWND, UINT, WPARAM, LPARAM )
                    343: // PURPOSE  : Processes WM_COMMAND messages for MainWndProc()
                    344: // MESSAGES :
                    345: //   WM_COMMAND         - application menu
                    346: //     IDM_FILE_EXIT    - exit the application
                    347: //     IDM_FILE_ABOUT   - About Dialog Box
                    348: //    ...
                    349: // COMMENTS : !! I will document this better at a later date !!
                    350: // ************************************************************************
                    351: LRESULT CALLBACK
                    352: ProcessCommandsWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    353: {
                    354:   static LPCTSTR  lpszAboutDlgBox       = (LPCTSTR) "AboutDlgBox";
                    355:   static LPCTSTR  lpszAttachDlgBox      = (LPCTSTR) "AttachDlgBox";
                    356:   static LPCTSTR  lpszPreferencesDlgBox = (LPCTSTR) "PreferencesDlgBox";
                    357: 
                    358:   switch( LOWORD(wParam) ) {
                    359: 
                    360:     case IDM_FILE_OPEN:
                    361:       if( ActiveProcesses ) {
                    362:         MessageBox( hWndMain,
                    363:           (LPTSTR) "This build of DEB is limited to\n"
                    364:           "debugging only one process at a time.",
                    365:           (LPTSTR) "Cannot Open Debugee",
                    366:           MB_OK | MB_ICONEXCLAMATION );
                    367:         return( FALSE );
                    368:       }
                    369:       if( !OpenDebugee( &pi, &si ) ) {
                    370:         // handle cancel condition
                    371:       }
                    372:       else {
                    373:         if( fClearOnNew ) {
                    374:           SendMessage( hWndDebugList, LB_RESETCONTENT, 0, 0 );
                    375:           MaxStrLen = 0;
                    376:         }
                    377:       }
                    378:       return(NULL);
                    379: 
                    380:     case IDM_FILE_ATTACH:
                    381:       if( ActiveProcesses ) {
                    382:         MessageBox( hWndMain,
                    383:           (LPTSTR) "This build of DEB is limited to\n"
                    384:           "debugging only one process at a time.",
                    385:           (LPTSTR) "Cannot Attach to Debugee",
                    386:           MB_OK | MB_ICONEXCLAMATION );
                    387:         return( FALSE );
                    388:       }
                    389:       if( !DialogBox( hInstance, lpszAttachDlgBox, hWnd,
                    390:             (DLGPROC) AttachDlgProc ) ) {
                    391:         // handle cancel condition
                    392:       }
                    393:       else {
                    394:         if( fClearOnNew ) {
                    395:           SendMessage( hWndDebugList, LB_RESETCONTENT, 0, 0 );
                    396:           MaxStrLen = 0;
                    397:         }
                    398:       }
                    399:       return(NULL);
                    400: 
                    401:     case IDM_EDIT_CUT:
                    402:       CopyListBoxToClipboard( hWndDebugList, MaxStrLen );
                    403:       SendMessage( hWnd, WM_COMMAND, IDM_EDIT_DELETE, 0 );
                    404:       return( NULL );
                    405: 
                    406:     case IDM_EDIT_COPY: {
                    407:       CopyListBoxToClipboard( hWndDebugList, MaxStrLen );
                    408:       return( NULL );
                    409:     }
                    410: 
                    411:     case IDM_EDIT_DELETE:
                    412:       SendMessage( hWndDebugList, LB_RESETCONTENT, 0, 0 );
                    413:       MaxStrLen = 0;
                    414:       return( NULL );
                    415: 
                    416:     case IDM_OPTIONS_FONT:
                    417:       if( !ChooseNewFont( hWndDebugList ) ) {
                    418:         // handle cancel condition
                    419:       }
                    420:       return( NULL );
                    421: 
                    422:     case IDM_OPTIONS_COLOR:
                    423:       ChooseNewBkColor( hWndDebugList );
                    424:       return( NULL );
                    425: 
                    426:     case IDM_OPTIONS_PREFERENCES:
                    427:       DialogBox( hInstance, lpszPreferencesDlgBox, hWnd,
                    428:         (DLGPROC) PreferencesDlgProc );
                    429:       return( NULL );
                    430: 
                    431:     case IDM_OPTIONS_TOOLBAR:
                    432:       if( fToolBar ) {
                    433:         fToolBar = 0;
                    434:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_TOOLBAR, MF_UNCHECKED );
                    435:         ShowWindow( hWndTextButtonBar, SW_HIDE );
                    436:         SendWmSizeMessage( hWndMain );
                    437:       }
                    438:       else {
                    439:         fToolBar = 1;
                    440:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_TOOLBAR, MF_CHECKED );
                    441:         ShowWindow( hWndTextButtonBar, SW_SHOW );
                    442:         SendWmSizeMessage( hWndMain );
                    443:       }
                    444:       return( NULL );
                    445: 
                    446:     case IDM_OPTIONS_SAVEDDIR:
                    447:       if( fSavedDirectory ) {
                    448:         fSavedDirectory = 0;
                    449:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_SAVEDDIR,
                    450:           MF_UNCHECKED );
                    451:       }
                    452:       else {
                    453:         fSavedDirectory = 1;
                    454:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_SAVEDDIR,
                    455:           MF_CHECKED );
                    456:       }
                    457:       return( NULL );
                    458: 
                    459:     case IDM_OPTIONS_SAVEONEXIT:
                    460:       if( fSaveOnExit ) {
                    461:         fSaveOnExit = 0;
                    462:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_SAVEONEXIT,
                    463:           MF_UNCHECKED );
                    464:       }
                    465:       else {
                    466:         fSaveOnExit = 1;
                    467:         CheckMenuItem( GetMenu(hWndMain), IDM_OPTIONS_SAVEONEXIT,
                    468:           MF_CHECKED );
                    469:       }
                    470:       return( NULL );
                    471: 
                    472:     case IDM_HELP_CONTENTS:
                    473:       fHelpUsed = TRUE;
                    474:       WinHelp( hWnd, (LPCTSTR) szHelpPathName, HELP_INDEX, (DWORD) NULL );
                    475:       return( NULL );
                    476: 
                    477:     case IDM_HELP_SEARCH:
                    478:       fHelpUsed = TRUE;
                    479:       WinHelp( hWnd, (LPCTSTR) szHelpPathName, HELP_PARTIALKEY, (DWORD) "" );
                    480:       return( NULL );
                    481: 
                    482:     case IDM_HELP_HOWTOUSE:
                    483:       fHelpUsed = TRUE;
                    484:       WinHelp( hWnd, (LPTSTR) NULL, HELP_HELPONHELP, (DWORD) NULL );
                    485:       return( NULL );
                    486: 
                    487:     case IDM_HELP_ABOUT:
                    488:       DialogBox( hInstance, lpszAboutDlgBox, hWnd, (DLGPROC) AboutDlgProc );
                    489:       return( NULL );
                    490: 
                    491:     case IDM_FILE_EXIT:
                    492:       SendMessage( hWndMain, WM_CLOSE, 0, 0 );
                    493:       return( NULL );
                    494: 
                    495:     default:
                    496:         return( DefWindowProc(hWnd, uMsg, wParam, lParam) );
                    497:   }
                    498: 
                    499: }
                    500: 
                    501: 
                    502: // ************************************************************************
                    503: // FUNCTION : PreferencesDlgProc( HWND, UINT, WPARAM, LPARAM )
                    504: // PURPOSE  : Processes message for "Preferences" dialog box
                    505: // MESSAGES :
                    506: //   WM_INITDIALOG - initialize dialog box
                    507: //   WM_COMMAND    - Input received
                    508: // COMMENTS :
                    509: //
                    510: //   Wait for user to click on "Ok" button, then close the dialog box.
                    511: // ************************************************************************
                    512: BOOL CALLBACK
                    513: PreferencesDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    514: {
                    515:   UNREFERENCED_PARAMETER( lParam );
                    516: 
                    517:   switch( uMsg ) {
                    518: 
                    519:     case WM_COMMAND:
                    520:       switch( LOWORD(wParam) ) {
                    521: 
                    522:         case IDOK:
                    523:           if( SendMessage( GetDlgItem( hDlg, IDC_DEBUG_PROCESS), BM_GETCHECK, 0, 0 ) )
                    524:             DebugMode = DEBUG_PROCESS;
                    525:           if( SendMessage( GetDlgItem( hDlg, IDC_DEBUG_ONLY_THIS_PROCESS), BM_GETCHECK, 0, 0 ) )
                    526:             DebugMode = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS;
                    527:           if( SendMessage( GetDlgItem( hDlg, IDC_IDLE_PRIORITY_CLASS), BM_GETCHECK, 0, 0 ) )
                    528:             DebugeePriority = IDLE_PRIORITY_CLASS;
                    529:           if( SendMessage( GetDlgItem( hDlg, IDC_NORMAL_PRIORITY_CLASS), BM_GETCHECK, 0, 0 ) )
                    530:             DebugeePriority = NORMAL_PRIORITY_CLASS;
                    531:           if( SendMessage( GetDlgItem( hDlg, IDC_HIGH_PRIORITY_CLASS), BM_GETCHECK, 0, 0 ) )
                    532:             DebugeePriority = HIGH_PRIORITY_CLASS;
                    533:           fClearOnNew      = (BOOL) SendMessage( GetDlgItem( hDlg, IDC_CLEAR_ON_NEW),
                    534:             BM_GETCHECK, 0 , 0 );
                    535:           fVerbose         = (BOOL) SendMessage( GetDlgItem( hDlg, IDC_VERBOSE),
                    536:             BM_GETCHECK, 0 , 0 );
                    537:           fShowSymbols     = (BOOL) SendMessage( GetDlgItem( hDlg, IDC_SHOW_SYMBOLS),
                    538:             BM_GETCHECK, 0 , 0 );
                    539:           fSavePreferences = (BOOL) SendMessage( GetDlgItem( hDlg, IDC_SAVE_PREFERENCES),
                    540:             BM_GETCHECK, 0 , 0 );
                    541:           EndDialog( hDlg, TRUE );
                    542:           return( TRUE );
                    543: 
                    544:         case IDCANCEL:
                    545:           EndDialog( hDlg, FALSE );
                    546:           return( TRUE );
                    547: 
                    548:         case IDHELP:
                    549:           return( TRUE );
                    550: 
                    551:       }
                    552:       break;
                    553: 
                    554:     case WM_INITDIALOG:
                    555: 
                    556:       switch( DebugMode ) {
                    557: 
                    558:         case DEBUG_PROCESS:
                    559:           SendMessage( GetDlgItem( hDlg, IDC_DEBUG_PROCESS),
                    560:             BM_SETCHECK, 1, 0);
                    561:           break;
                    562: 
                    563:         case ( DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS ):
                    564:           SendMessage( GetDlgItem( hDlg, IDC_DEBUG_ONLY_THIS_PROCESS),
                    565:             BM_SETCHECK, 1, 0);
                    566:           break;
                    567:       }
                    568: 
                    569:       switch( DebugeePriority ) {
                    570: 
                    571:         case IDLE_PRIORITY_CLASS:
                    572:           SendMessage( GetDlgItem( hDlg, IDC_IDLE_PRIORITY_CLASS),
                    573:             BM_SETCHECK, 1, 0);
                    574:           break;
                    575: 
                    576:         case NORMAL_PRIORITY_CLASS:
                    577:           SendMessage( GetDlgItem( hDlg, IDC_NORMAL_PRIORITY_CLASS),
                    578:             BM_SETCHECK, 1, 0);
                    579:           break;
                    580: 
                    581:         case HIGH_PRIORITY_CLASS:
                    582:           SendMessage( GetDlgItem( hDlg, IDC_HIGH_PRIORITY_CLASS),
                    583:             BM_SETCHECK, 1, 0);
                    584:           break;
                    585:       }
                    586: 
                    587:       SendMessage( GetDlgItem( hDlg, IDC_CLEAR_ON_NEW),     BM_SETCHECK,
                    588:         fClearOnNew, 0 );
                    589:       SendMessage( GetDlgItem( hDlg, IDC_VERBOSE),          BM_SETCHECK,
                    590:         fVerbose, 0 );
                    591:       SendMessage( GetDlgItem( hDlg, IDC_SHOW_SYMBOLS),     BM_SETCHECK,
                    592:         fShowSymbols, 0 );
                    593:       SendMessage( GetDlgItem( hDlg, IDC_SAVE_PREFERENCES), BM_SETCHECK,
                    594:         fSavePreferences, 0 );
                    595: 
                    596:       return( TRUE );
                    597:   }
                    598: 
                    599:   return( FALSE );
                    600: }
                    601: 
                    602: 
                    603: // ************************************************************************
                    604: // FUNCTION : AttachDlgProc( HWND, UINT, WPARAM, LPARAM )
                    605: // PURPOSE  : Processes messages for "Attach" dialog box
                    606: // MESSAGES :
                    607: //   WM_INITDIALOG - initialize dialog box
                    608: //   WM_COMMAND    - Input received
                    609: // COMMENTS :
                    610: //
                    611: //   Wait for user to click on "Ok" button, then close the dialog box.
                    612: // ************************************************************************
                    613: BOOL CALLBACK
                    614: AttachDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    615: {
                    616:   static HWND  hWndProcessList;
                    617:   static DWORD idDebugEventThread;
                    618:   static DWORD dwProcessId;
                    619:   static LONG  idx;
                    620: 
                    621:   UNREFERENCED_PARAMETER( lParam );
                    622: 
                    623:   switch( uMsg ) {
                    624: 
                    625:     case WM_COMMAND:
                    626:       switch( LOWORD(wParam) ) {
                    627: 
                    628:         case IDOK:
                    629:           idx = (UINT) SendMessage( hWndProcessList, LB_GETCURSEL,
                    630:                          NULL, NULL );
                    631:           dwProcessId = (DWORD) SendMessage( hWndProcessList,
                    632:                                   LB_GETITEMDATA,
                    633:                                   idx, NULL );
                    634: 
                    635:           //-- create debug event processing thread and attach to the process
                    636:           CreateThread(
                    637:             (LPSECURITY_ATTRIBUTES) NULL,
                    638:             (DWORD) 0,
                    639:             (LPTHREAD_START_ROUTINE) DebugEventThread,
                    640:             (LPVOID) dwProcessId,
                    641:             (DWORD) NULL,
                    642:             (LPDWORD) &idDebugEventThread);
                    643:           EndDialog( hDlg, TRUE );
                    644:           return( TRUE );
                    645: 
                    646:         case IDCANCEL:
                    647:           EndDialog( hDlg, FALSE );
                    648:           return( TRUE );
                    649: 
                    650:         case IDHELP:
                    651:           return( TRUE );
                    652: 
                    653:       }
                    654: 
                    655:       switch( HIWORD( wParam ) ) {
                    656: 
                    657:         case LBN_DBLCLK:
                    658:           SendMessage( hDlg, WM_COMMAND, (WPARAM) IDOK, (LPARAM) 0L );
                    659:           return( TRUE );
                    660:       }
                    661:       break;
                    662: 
                    663:     case WM_INITDIALOG:
                    664:       hWndProcessList = GetDlgItem( hDlg, IDC_PROCESSLIST );
                    665:       SendMessage( hWndProcessList, LB_RESETCONTENT, 0 , 0 );
                    666:       for(; !EnumWindows( (WNDENUMPROC) EnumProcessListFunc,
                    667:                (LPARAM) hWndProcessList ); )
                    668:         ; // continue looping until done
                    669:       return( TRUE );
                    670:   }
                    671: 
                    672:   return( FALSE );
                    673: }
                    674: 
                    675: 
                    676: // ************************************************************************
                    677: // FUNCTION : AboutDlgProc( HWND, UINT, WPARAM, LPARAM )
                    678: // PURPOSE  : Processes messages for "About" dialog box
                    679: // MESSAGES :
                    680: //   WM_INITDIALOG - initialize dialog box
                    681: //   WM_COMMAND    - Input received
                    682: // COMMENTS :
                    683: //   No initialization is needed for this particular dialog box, but TRUE
                    684: //   must be returned to Windows.
                    685: //
                    686: //   Wait for user to click on "Ok" button, then close the dialog box.
                    687: // ************************************************************************
                    688: BOOL CALLBACK
                    689: AboutDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    690: {
                    691:   UNREFERENCED_PARAMETER( lParam );
                    692: 
                    693:   switch( uMsg ) {
                    694: 
                    695:     case WM_COMMAND:
                    696:       switch( LOWORD(wParam) ) {
                    697: 
                    698:         case IDOK:
                    699:           EndDialog( hDlg, TRUE );
                    700:           return( TRUE );
                    701:       }
                    702:       break;
                    703: 
                    704:     case WM_INITDIALOG:
                    705:       return( TRUE );
                    706: 
                    707:     case WM_CLOSE:
                    708:       EndDialog( hDlg, TRUE );
                    709:       return( TRUE );
                    710: 
                    711:   }
                    712: 
                    713:   return( FALSE );
                    714: }
                    715: 
                    716: 
                    717: // ************************************************************************
                    718: // FUNCTION : NewListBoxWndProc( HWND, UINT, WPARAM, LPARAM )
                    719: // PURPOSE  : Processes messages for "LISTBOX" class.
                    720: // COMMENTS : Prevents the user from moving the window
                    721: //            by dragging the titlebar.
                    722: // ************************************************************************
                    723: LRESULT CALLBACK
                    724: NewListBoxWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
                    725: {
                    726:   switch( uMsg ) {
                    727: 
                    728:     case WM_NCLBUTTONDOWN:
                    729:       if( wParam == HTCAPTION ) {
                    730:         SetFocus( hWnd );
                    731:         return( NULL );
                    732:       }
                    733:       else
                    734:         break;
                    735:   }
                    736: 
                    737:   return( CallWindowProc( OldListBoxWndProc, hWnd, uMsg, wParam, lParam) );
                    738: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.