windows-nt/Source/XPSP1/NT/sdktools/dbwin32/dbdlg32.cpp
2020-09-26 16:20:57 +08:00

235 lines
6.6 KiB
C++

#pragma warning(disable:4135)
#include <afxwin.h>
#pragma warning(default:4135)
#include <afxdlgs.h>
#include "resource.h"
#define _DBWIN32_
#include "dbwin32.h"
BEGIN_MESSAGE_MAP(DbWin32RunDlg, CDialog)
// Windows messages
ON_CBN_EDITCHANGE(IDC_COMMANDLINE, OnEditChange)
ON_CBN_SELCHANGE(IDC_COMMANDLINE, OnSelChange)
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
// Command handlers
// Idle update handlers
END_MESSAGE_MAP()
DbWin32RunDlg::DbWin32RunDlg(CString *pstIn) : CDialog(IDR_RUNDLG)
{
pst = pstIn;
}
DbWin32RunDlg::~DbWin32RunDlg()
{
}
BOOL DbWin32RunDlg::OnInitDialog()
{
int iSt;
CComboBox *pcb = (CComboBox *)GetDlgItem(IDC_COMMANDLINE);
for (iSt = 0; iSt < MAX_HISTORY; iSt++)
if (!pst[iSt].IsEmpty())
pcb->AddString(pst[iSt]);
if (pcb->GetCount())
{
pcb->SetCurSel(0);
OnSelChange();
}
return(CDialog::OnInitDialog());
}
void DbWin32RunDlg::OnEditChange()
{
CComboBox *pcb = (CComboBox *)GetDlgItem(IDC_COMMANDLINE);
CButton *pbutton = (CButton *)GetDlgItem(IDOK);
pcb->GetWindowText(stCommandLine);
pbutton->EnableWindow(!stCommandLine.IsEmpty());
}
void DbWin32RunDlg::OnSelChange()
{
CComboBox *pcb = (CComboBox *)GetDlgItem(IDC_COMMANDLINE);
CButton *pbutton = (CButton *)GetDlgItem(IDOK);
pcb->GetLBText(pcb->GetCurSel(), stCommandLine);
pbutton->EnableWindow(!stCommandLine.IsEmpty());
}
void DbWin32RunDlg::OnBrowse()
{
CComboBox *pcb = (CComboBox *)GetDlgItem(IDC_COMMANDLINE);
CFileDialog fdlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST, "Executable Files|*.exe||",
this);
if (fdlg.DoModal() == IDOK)
{
pcb->SetWindowText(fdlg.GetPathName());
OnEditChange();
}
}
struct EnumInfo
{
CListBox *plb;
WindowList *pwl;
DWORD dwProcessCur;
};
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam)
{
int iItem;
DWORD dwProcess;
char szTitle[256];
WindowInfo wi;
EnumInfo *pei = (EnumInfo *)lParam;
if (hWnd)
{
GetWindowText(hWnd, szTitle, sizeof(szTitle));
if (*szTitle)
{
GetWindowThreadProcessId(hWnd, &dwProcess);
if (dwProcess != pei->dwProcessCur)
{
wi.dwProcess = 0;
for (iItem = 0; (iItem < pei->pwl->Count()) &&
(wi.dwProcess != dwProcess); iItem++)
pei->pwl->GetItem(iItem, &wi);
if (iItem == pei->pwl->Count())
{
iItem = pei->plb->AddString(szTitle);
pei->plb->SetItemData(iItem, dwProcess);
}
}
}
}
return(TRUE);
}
BEGIN_MESSAGE_MAP(DbWin32AttachDlg, CDialog)
// Windows messages
ON_LBN_DBLCLK(IDC_PROCESS, OnDoubleClick)
// Command handlers
// Idle update handlers
END_MESSAGE_MAP()
DbWin32AttachDlg::DbWin32AttachDlg(WindowList *pwlIn) : CDialog(IDR_ATTACHDLG)
{
pwl = pwlIn;
}
DbWin32AttachDlg::~DbWin32AttachDlg()
{
}
BOOL DbWin32AttachDlg::OnInitDialog()
{
EnumInfo ei;
CListBox *plb = (CListBox *)GetDlgItem(IDC_PROCESS);
CDialog::OnInitDialog();
plb->ResetContent();
ei.plb = plb;
ei.pwl = pwl;
ei.dwProcessCur = GetCurrentProcessId();
EnumWindows(EnumProc, (LPARAM)&ei);
plb->SetCurSel(0);
return(TRUE);
}
void DbWin32AttachDlg::OnOK()
{
CListBox *plb = (CListBox *)GetDlgItem(IDC_PROCESS);
dwProcess = (DWORD)plb->GetItemData(plb->GetCurSel());
CDialog::OnOK();
}
void DbWin32AttachDlg::OnDoubleClick()
{
OnOK();
}
BEGIN_MESSAGE_MAP(DbWin32OptionsDlg, CDialog)
// Windows messages
// Command handlers
ON_CONTROL(BN_CLICKED, IDC_NEWPROCESS, OnClicked)
// Idle update handlers
END_MESSAGE_MAP()
DbWin32OptionsDlg::DbWin32OptionsDlg(DbWin32Options *pdboIn) : CDialog(IDR_OPTIONSDLG)
{
pdbo = pdboIn;
}
DbWin32OptionsDlg::~DbWin32OptionsDlg()
{
}
BOOL DbWin32OptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
((CButton *)GetDlgItem(IDC_NEWPROCESS))->SetCheck(pdbo->fNewOnProcess ? 1 : 0);
((CButton *)GetDlgItem(IDC_NEWTHREAD))->SetCheck(pdbo->fNewOnThread ? 1 : 0);
GetDlgItem(IDC_NEWTHREAD)->EnableWindow(pdbo->fNewOnProcess);
((CButton *)GetDlgItem(IDC_ONTOP))->SetCheck(pdbo->fOnTop ? 1 : 0);
((CButton *)GetDlgItem(IDC_MINIMIZE))->SetCheck((pdbo->nInactive == INACTIVE_MINIMIZE) ? 1 : 0);
((CButton *)GetDlgItem(IDC_NONE))->SetCheck((pdbo->nInactive == INACTIVE_NONE) ? 1 : 0);
((CButton *)GetDlgItem(IDC_CLOSE))->SetCheck((pdbo->nInactive == INACTIVE_CLOSE) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_OUTPUT))->SetCheck((pdbo->wFilter & DBO_OUTPUTDEBUGSTRING) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_EXCEPTIONS))->SetCheck((pdbo->wFilter & DBO_EXCEPTIONS) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_PROCESSCREATE))->SetCheck((pdbo->wFilter & DBO_PROCESSCREATE) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_PROCESSEXIT))->SetCheck((pdbo->wFilter & DBO_PROCESSEXIT) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_THREADCREATE))->SetCheck((pdbo->wFilter & DBO_THREADCREATE) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_THREADEXIT))->SetCheck((pdbo->wFilter & DBO_THREADEXIT) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_DLLLOAD))->SetCheck((pdbo->wFilter & DBO_DLLLOAD) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_DLLUNLOAD))->SetCheck((pdbo->wFilter & DBO_DLLUNLOAD) ? 1 : 0);
((CButton *)GetDlgItem(IDC_FILTER_RIP))->SetCheck((pdbo->wFilter & DBO_RIP) ? 1 : 0);
return(TRUE);
}
void DbWin32OptionsDlg::OnOK()
{
pdbo->fNewOnProcess = ((CButton *)GetDlgItem(IDC_NEWPROCESS))->GetCheck();
pdbo->fNewOnThread = ((CButton *)GetDlgItem(IDC_NEWTHREAD))->GetCheck();
pdbo->fOnTop = ((CButton *)GetDlgItem(IDC_ONTOP))->GetCheck();
if (((CButton *)GetDlgItem(IDC_NONE))->GetCheck())
pdbo->nInactive = INACTIVE_NONE;
else if (((CButton *)GetDlgItem(IDC_CLOSE))->GetCheck())
pdbo->nInactive = INACTIVE_CLOSE;
else
pdbo->nInactive = INACTIVE_MINIMIZE;
pdbo->wFilter = 0;
if (((CButton *)GetDlgItem(IDC_FILTER_OUTPUT))->GetCheck())
pdbo->wFilter = DBO_OUTPUTDEBUGSTRING;
if (((CButton *)GetDlgItem(IDC_FILTER_EXCEPTIONS))->GetCheck())
pdbo->wFilter |= DBO_EXCEPTIONS;
if (((CButton *)GetDlgItem(IDC_FILTER_PROCESSCREATE))->GetCheck())
pdbo->wFilter |= DBO_PROCESSCREATE;
if (((CButton *)GetDlgItem(IDC_FILTER_PROCESSEXIT))->GetCheck())
pdbo->wFilter |= DBO_PROCESSEXIT;
if (((CButton *)GetDlgItem(IDC_FILTER_THREADCREATE))->GetCheck())
pdbo->wFilter |= DBO_THREADCREATE;
if (((CButton *)GetDlgItem(IDC_FILTER_THREADEXIT))->GetCheck())
pdbo->wFilter |= DBO_THREADEXIT;
if (((CButton *)GetDlgItem(IDC_FILTER_DLLLOAD))->GetCheck())
pdbo->wFilter |= DBO_DLLLOAD;
if (((CButton *)GetDlgItem(IDC_FILTER_DLLUNLOAD))->GetCheck())
pdbo->wFilter |= DBO_DLLUNLOAD;
if (((CButton *)GetDlgItem(IDC_FILTER_RIP))->GetCheck())
pdbo->wFilter |= DBO_RIP;
CDialog::OnOK();
}
void DbWin32OptionsDlg::OnClicked()
{
BOOL fNewOnProcess = ((CButton *)GetDlgItem(IDC_NEWPROCESS))->GetCheck();
((CButton *)GetDlgItem(IDC_NEWTHREAD))->SetCheck(0);
GetDlgItem(IDC_NEWTHREAD)->EnableWindow(fNewOnProcess);
}