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

📄 waitprogressdlg.cpp

📁 WinCe下实现多线程
💻 CPP
字号:
// WaitProgressDlg.cpp : implementation file
//

#include "stdafx.h"
#include "WaitProgress.h"
#include "WaitProgressDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CWaitProgressDlg dialog

CWaitProgressDlg::CWaitProgressDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWaitProgressDlg::IDD, pParent)
	, m_nSpeed(250)
{
	//{{AFX_DATA_INIT(CWaitProgressDlg)
//	m_nSpeed = 0;
	m_nIBPadding = m_ctlBusy.GetInterBlockPadding();
	m_nNumBlocks = m_ctlBusy.GetNumSteps();
	m_nMode = 0;
	m_nBusyType = 0;
	m_nBusyFill = 0;
	m_nGranularity = m_ctlBusy.GetGranularity();
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CWaitProgressDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWaitProgressDlg)
	DDX_Control(pDX, IDC_STATIC_BUSYPROGRESS, m_ctlBusy);
	DDX_Control(pDX, IDC_BUTTON_COLBLOCKFACEHI, m_btnColBFaceHi);
	DDX_Control(pDX, IDC_BUTTON_COLBLOCKEDGEHI, m_btnColBEdgeHi);
	DDX_Control(pDX, IDC_BUTTON_COLBLOCKFACE, m_btnColBFace);
	DDX_Control(pDX, IDC_BUTTON_COLBLOCKEDGE, m_btnColBEdge);
	DDX_Control(pDX, IDC_BUTTON_COLBKG, m_btnColBkg);
	DDX_Text(pDX, IDC_EDIT_SPEED, m_nSpeed);
	DDX_Text(pDX, IDC_EDIT_IBPADDING, m_nIBPadding);
	DDX_Text(pDX, IDC_EDIT_NUMBLOCKS, m_nNumBlocks);
	DDX_Radio(pDX, IDC_RADIO_MODE, m_nMode);
	DDX_Radio(pDX, IDC_RADIO_BUSYTYPE_PINGPONG, m_nBusyType);
	DDX_Radio(pDX, IDC_RADIO_BUSYFILL_BLOCK, m_nBusyFill);
	DDX_Text(pDX, IDC_EDIT_GRANULARITY, m_nGranularity);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CWaitProgressDlg, CDialog)
	//{{AFX_MSG_MAP(CWaitProgressDlg)
	ON_BN_CLICKED(IDC_RADIO_BUSYFILL_BLOCK, OnRadioBusyfill)
	ON_BN_CLICKED(IDC_RADIO_BUSYTYPE_PINGPONG, OnRadioBusytype)
	ON_EN_CHANGE(IDC_EDIT_SPEED, OnChangeEditSpeed)
	ON_EN_CHANGE(IDC_EDIT_IBPADDING, OnChangeEditIbpadding)
	ON_EN_CHANGE(IDC_EDIT_NUMBLOCKS, OnChangeEditNumblocks)
	ON_EN_CHANGE(IDC_EDIT_GRANULARITY, OnChangeEditGranularity)
	ON_BN_CLICKED(IDC_RADIO_MODE, OnRadioMode)
	ON_BN_CLICKED(IDC_RADIO2, OnRadioModeProgress)
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
	ON_WM_DESTROY()
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_RADIO_BUSYTYPE_LTR, OnRadioBusytype)
	ON_BN_CLICKED(IDC_RADIO_BUSYFILL_SMOOTH, OnRadioBusyfill)
	ON_BN_CLICKED(IDC_RADIO_BUSYTYPE_RTL, OnRadioBusytype)
	//}}AFX_MSG_MAP
	ON_MESSAGE(CPN_SELENDOK,     OnSelEndOK)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWaitProgressDlg message handlers

BOOL CWaitProgressDlg::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
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

		//
	// Initilialise the BusyProgressCtrl
	m_ctlBusy.SetNumSteps(20);
	m_ctlBusy.SetSpeed(m_nSpeed);
	m_ctlBusy.SetRange(-100, 100);

	// initialise the colour buttons
	m_btnColBEdge.SetColour(m_ctlBusy.GetColBlockEdge());
	m_btnColBFace.SetColour( m_ctlBusy.GetColBlockFace() );
	m_btnColBEdgeHi.SetColour( m_ctlBusy.GetColBlockEdgeHi() );
	m_btnColBFaceHi.SetColour( m_ctlBusy.GetColBlockFaceHi() );
	m_btnColBkg.SetColour( m_ctlBusy.GetColBkg() );
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CWaitProgressDlg::OnRadioBusyfill() 
{
	UpdateData();

	switch ( m_nBusyFill )
	{
	case	0:
		m_ctlBusy.SetBusyFill(BPC_BUSYFILL_BLOCK);
		break;

	case	1:
		m_ctlBusy.SetBusyFill(BPC_BUSYFILL_SMOOTH);
		break;
	}
}

void CWaitProgressDlg::OnRadioBusytype() 
{
	UpdateData();
	
	switch ( m_nBusyType )
	{
	case	0:
		m_ctlBusy.SetBusyType(BPC_BUSY_PINGPONG);
		break;

	case	1:
		m_ctlBusy.SetBusyType(BPC_BUSY_LTR);
		break;

	case	2:
		m_ctlBusy.SetBusyType(BPC_BUSY_RTL);
		break;
	}
}


void CWaitProgressDlg::OnChangeEditSpeed() 
{
	UpdateData();
	if ( m_ctlBusy.GetMode() == BPC_MODE_PROGRESS )
	{
		KillTimer(1);
		SetTimer(1, m_nSpeed, NULL);
	}
	m_ctlBusy.SetSpeed(m_nSpeed);
}

void CWaitProgressDlg::OnChangeEditIbpadding() 
{
	UpdateData();
	
	m_ctlBusy.SetInterBlockPadding(m_nIBPadding);
	m_ctlBusy.Invalidate();
}

void CWaitProgressDlg::OnChangeEditNumblocks() 
{
	UpdateData();
	
	m_ctlBusy.Reset();
	m_ctlBusy.SetNumSteps(m_nNumBlocks);
	m_ctlBusy.Invalidate();	
}

void CWaitProgressDlg::OnChangeEditGranularity() 
{
	UpdateData();
	
	m_ctlBusy.SetGranularity(m_nGranularity);
}

void CWaitProgressDlg::OnRadioMode() 
{
	UpdateData();	

	KillTimer(1);
	m_ctlBusy.SetMode(BPC_MODE_BUSY);
	m_ctlBusy.Reset();

	GetDlgItem(IDC_RADIO_BUSYTYPE_PINGPONG)->EnableWindow(TRUE);
	GetDlgItem(IDC_RADIO_BUSYTYPE_LTR)->EnableWindow(TRUE);
	GetDlgItem(IDC_RADIO_BUSYTYPE_RTL)->EnableWindow(TRUE);
	GetDlgItem(IDC_RADIO_BUSYFILL_BLOCK)->EnableWindow(TRUE);
	GetDlgItem(IDC_RADIO_BUSYFILL_SMOOTH)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_GRANULARITY)->EnableWindow(TRUE);	
}

void CWaitProgressDlg::OnRadioModeProgress() 
{
	if ( m_ctlBusy.IsRunning() )
		OnButtonStart();
	UpdateData();	

	m_ctlBusy.SetMode(BPC_MODE_PROGRESS);
	m_ctlBusy.Reset();

	GetDlgItem(IDC_RADIO_BUSYTYPE_PINGPONG)->EnableWindow(FALSE);
	GetDlgItem(IDC_RADIO_BUSYTYPE_LTR)->EnableWindow(FALSE);
	GetDlgItem(IDC_RADIO_BUSYTYPE_RTL)->EnableWindow(FALSE);
	GetDlgItem(IDC_RADIO_BUSYFILL_BLOCK)->EnableWindow(FALSE);
	GetDlgItem(IDC_RADIO_BUSYFILL_SMOOTH)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_GRANULARITY)->EnableWindow(FALSE);	
	
}

void CWaitProgressDlg::OnButtonStart() 
{
	if ( m_ctlBusy.GetMode() & BPC_MODE_BUSY )
	{
		if ( !m_ctlBusy.IsRunning() )
		{
			if ( m_ctlBusy.GetMode() & BPC_MODE_BUSY)
				m_ctlBusy.Start();
			GetDlgItem(IDC_BUTTON_START)->SetWindowText(_T("Stop"));
		}
		else
		{
			m_ctlBusy.End();
			GetDlgItem(IDC_BUTTON_START)->SetWindowText(_T("Start"));
		}
	}
	else if ( m_ctlBusy.GetMode() & BPC_MODE_PROGRESS )
	{
		CString			strText;

		GetDlgItem(IDC_BUTTON_START)->GetWindowText(strText);
		if ( !strText.CompareNoCase( _T("Start") ) )
		{
			m_ctlBusy.Reset();
			SetTimer(1, m_nSpeed, NULL);
			GetDlgItem(IDC_BUTTON_START)->SetWindowText(_T("Stop"));
		}
		else
		{
			KillTimer(1);
			GetDlgItem(IDC_BUTTON_START)->SetWindowText(_T("Start"));
		}
	}	
}

void CWaitProgressDlg::OnDestroy() 
{
	m_ctlBusy.End();
	
	CDialog::OnDestroy();

}

void CWaitProgressDlg::OnTimer(UINT nIDEvent) 
{
	int				nLower, nUpper;
	int				nCurPos = m_ctlBusy.GetCurPos();

	m_ctlBusy.GetRange(nLower, nUpper);
	if ( nCurPos >= nUpper-nLower)
		m_ctlBusy.SetCurPos(0);
	else
		m_ctlBusy.StepIt();
	
	CDialog::OnTimer(nIDEvent);
}

LONG CWaitProgressDlg::OnSelEndOK(UINT lParam, LONG wParam)
{
	switch(wParam)
	{
	case IDC_BUTTON_COLBKG:
		m_ctlBusy.SetColBkg(m_btnColBkg.GetColour());
		break;
	case IDC_BUTTON_COLBLOCKFACE:
		m_ctlBusy.SetColBlockFace(m_btnColBFace.GetColour());
		break;
	case IDC_BUTTON_COLBLOCKEDGE:
		m_ctlBusy.SetColBlockEdge(m_btnColBEdge.GetColour());
		break;
	case IDC_BUTTON_COLBLOCKFACEHI:
		m_ctlBusy.SetColBlockFaceHi(m_btnColBFaceHi.GetColour());
		break;
	case IDC_BUTTON_COLBLOCKEDGEHI:
		m_ctlBusy.SetColBlockEdgeHi(m_btnColBEdgeHi.GetColour());
		break;
	}

	m_ctlBusy.Invalidate();
	
    return TRUE;
}

⌨️ 快捷键说明

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