📄 watch.cpp
字号:
#include "pch.h"
#include "main.h"
#include "doc.h"
#include "debug.h"
#include "record.h"
#include "watch.h"
#include "message.h"
BEGIN_MESSAGE_MAP ( CWatchDialog , CDialog )
ON_BN_CLICKED ( IDC_FORWARD , OnForwardClick )
ON_BN_CLICKED ( IDC_BACKWARD , OnBackwardClick )
END_MESSAGE_MAP ( )
CWatchDialog::CWatchDialog ( CDancerDoc* pDancerDoc , BOOL bNotify )
: CDialog ( IDD_WATCH )
{
m_pDancerDoc = pDancerDoc ;
m_bNotify = bNotify ;
}
CWatchDialog::~CWatchDialog ( )
{
}
BOOL CWatchDialog::OnInitDialog ( )
{
CDialog::OnInitDialog ( );
if ( m_bNotify == FALSE )
{
m_xPause.ShowWindow ( SW_HIDE ) ;
}
else
{
CString str ;
str.LoadString ( IDS_NOTIFY ) ;
SetWindowText ( str ) ;
}
CMainApp* p = ( CMainApp* ) AfxGetApp ( ) ;
m_xTree.SetImageList ( &p->m_imgType , TVSIL_NORMAL ) ;
CListCtrl& ctrl = m_pDancerDoc->m_pMessageView->GetListCtrl ( ) ;
int item = ctrl.GetNextItem ( -1 , LVNI_SELECTED ) ;
LocateAt ( item ) ;
UpdateData ( FALSE ) ;
return TRUE ;
}
void CWatchDialog::DoDataExchange ( CDataExchange* pDX )
{
CDialog::DoDataExchange ( pDX ) ;
DDX_Control ( pDX , IDC_BASIC_INFO , m_xBasicInfo ) ;
DDX_Control ( pDX , IDC_PAUSE , m_xPause ) ;
DDX_Control ( pDX , IDC_PARAMETER , m_xTree ) ;
DDX_Control ( pDX , IDC_REG , m_xReg ) ;
DDX_Control ( pDX , IDC_REG2 , m_xRegPost ) ;
}
void CWatchDialog::OnForwardClick ( )
{
CListCtrl& ctrl = m_pDancerDoc->m_pMessageView->GetListCtrl ( ) ;
DWORD n = ctrl.GetItemCount ( ) , item = ( DWORD ) m_nItem ;
while ( item < n - 1 )
{
Record* p = ( Record* ) ctrl.GetItemData ( ++item ) ;
if ( p->m_nType == HOOK_MSG )
{
LocateAt ( item ) ;
break ;
}
}
}
void CWatchDialog::OnBackwardClick ( )
{
CListCtrl& ctrl = m_pDancerDoc->m_pMessageView->GetListCtrl ( ) ;
DWORD n = ctrl.GetItemCount ( ) , item = ( DWORD ) m_nItem ;
while ( item > 0 )
{
Record* p = ( Record* ) ctrl.GetItemData ( --item ) ;
if ( p->m_nType == HOOK_MSG )
{
LocateAt ( item ) ;
break ;
}
}
}
void CWatchDialog::LocateAt ( int item )
{
UpdateData ( ) ;
// set basic information
CListCtrl& ctrl = m_pDancerDoc->m_pMessageView->GetListCtrl ( ) ;
ctrl.SetItemState ( item , LVIS_SELECTED , LVIS_SELECTED ) ;
Record* p = ( Record* ) ctrl.GetItemData ( item ) ;
CString msg , str;
p->Present2 ( str ) ;
msg.Format ( "%d - " , p->m_pDispatch->m_dwListItem ) ;
msg += str ;
m_xBasicInfo.SetWindowText ( msg ) ;
// set parameter tree
m_xTree.DeleteAllItems ( ) ;
if ( p->m_pDispatch->m_pParamBlock != NULL )
{
p->m_pDispatch->m_pParamBlock->Present ( m_xTree , TVI_ROOT ) ;
if ( p->m_pDispatch->m_pParamBlockPost != NULL )
{
HTREEITEM h = m_xTree.InsertItem ( "Return Value" , 4 , 4 , TVI_ROOT ) ;
p->m_pDispatch->m_pParamBlockPost->Present ( m_xTree , h ) ;
}
}
else
{
m_xTree.InsertItem ( "N/A" , 3 , 3 ) ;
}
// set register information
m_xReg.ResetContent ( ) ;
if ( p->m_pDispatch->m_pReg != NULL )
{
str.Format ( "EAX: %08X" , p->m_pDispatch->m_pReg->Eax ) ;
m_xReg.AddString ( str ) ;
str.Format ( "EBX: %08X" , p->m_pDispatch->m_pReg->Ebx ) ;
m_xReg.AddString ( str ) ;
str.Format ( "ECX: %08X" , p->m_pDispatch->m_pReg->Ecx ) ;
m_xReg.AddString ( str ) ;
str.Format ( "EDX: %08X" , p->m_pDispatch->m_pReg->Edx ) ;
m_xReg.AddString ( str ) ;
str.Format ( "EBP: %08X" , p->m_pDispatch->m_pReg->Ebp ) ;
m_xReg.AddString ( str ) ;
str.Format ( "ESP: %08X" , p->m_pDispatch->m_pReg->Esp ) ;
m_xReg.AddString ( str ) ;
str.Format ( "ESI: %08X" , p->m_pDispatch->m_pReg->Esi ) ;
m_xReg.AddString ( str ) ;
str.Format ( "EDI: %08X" , p->m_pDispatch->m_pReg->Edi ) ;
m_xReg.AddString ( str ) ;
str.Format ( "FLAG: %08X" , p->m_pDispatch->m_pReg->Flags ) ;
m_xReg.AddString ( str ) ;
}
else
{
m_xReg.AddString ( "N/A" ) ;
}
m_xRegPost.ResetContent ( ) ;
if ( p->m_pDispatch->m_pRegPost != NULL )
{
str.Format ( "EAX: %08X" , p->m_pDispatch->m_pRegPost->Eax ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "EBX: %08X" , p->m_pDispatch->m_pRegPost->Ebx ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "ECX: %08X" , p->m_pDispatch->m_pRegPost->Ecx ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "EDX: %08X" , p->m_pDispatch->m_pRegPost->Edx ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "EBP: %08X" , p->m_pDispatch->m_pRegPost->Ebp ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "ESP: %08X" , p->m_pDispatch->m_pRegPost->Esp ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "ESI: %08X" , p->m_pDispatch->m_pRegPost->Esi ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "EDI: %08X" , p->m_pDispatch->m_pRegPost->Edi ) ;
m_xRegPost.AddString ( str ) ;
str.Format ( "FLAG: %08X" , p->m_pDispatch->m_pRegPost->Flags ) ;
m_xRegPost.AddString ( str ) ;
}
else
{
m_xRegPost.AddString ( "N/A" ) ;
}
UpdateData ( FALSE ) ;
m_nItem = item ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -