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

📄 mtdlg.cpp

📁 《VC++ 编程技巧与示例 .rar》各个示例代码绝对可用
💻 CPP
字号:
// MtDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MultiThread.h"
#include "MtDlg.h"

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

#define WM_THREADFINISHED         WM_USER+100

/////////////////////////////////////////////////////////////////////////////
// CMtDlg dialog

static HWND hW;
CMtDlg::CMtDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMtDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMtDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CMtDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMtDlg)
	DDX_Control(pDX, ID_MT_END, m_End);
	DDX_Control(pDX, ID_MT_START, m_Start);
	DDX_Control(pDX, IDC_STATIC_MSG, m_Msg);
	DDX_Control(pDX, IDC_PROGRESS, m_Pro);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMtDlg, CDialog)
	//{{AFX_MSG_MAP(CMtDlg)
	ON_WM_TIMER()
	ON_BN_CLICKED(ID_MT_START, OnMtStart)
	ON_BN_CLICKED(ID_MT_END, OnMtEnd)
	ON_MESSAGE(WM_THREADFINISHED,OnThreadFinished)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMtDlg message handlers

void CMtDlg::OnMtStart() 
{
	// TODO: Add your command handler code here
	AfxBeginThread(Cal,GetSafeHwnd());
	SetTimer(1,500,NULL);
	m_Start.EnableWindow(FALSE);
	m_End.EnableWindow(TRUE);
}

void CMtDlg::OnMtEnd() 
{
	// TODO: Add your command handler code here
	g_End.SetEvent();
	KillTimer(1);
	m_Pro.SetPos(0);
	m_Start.EnableWindow(TRUE);
	m_End.EnableWindow(FALSE);
}

void CMtDlg::OnThreadFinished()
{
	AfxMessageBox("来自对话框的报告:线程结束了!");
}

BOOL CMtDlg::OnInitDialog() 
{
	hW=GetSafeHwnd();
	CDialog::OnInitDialog();
	m_Pro.SetRange(0,100);
	m_Pro.SetPos  (0);
	// TODO: Add extra initialization here
	m_End.EnableWindow(FALSE);
	g_End.ResetEvent();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMtDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	m_Pro.StepIt ();
	CDialog::OnTimer(nIDEvent);
}

void CMtDlg::OnOK() 
{
	// TODO: Add extra validation here
	KillTimer(1);
	g_End.SetEvent ();
	CDialog::OnOK();
}

static UINT Cal(LPVOID pPar)
{
	int i;
	CString str;
	CRect rc;
	for(i=0;i<1e100;i++)
	{
		str.Format("第%d次循环",i);
		::SetDlgItemText(hW,
						 IDC_STATIC_MSG,
						 str);
		if(
			::WaitForSingleObject(g_End,0)==WAIT_OBJECT_0
		  )
		{
			break;
		}
	}
	::PostMessage((HWND)pPar,WM_THREADFINISHED,0,0);
	return 0;
}

⌨️ 快捷键说明

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