📄 mtdlg.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 + -