www.gusucode.com > 一个VC++语法分析模块程序实例源码程序 > 一个VC++语法分析模块程序实例/CompileSys/CompileSys/IDE/ProgressStatusBar.cpp

    // PktStatusBar.cpp : implementation file
// Download: http://www.codesc.net

#include "stdafx.h"
#include "ProgressStatusBar.h"

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

/////////////////////////////////////////////////////////////////////////////
// CProgressStatusBar

CProgressStatusBar::CProgressStatusBar()
{
	m_clrBk=RGB(0xE6,0xE6,0xFA);//	_T("淡紫色")	},
	m_clrEnd=RGB(0x00,0x93,0x00);//	_T("绿色")		},
	m_clrText=RGB(0x00,0x00,0x00);//	_T("黑色")		},
	m_clrStart=RGB(0xFF,0xFF,0x00);//	_T("黄色")		},
	m_range = 1000;
	bIsStop=false;
	m_hThread=NULL;
}

CProgressStatusBar::~CProgressStatusBar()
{
}


BEGIN_MESSAGE_MAP(CProgressStatusBar, CStatusBar)
	//{{AFX_MSG_MAP(CProgressStatusBar)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProgressStatusBar message handlers

UINT RunProc(LPVOID pParam)
{
	CProgressStatusBar* m_wndStatusBar=(CProgressStatusBar*)pParam;

	m_wndStatusBar->m_ctlProgress.SetRange(0,m_wndStatusBar->m_range);
	m_wndStatusBar->m_ctlProgress.SetStartColor(m_wndStatusBar->m_clrStart);
	m_wndStatusBar->m_ctlProgress.SetEndColor(m_wndStatusBar->m_clrEnd);
	m_wndStatusBar->m_ctlProgress.SetBkColor(m_wndStatusBar->m_clrBk);

	while(!m_wndStatusBar->bIsStop)
	{
		for(int i=0;i<=m_wndStatusBar->m_range;i++)
		{
			m_wndStatusBar->m_ctlProgress.SetPos(i);
		}
		
		for(i=0;i<=m_wndStatusBar->m_range;i++)
		{
			m_wndStatusBar->m_ctlProgress.SetPos(m_wndStatusBar->m_range-i);
		}
	}

	return 0;
}


int CProgressStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CStatusBar::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP;

	if(!m_ctlProgress.Create(dwStyle,CRect(100,0,350,18),//left,bottom,right,top
		this,IDC_PROGRESS))
	{
		TRACE(_T("Failed to create output window.\n"));
		return -1;
	}
	return 0;
}

bool CProgressStatusBar::StartRun()
{
	//创建线程函数
	m_hThread=::AfxBeginThread(RunProc,this);
	bIsStop=false;

	return true;
}

void CProgressStatusBar::StopRun()
{
	bIsStop =true;		
}


void CProgressStatusBar::SetViewProgress(bool bIsView)
{
	m_ctlProgress.ShowWindow(bIsView);
}