📄 hwproc.c
字号:
case WM_CLOSE:
PostMessage( hwnd, WM_COMMAND, HEAPMENU_EXIT, 0L );
return( TRUE );
case WM_QUERYENDSESSION:
SaveConfigFile( FALSE );
return( TRUE );
break;
case WM_DESTROY:
FiniPaintProc();
KillPushWin( info->list.title );
SaveConfigFile( FALSE );
if( info != NULL ) {
FreeProcInstance( info->alloc_proc );
MemFree( info );
}
DestroyMonoFonts();
Ctl3dUnregister( Instance );
WWinHelp( hwnd, "heapwalk.hlp", HELP_QUIT, 0 );
PostQuitMessage( 0 );
break;
case WM_ACTIVATEAPP:
if( wparam && !NoRefresh ) {
if( info->doing_add ) {
info->need_refresh = TRUE;
} else {
InitHeapList( info->list.box, TRUE );
}
}
break;
case WM_MENUSELECT:
if( LOWORD( lparam & MF_POPUP ) ) {
mh = GetMenu( hwnd );
mh2 = GetSubMenu( mh, 6 );
if( (HMENU)wparam == mh2 ) {
ShowWindow( info->alloc_dialog, SW_SHOWNOACTIVATE );
} else if( (HMENU)wparam != GetSubMenu( mh2, 3 ) &&
(HMENU)wparam != GetSubMenu( mh2, 4 ) &&
(HMENU)wparam != GetSubMenu( mh2, 5 ) ) {
ShowWindow( info->alloc_dialog, SW_HIDE );
}
}
return( DefWindowProc( hwnd, msg, wparam, lparam ) );
break;
case WM_COMMAND:
switch( wparam ) {
case HEAPMENU_ABOUT:
ai.owner = hwnd;
ai.inst = Instance;
ai.name = GetRCString( STR_ABOUT_NAME );
ai.version = banner1p2( _HEAPWALKER_VERSION_ );
ai.first_cr_year = GetRCString( STR_ABOUT_COPYRIGHT_YEAR );
ai.title = GetRCString( STR_ABOUT_TITLE );
DoAbout( &ai );
break;
case HEAPMENU_HELP_CONTENTS:
WWinHelp( hwnd, "heapwalk.hlp", HELP_CONTENTS, 0 );
break;
case HEAPMENU_HELP_SRCH:
WWinHelp( hwnd, "heapwalk.hlp", HELP_PARTIALKEY, (DWORD)"" );
break;
case HEAPMENU_HELP_ON_HELP:
WWinHelp( hwnd, "winhelp.hlp", HELP_HELPONHELP, 0 );
break;
case HEAPEX_LIST:
if( !info->doing_add ) {
if( HIWORD( lparam ) == LBN_DBLCLK ) {
ShowHeapObject( (HWND)LOWORD( lparam ) );
}
} else {
if( HIWORD( lparam ) == LBN_SELCHANGE
|| HIWORD( lparam ) == LBN_DBLCLK ) {
RefreshAdd( info->add_dialog, info->list.box );
RedrawBox( info->list.box, index );
}
}
break;
case HEAPMENU_GLOBAL_REFRESH:
InitHeapList( info->list.box, TRUE );
break;
case HEAPMENU_FONT:
if( ChooseMonoFont( hwnd ) ) {
ResetFont( info );
}
break;
case HEAPMENU_EXIT:
DestroyWindow( hwnd );
FreeHeapList();
break;
case HEAPMENU_DISPLAY_DPMI:
case HEAPMENU_DISPLAY_ENTIRE:
case HEAPMENU_DISPLAY_LRU:
case HEAPMENU_DISPLAY_FREE:
SetDisplayType( hwnd, &( info->list.title ), wparam );
InitHeapList( info->list.box, FALSE );
break;
case HEAPMENU_SORT_ADDR:
case HEAPMENU_SORT_HANDLE:
case HEAPMENU_SORT_MODULE:
case HEAPMENU_SORT_SIZE:
case HEAPMENU_SORT_TYPE:
case HEAPMENU_SORT_GRAN:
case HEAPMENU_SORT_DPL:
case HEAPMENU_SORT_FLAG:
case HEAPMENU_SORT_LRU:
mh = GetMenu( hwnd );
CheckMenuItem( mh, GSortType, MF_UNCHECKED | MF_BYCOMMAND );
CheckMenuItem( mh, wparam, MF_CHECKED | MF_BYCOMMAND );
if( GSortType != wparam ) {
GSortType = wparam;
SortHeapList();
ReDisplayHeapList( info->list.box, NULL );
}
break;
case HEAPMENU_OBJECT_SHOW:
ShowHeapObject( info->list.box );
break;
case HEAPMENU_OBJECT_DISCARD:
if( GlobDiscardObj( info->list.box ) ) {
InitHeapList( info->list.box, TRUE );
}
break;
case HEAPMENU_OBJECT_NEWEST:
if( GlobSetObjPos( info->list.box, FALSE ) ) {
if( GSortType == HEAPMENU_SORT_LRU ) {
InitHeapList( info->list.box, TRUE );
}
}
break;
case HEAPMENU_OBJECT_OLDEST:
if( GlobSetObjPos( info->list.box, TRUE ) ) {
if( GSortType == HEAPMENU_SORT_LRU ) {
InitHeapList( info->list.box, TRUE );
}
}
break;
case HEAPMENU_OBJECT_GET_SELECTOR:
ShowSelector( info->list.box );
break;
case HEAPMENU_GLOBAL_HEAPINFO:
DisplayGlobHeapInfo( hwnd );
break;
case HEAPMENU_GLOBAL_MEMORYINFO:
DisplayMemManInfo( hwnd );
break;
case HEAPMENU_GLOBAL_COMPACT:
GlobalCompact( 0 );
InitHeapList( info->list.box, TRUE );
break;
case HEAPMENU_GLOBAL_COMP_DISC:
GlobalCompact( -1 );
InitHeapList( info->list.box, TRUE );
break;
case HEAPMENU_GLOBAL_CODE_SIZE:
fp = MakeProcInstance( (FARPROC)SetCodeDlgProc, Instance );
JDialogBox( Instance, "CODE_AREA_DLG", hwnd, (DLGPROC)fp );
FreeProcInstance( fp );
break;
case HEAPMENU_FILE_SAVE:
InitHeapList( info->list.box, TRUE );
SaveListBox( SLB_SAVE_TMP, PutOutGlobalHeader, Config.gfname,
HeapWalkName, hwnd, info->list.box );
break;
case HEAPMENU_FILE_SAVE_TO:
InitHeapList( info->list.box, TRUE );
SaveListBox( SLB_SAVE_AS, PutOutGlobalHeader, Config.gfname,
HeapWalkName, hwnd, info->list.box );
break;
case HEAPMENU_SAVE_CONFIG:
SaveConfigFile( TRUE );
break;
case HEAPMENU_CONFIGURE:
HWConfigure();
break;
case HEAPMENU_LOCAL_MONITOR:
index = CheckForLocalSelect( info );
if( index != LB_ERR ) {
BeginMonitor( HeapList[index] );
}
break;
case HEAPMENU_COMPACT_AND_LOCALWALK:
LocalCompact( -1 );
/* fall through */
case HEAPMENU_LOCAL_LOCALWALK:
index = CheckForLocalSelect( info );
if( index != LB_ERR ) {
LocalWalk( HeapList[index] );
}
break;
case HEAPMENU_GDI_LOCALWALK:
if( GetDGroupItem( "GDI", &hl ) ) {
LocalWalk( &hl );
}
break;
case HEAPMENU_USER_LOCALWALK:
if( GetDGroupItem( "USER", &hl ) ) {
LocalWalk( &hl );
}
break;
case HEAPMENU_FREE_ALL:
MyFreeAllMem();
UpdateAllocInfo( info->alloc_dialog );
PaintAllWindows();
break;
case HEAPMENU_FREE_1K:
case HEAPMENU_FREE_2K:
case HEAPMENU_FREE_5K:
case HEAPMENU_FREE_10K:
case HEAPMENU_FREE_25K:
case HEAPMENU_FREE_50K:
hourglass = LoadCursor( NULL, IDC_WAIT );
SetCapture( hwnd );
oldcursor= SetCursor( hourglass );
FreeSomeMem( wparam );
UpdateAllocInfo( info->alloc_dialog );
SetCursor( oldcursor );
ReleaseCapture();
PaintAllWindows();
break;
case HEAPMENU_ALLOC_1K:
case HEAPMENU_ALLOC_2K:
case HEAPMENU_ALLOC_5K:
case HEAPMENU_ALLOC_10K:
case HEAPMENU_ALLOC_25K:
case HEAPMENU_ALLOC_50K:
hourglass = LoadCursor( NULL, IDC_WAIT );
SetCapture( hwnd );
oldcursor= SetCursor( hourglass );
AllocMore( wparam );
UpdateAllocInfo( info->alloc_dialog );
SetCursor( oldcursor );
ReleaseCapture();
PaintAllWindows();
break;
case HEAPMENU_ALLOC_ALL:
case HEAPMENU_ALLOC_BUT_1K:
case HEAPMENU_ALLOC_BUT_2K:
case HEAPMENU_ALLOC_BUT_5K:
case HEAPMENU_ALLOC_BUT_10K:
case HEAPMENU_ALLOC_BUT_25K:
case HEAPMENU_ALLOC_BUT_50K:
hourglass = LoadCursor( NULL, IDC_WAIT );
SetCapture( hwnd );
oldcursor= SetCursor( hourglass );
AllocAllBut( wparam );
UpdateAllocInfo( info->alloc_dialog );
SetCursor( oldcursor );
ReleaseCapture();
PaintAllWindows();
break;
case HEAPMENU_ALLOC_NK:
case HEAPMENU_ALLOC_BUT_NK:
case HEAPMENU_FREE_NK:
DoNBytes( hwnd, wparam );
UpdateAllocInfo( info->alloc_dialog );
PaintAllWindows();
break;
case HEAPMENU_ADD:
info->add_dialog = StartAdd( hwnd, &info->list );
if( info->add_dialog != NULL ) {
info->doing_add = TRUE;
info->need_refresh = FALSE;
} else {
ErrorBox( hwnd, STR_UNABLE_TO_ADD,
MB_OK| MB_ICONINFORMATION );
}
break;
}
break;
case WM_USER:
/* an owned window is being destroyed make sure
* Windows doesn't take the focus away from us*/
NoRefresh = TRUE;
SetFocus( hwnd );
NoRefresh = FALSE;
break;
default:
return( DefWindowProc( hwnd, msg, wparam, lparam ) );
}
return( NULL );
} /* HeapWalkProc */
void EndAdd( void ) {
GblWndInfo *info;
char search[2];
search[0] = '*';
search[1] = '\0';
info = (GblWndInfo *)GetWindowLong( HeapWalkMainWindow, 0 );
info->doing_add = FALSE;
SetMenusForAdd( HeapWalkMainWindow, FALSE );
if( info->need_refresh ) {
InitHeapList( info->list.box, TRUE );
}
SetListBoxForAdd( info->list.box, FALSE );
} /* EndAdd */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -