⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filterdlg.cpp

📁 Strace: Webcrazy原来写的很好的代码
💻 CPP
字号:
// FilterDlg.cpp : implementation file
//

#include "stdafx.h"
#include "StraceGui.h"
#include "StraceGuiDoc.h"
#include "ListCtrlEx.h"
#include "ListVwEx.h"
#include "ProcFilterDlg.h"
#include "StraceGuiView.h"
#include "FilterDlg.h"
#include "..\sys\strace.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFilterDlg dialog
STRACE_FILTER filter;
CStraceGuiView *m_StraceView;

CFilterDlg::CFilterDlg(void *v,CWnd* pParent /*=NULL*/)
	: CDialog(CFilterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFilterDlg)
	//}}AFX_DATA_INIT
	m_StraceView = (CStraceGuiView *)v;

}


void CFilterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFilterDlg)
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFilterDlg, CDialog)
	//{{AFX_MSG_MAP(CFilterDlg)
	ON_BN_CLICKED(IDCLEARFUNC, OnClearfunc)
	ON_BN_CLICKED(IDPROCESS, OnProcessFilter)
	ON_BN_CLICKED(IDC_IDCUSTOM,OnSelectCustomID)
	ON_BN_CLICKED(IDRESET, OnReset)
	ON_BN_CLICKED(IDCLEARPROC, OnClearproc)
	ON_BN_CLICKED(IDCLEARTHRD, OnClearthrd)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFilterDlg message handlers

