// ComputeDialog.cpp : 实现文件 // #include "stdafx.h" #include "Ex13.h" #include "ComputeDialog.h" //int g_nCount = 0; UINT ComputeThreadProc(LPVOID pParam) { for(int i = 0; i < 100000 ; ++i) for (int j = 0; j < 100000; ++j) { } TRACE(_T("Finished")); ::PostMessage((HWND)pParam, WM_THREADFINISHED, 0, 0); return 0; } // CComputeDialog 对话框 IMPLEMENT_DYNAMIC(CComputeDialog, CDialog) CComputeDialog::CComputeDialog(CWnd* pParent /*=NULL*/) : CDialog(CComputeDialog::IDD, pParent), g_nCount(0) { } CComputeDialog::~CComputeDialog() { } void CComputeDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CComputeDialog, CDialog) ON_BN_CLICKED(IDC_START, &CComputeDialog::OnBnClickedStart) ON_BN_CLICKED(IDC_CANCEL, &CComputeDialog::OnBnClickedCancel) ON_WM_TIMER() ON_MESSAGE(WM_THREADFINISHED, OnThreadFinished) END_MESSAGE_MAP() LRESULT CComputeDialog::OnThreadFinished(WPARAM wParam, LPARAM lParam) { GetDlgItem(IDC_START)->EnableWindow(TRUE); KillTimer(1); //CDialog::OnOK(); return 0; } // CComputeDialog 消息处理程序 void CComputeDialog::OnBnClickedStart() { // TODO: 在此添加控件通知处理程序代码 //MSG message; m_nTimer = SetTimer(1, 100, NULL); ASSERT(m_nTimer != 0); GetDlgItem(IDC_START)->EnableWindow(FALSE); AfxBeginThread(ComputeThreadProc, GetSafeHwnd(), THREAD_PRIORITY_NORMAL); } void CComputeDialog::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 if(g_nCount == 0) CDialog::OnCancel(); else { g_nCount = nMaxCount; KillTimer(1); CDialog::OnCancel(); } } void CComputeDialog::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); g_nCount+=1000; TRACE("In OnTimer: g_nCount = %d/n", g_nCount); if (g_nCount < nMaxCount) pBar->SetPos(g_nCount*100 / nMaxCount); CDialog::OnTimer(nIDEvent); }