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

📄 mfcpingdlg.cpp

📁 一个MFC编写的PING程序
💻 CPP
字号:
// MfcPingDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MfcPing.h"
#include "MfcPingDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//线索函数
UINT PingThread( LPVOID pParam );

/////////////////////////////////////////////////////////////////////////////
// CMfcPingDlg dialog

CMfcPingDlg::CMfcPingDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMfcPingDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMfcPingDlg)
	m_Retries = 3;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMfcPingDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMfcPingDlg)
	DDX_Control(pDX, IDC_LIST, m_List);
	DDX_Text(pDX, IDC_RETRIES, m_Retries);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMfcPingDlg, CDialog)
	//{{AFX_MSG_MAP(CMfcPingDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_PING, OnPing)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDC_CLOSE, OnClose)
	ON_MESSAGE(WM_MSG_STATUS,OnStatus)
	ON_MESSAGE(WM_MSG_PINGSTOP,OnPingStop)	
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMfcPingDlg message handlers

BOOL CMfcPingDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_bPing = false;	
	m_hEventStartPing = CreateEvent(NULL, FALSE, FALSE, NULL); // auto reset, initially reset;
	m_hEventStopPing  = CreateEvent(NULL, FALSE, FALSE, NULL); // auto reset, initially reset;	
	m_hEventKillPing  = CreateEvent(NULL, TRUE, FALSE, NULL); // Manual reset, initially reset;
	m_hEvenPingtKilled = CreateEvent(NULL, FALSE, FALSE, NULL); // auto reset, initially reset;	
	m_ThreadInfo.m_hEventStartPing = m_hEventStartPing;
	m_ThreadInfo.m_hEventStopPing = m_hEventStopPing ;
	m_ThreadInfo.m_hEventKillPing = m_hEventKillPing;
	m_ThreadInfo.m_hEvenPingtKilled = m_hEvenPingtKilled;
	m_Thread = NULL;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMfcPingDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}


LRESULT CMfcPingDlg::OnStatus(WPARAM wParam, LPARAM lParam)
{
	char* pMsg = (char*) lParam;
	m_List.AddString(pMsg)	;
	return 1;
}

LRESULT CMfcPingDlg::OnPingStop(WPARAM wParam, LPARAM lParam)
{
	m_bPing = false;
	GetDlgItem(IDC_PING)->EnableWindow(!m_bPing);
	GetDlgItem(IDC_STOP)->EnableWindow(m_bPing);
//	AfxMessageBox("PingStp!");
	return 1;
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMfcPingDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMfcPingDlg::OnPing() 
{	
	CString m_strHost;	
	UpdateData(true); 
	m_ThreadInfo.nRetries = m_Retries;
	GetDlgItem(IDC_HOST)->GetWindowText(m_strHost);
	m_ThreadInfo.strHost = m_strHost;
	if (m_Thread == NULL)
	{
		m_ThreadInfo.m_hwndNotifyWnd = m_hWnd;
		m_Thread= AfxBeginThread(PingThread,&m_ThreadInfo);
	}
	m_bPing = true;
	GetDlgItem(IDC_PING)->EnableWindow(!m_bPing);
	GetDlgItem(IDC_STOP)->EnableWindow(m_bPing);
	SetEvent(m_hEventStartPing);
};

void CMfcPingDlg::OnDestroy() 
{	
	// TODO: Add your message handler code here
	CDialog::OnDestroy();
}


void CMfcPingDlg::OnStop() 
{
	// TODO: Add your control notification handler code here	
	//::PostMessage(m_hWnd,WM_MSG_PINGSTOP,0,0);	
	SetEvent(m_hEventStopPing);
}

void CMfcPingDlg::OnClose() 
{
	if (m_Thread != NULL)
	{
		SetEvent(m_hEventKillPing);
		SetEvent(m_hEventStartPing);
		WaitForSingleObject(m_hEvenPingtKilled,INFINITE);
		m_Thread = NULL;
	}
	//AfxMessageBox("OnDestroy....");	
	CMfcPingDlg::OnCancel();
}

void CMfcPingDlg::OnCancel() 
{	
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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