BOOL CFilterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	SetDlgItemText(IDC_FUNC1,filter.FuncName1);
	SetDlgItemText(IDC_FUNC2,filter.FuncName2);
	SetDlgItemText(IDC_FUNC3,filter.FuncName3);
	SetDlgItemText(IDC_PROC1,filter.ProcName1);
	SetDlgItemText(IDC_PROC2,filter.ProcName2);
	if(filter.Thrd1)
	   SetDlgItemInt(IDC_THRDID1,filter.Thrd1);
    else SetDlgItemText(IDC_THRDID1,NULL);
	if(filter.Thrd2)
	   SetDlgItemInt(IDC_THRDID2,filter.Thrd2);
	else SetDlgItemText(IDC_THRDID2,NULL);
	if(filter.Thrd3)
	   SetDlgItemInt(IDC_THRDID3,filter.Thrd3);
	else SetDlgItemText(IDC_THRDID3,NULL);

	if(filter.CallFrom==CALLFROMALL)
	{
	   SendDlgItemMessage(IDC_CALLALL,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
	   SendDlgItemMessage(IDC_CALLKERNEL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
	   SendDlgItemMessage(IDC_CALLUSER,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
	}
	else if(filter.CallFrom==CALLFROMKERNEL)
			{ 
		     SendDlgItemMessage(IDC_CALLKERNEL,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
			 SendDlgItemMessage(IDC_CALLUSER,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 SendDlgItemMessage(IDC_CALLALL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 }
	     else 
		 {
		     SendDlgItemMessage(IDC_CALLUSER,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
			 SendDlgItemMessage(IDC_CALLKERNEL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 SendDlgItemMessage(IDC_CALLALL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
		 }
	if(filter.ServiceIDFrom==SERVICEIDFROM&&filter.ServiceIDTo==SERVICEIDTO)
	{
	   SendDlgItemMessage(IDC_IDALL,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
	   SendDlgItemMessage(IDC_IDWIN32K,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
	   SendDlgItemMessage(IDC_IDNTOSKRNL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
	   SendDlgItemMessage(IDC_IDCUSTOM,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
	}
	else if(filter.ServiceIDFrom==SERVICEIDKERNELFROM&&filter.ServiceIDTo==SERVICEIDKERNELTO)
			{
		     SendDlgItemMessage(IDC_IDNTOSKRNL,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
			 SendDlgItemMessage(IDC_IDWIN32K,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 SendDlgItemMessage(IDC_IDALL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 SendDlgItemMessage(IDC_IDCUSTOM,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
			 }
	     else if(filter.ServiceIDFrom==SERVICEIDUSERFROM&&filter.ServiceIDTo==SERVICEIDUSERTO)
				{
		         SendDlgItemMessage(IDC_IDWIN32K,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
				 SendDlgItemMessage(IDC_IDNTOSKRNL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				 SendDlgItemMessage(IDC_IDALL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				 SendDlgItemMessage(IDC_IDCUSTOM,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				}
		      else{
				 SendDlgItemMessage(IDC_IDCUSTOM,BM_SETCHECK,(WPARAM)BST_CHECKED,0);
				 SendDlgItemMessage(IDC_IDWIN32K,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				 SendDlgItemMessage(IDC_IDALL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				 SendDlgItemMessage(IDC_IDNTOSKRNL,BM_SETCHECK,(WPARAM)BST_UNCHECKED,0);
				 SetDlgItemInt(IDC_IDFROM,filter.ServiceIDFrom,FALSE);
				 SetDlgItemInt(IDC_IDTO,filter.ServiceIDTo,FALSE);
			  }

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFilterDlg::OnClearfunc() 
{
	// TODO: Add your control notification handler code here

	SetDlgItemText(IDC_FUNC1,NULL);
	SetDlgItemText(IDC_FUNC2,NULL);
	SetDlgItemText(IDC_FUNC3,NULL);
}

void CFilterDlg::OnProcessFilter() 
{
	// TODO: Add your control notification handler code here
    m_StraceView->OnSetfilter();
}

void CFilterDlg::OnSelectCustomID() 
{
	// TODO: Add your control notification handler code here
	if(SendDlgItemMessage(IDC_IDCUSTOM,BM_GETCHECK,0,0)==BST_CHECKED){
       SendDlgItemMessage(IDC_IDFROM,WM_ENABLE,TRUE,0);
	   SendDlgItemMessage(IDC_IDTO,WM_ENABLE,TRUE,0);
	   SendDlgItemMessage(IDC_IDFROM,WM_SETFOCUS,TRUE,0);
	           
	}else{
	   SendDlgItemMessage(IDC_IDFROM,WM_ENABLE,FALSE,0);
	   SendDlgItemMessage(IDC_IDTO,WM_ENABLE,FALSE,0);

	}
}

void CFilterDlg::OnOK() 
{
	int from,to;
	from=GetDlgItemInt(IDC_IDFROM);
	to=GetDlgItemInt(IDC_IDTO);
	filter.Thrd1=GetDlgItemInt(IDC_THRDID1);
	filter.Thrd2=GetDlgItemInt(IDC_THRDID2);
	filter.Thrd3=GetDlgItemInt(IDC_THRDID3);
	
	if(SendDlgItemMessage(IDC_IDCUSTOM,BM_GETCHECK,0,0)==BST_CHECKED&&(from<SERVICEIDFROM||to>SERVICEIDTO||from>to)){
		AfxMessageBox("Service ID有误!",MB_OK);
	    return;
	}
    if(SendDlgItemMessage(IDC_IDALL,BM_GETCHECK,0,0)==BST_CHECKED){
		filter.ServiceIDFrom=SERVICEIDFROM;
		filter.ServiceIDTo=SERVICEIDTO;
	}else 
		if(SendDlgItemMessage(IDC_IDNTOSKRNL,BM_GETCHECK,0,0)==BST_CHECKED){
		   filter.ServiceIDFrom=SERVICEIDKERNELFROM;
		   filter.ServiceIDTo=SERVICEIDKERNELTO;
		}else 
			if(SendDlgItemMessage(IDC_IDWIN32K,BM_GETCHECK,0,0)==BST_CHECKED){
				filter.ServiceIDFrom=SERVICEIDUSERFROM;
				filter.ServiceIDTo=SERVICEIDUSERTO;
			}else 
				if(SendDlgItemMessage(IDC_IDCUSTOM,BM_GETCHECK,0,0)==BST_CHECKED){
					filter.ServiceIDFrom=from;
					filter.ServiceIDTo=to;
				}
    GetDlgItemText(IDC_FUNC1,filter.FuncName1,100);
	GetDlgItemText(IDC_FUNC2,filter.FuncName2,100);
	GetDlgItemText(IDC_FUNC3,filter.FuncName3,100);
	GetDlgItemText(IDC_PROC1,filter.ProcName1,100);
	GetDlgItemText(IDC_PROC2,filter.ProcName2,100);
	
    if(SendDlgItemMessage(IDC_CALLALL,BM_GETCHECK,0,0)==BST_CHECKED)
		filter.CallFrom=CALLFROMALL;
	else if(SendDlgItemMessage(IDC_CALLKERNEL,BM_GETCHECK,0,0)==BST_CHECKED)
		    filter.CallFrom=CALLFROMKERNEL;
	     else if(SendDlgItemMessage(IDC_CALLUSER,BM_GETCHECK,0,0)==BST_CHECKED)
			 filter.CallFrom=CALLFROMUSER;

	CDialog::OnOK();
}

void CFilterDlg::GetResults(void *f)
{
   memcpy(f,(void *)&filter,sizeof(STRACE_FILTER));
}

void CFilterDlg::SetStraceFilter(void *f)
{
   memcpy((void *)&filter,f,sizeof(STRACE_FILTER));
}

void CFilterDlg::OnReset() 
{
	// TODO: Add your control notification handler code here
    filter.ServiceIDFrom=SERVICEIDFROM;
	filter.ServiceIDTo=SERVICEIDTO;
    filter.CallFrom = CALLFROMALL;
	filter.Thrd1=0;
	filter.Thrd2=0;
	filter.Thrd3=0;
	memset(filter.FuncName1,'\0',sizeof(filter.FuncName1));
	memset(filter.FuncName2,'\0',sizeof(filter.FuncName2));
	memset(filter.FuncName3,'\0',sizeof(filter.FuncName3));
	memset(filter.ProcName1,'\0',sizeof(filter.ProcName1));
	memset(filter.ProcName2,'\0',sizeof(filter.ProcName2));
    OnInitDialog();
}

void CFilterDlg::OnClearproc() 
{
	SetDlgItemText(IDC_PROC1,NULL);
	SetDlgItemText(IDC_PROC2,NULL);
}

void CFilterDlg::OnClearthrd() 
{
	SetDlgItemText(IDC_THRDID1,NULL);
	SetDlgItemText(IDC_THRDID2,NULL);
	SetDlgItemText(IDC_THRDID3,NULL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -