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

📄 proccessbardlg.cpp

📁 windows mobile下自绘的进度条
💻 CPP
字号:
/***********************************************************************
* Copyright (C) 2008 卓望数码技术(深圳)有限公司版权所有。
*
* 文件名: ProgressDlg.cpp
* 作者: 周一民       版本: 1.0        日期: 2008-11-27
* 描述: 通用进度显示窗体类
*
* 函数列表:-
*     
*     ...
* 修改记录:  
*     1.  日期:		2008-11-27
*         作者:     周一民
*         修改内容: 创建CProccessbarDlg文件
*     2. ...
***********************************************************************/
// ProgressDlg.cpp : implementation file
//

#include "stdafx.h"
//#include "RMReader.h"
#include "ProccessbarDlg.h"
//#include "CMainDialg.h"




// CProccessbarDlg dialog

IMPLEMENT_DYNAMIC(CProccessbarDlg, CDialog)

DWORD CProccessbarDlg::threadid = 0;
HANDLE CProccessbarDlg::hMyPB = NULL;
int CProccessbarDlg::m_SisEnd = 0;;

/*
CProccessbarDlg::CProccessbarDlg(CWnd* pParent)
: CDialog(CProccessbarDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

CProccessbarDlg::~CProccessbarDlg()
{
}



void CProccessbarDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

DDX_Control(pDX,IDC_PROGRESS1,m_progressDemo);
}


BEGIN_MESSAGE_MAP(CProccessbarDlg, CDialog)

ON_WM_TIMER()
END_MESSAGE_MAP()

//消息处理

BOOL CProccessbarDlg::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

// TODO: 在此添加额外的初始化代码
m_progressbar.SetRange(0, 100);
m_progressbar.SetPos(0);

//m_progressDemo.Start();
SetTimer(1, 50, NULL);

return TRUE;  // return TRUE  unless you set the focus to a control
}

void CProccessbarDlg::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nIDEvent == 1)
{
static	int i=0;
i++;
if(i>100)
i=0;
m_progressbar.SetPos(i);
}

CDialog::OnTimer(nIDEvent);
}


//对外接口
DWORD CProccessbarDlg::Show()
{
DWORD threadid;

HANDLE hMyPB = CreateThread(NULL,
STACK_SIZE_PARAM_IS_A_RESERVATION,
&CProccessbarDlg::ThreadProc,
NULL,
NULL,
&threadid);

if (hMyPB == NULL)
{
return 0;
}

return threadid;
}


DWORD CProccessbarDlg::ThreadProc(LPVOID lpParameter)
{
CProccessbarDlg mProcessbar = new CProccessbarDlg();	
return mProcessbar.DoModal();
}

INT CProccessbarDlg::Hide()
{
//static DWORD threadid;

ExitThread(CProccessbarDlg::threadid);

return 0;
}

*/


void ExitFullScreen(HWND hWnd)
{
	ShowWindow(FindWindow(TEXT("MS_SIPBUTTON"), NULL),SW_SHOW);
	ShowWindow(FindWindow(TEXT("menu_worker"), NULL),SW_SHOW);//隐蔽工具栏
	ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL),SW_SHOW);//隐蔽任务栏
}


//设置窗口全屏显示
void FullScreen(HWND hWnd)
{
	RECT rc;
	SHFullScreen(hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);  
	ShowWindow(FindWindow(TEXT("MS_SIPBUTTON"), NULL),SW_HIDE);
	ShowWindow(FindWindow(TEXT("menu_worker"), NULL),SW_HIDE);//隐蔽工具栏
	ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL),SW_HIDE);//隐蔽任务栏
	HWND hMenuBar = SHFindMenuBar(hWnd);
	SetWindowPos(hMenuBar, 
		NULL,
		-1, -1,
		0, 0,
		SWP_NOZORDER | SWP_NOACTIVATE                    
		);
	SendMessage(hMenuBar, 
		SHCMBM_OVERRIDEKEY, 
		VK_TSOFT1,
		MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
	SendMessage(hMenuBar, 
		SHCMBM_OVERRIDEKEY, 
		VK_TSOFT2,
		MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
	SetRect(&rc, 
		0, 0, 
		GetSystemMetrics(SM_CXSCREEN), 
		GetSystemMetrics(SM_CYSCREEN));
	MoveWindow( hWnd, 
		rc.left, rc.top,
		rc.right, rc.bottom,
		FALSE);  
}






// CProccessbarDlg dialog
CProccessbarDlg::CProccessbarDlg(CWnd* pParent /*=NULL*/)
: CDialog(CProccessbarDlg::IDD, pParent)
{
	//m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	//CProccessbarDlg::threadid = 0;

	CDC dc,dstDC;
	dc.Attach(::GetDC(0));
	m_bkBmp.CreateCompatibleBitmap(&dc, 240,320);
	dstDC.CreateCompatibleDC(&dc);
	CBitmap *pbmp = dstDC.SelectObject(&m_bkBmp);
	BLENDFUNCTION bf;
	bf.BlendOp = AC_SRC_OVER;
	bf.BlendFlags = 0;
	bf.SourceConstantAlpha = 128;
	bf.AlphaFormat = 0;
	::AlphaBlend(dstDC.GetSafeHdc(),0,0,240,320,dc.GetSafeHdc(), 0, 0,240,320,bf);
	//dstDC.BitBlt(0,0,240,320, &dc,0,0,SRCCOPY); 
	//dstDC.FillRect(CRect(BAR_LEFT, BAR_TOP, BAR_RIGHT, BAR_BOTTOM), &brush); 
	dstDC.SelectObject(pbmp);
	dc.Detach();

}


//CProccessbarDlg::~CProccessbarDlg()
//{

//}

void CProccessbarDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Control(pDX,IDC_PROGRESS1,m_progressDemo);
}


BEGIN_MESSAGE_MAP(CProccessbarDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP	
END_MESSAGE_MAP()

// CProccessbarDlg message handlers
BOOL CProccessbarDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	//处理背景透明


	//IImage *pImg = CResPngLoader::CreateImage(IDR_COMMON_GRAYBAR);

	FullScreen(this->GetSafeHwnd());
	this->UpdateWindow(); 

	m_progressDemo.MoveWindow(CRect(BAR_LEFT, BAR_TOP, BAR_RIGHT, BAR_BOTTOM),true);

	m_progressDemo.SetRange(0, 100);
	m_progressDemo.SetPos(0);
	//m_progressDemo.Start();
	SetTimer(1, 50, NULL);

#ifdef WIN32_PLATFORM_WFSP
	if (!m_dlgCommandBar.Create(this) ||
		!m_dlgCommandBar.InsertMenuBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create CommandBar\n");
		return FALSE;      // fail to create
	}
#endif // WIN32_PLATFORM_WFSP
	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CProccessbarDlg::OnSysCommand(UINT nID, LPARAM lParam)
{	CDialog::OnSysCommand(nID, lParam);
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CProccessbarDlg::OnPaint() 
{

	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	// Do not call CWnd::OnPaint() for painting messages
	CDC srcDC;
	srcDC.CreateCompatibleDC(&dc);
	CBitmap *pbmp = srcDC.SelectObject(&m_bkBmp);
	dc.BitBlt(0,0,240,320, &srcDC, 0, 0, SRCCOPY);
	srcDC.SelectObject(pbmp); 

	//int nNum = (m_nPosition * (BAR_RIGHT - BAR_LEFT))/100;
	//CRect r(BAR_LEFT, BAR_TOP,BAR_LEFT + nNum, BAR_BOTTOM);
	//dc.FillRect(r, &m_brBar); 
	/*
	if (IsIconic())
	{
	CPaintDC dc(this); // 用于绘制的设备上下文
	}
	else
	{
	CDialog::OnPaint();
	}
	*/
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CProccessbarDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CProccessbarDlg::OnTimer(UINT nIDEvent)
{

	if (CProccessbarDlg::m_SisEnd == 1)
	{
		m_progressDemo.SetPos(100);
		CProccessbarDlg::m_SisEnd = 2;
		return;
	}
	else if (CProccessbarDlg::m_SisEnd == 2)
	{
		CProccessbarDlg::m_SisEnd = 0;
		OnOK();
		return;
	}

	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(nIDEvent == 1)
	{
		static	int i=0;
		i++;
		if(i>100)
			i=0;
		m_progressDemo.SetPos(i);
	}

	CDialog::OnTimer(nIDEvent);
}


DWORD CProccessbarDlg::Show()
{
	DWORD threadid;

	CProccessbarDlg::m_SisEnd = 0;

	CProccessbarDlg::hMyPB = CreateThread(NULL,
		400,
		&CProccessbarDlg::ThreadProc,
		NULL,
		NULL,
		&threadid);

	if (hMyPB == NULL)
	{
		return 0;
	}

	return threadid;
}


DWORD CProccessbarDlg::ThreadProc(LPVOID lpParameter)
{
	CProccessbarDlg mProcessbar = new CProccessbarDlg();	
	return mProcessbar.DoModal();
}

INT CProccessbarDlg::Hide()
{
	//static DWORD threadid;

	//m_progressDemo.SetPos(100);

	CProccessbarDlg::m_SisEnd = 1;

	//ExitThread(CProccessbarDlg::threadid);

	WaitForSingleObject(CProccessbarDlg::hMyPB,500);

	return 0;
}

//添加的代码 弃用
INT CProccessbarDlg::ShowDialog(CWnd* pParent)
{
	//开线程进行显示
	//mParent = pParent;

	//CWnd* mParent = (CWnd*)lpParameter;
	//创建窗体
	CProccessbarDlg * pWnd = new CProccessbarDlg();
	if (!pWnd->Create(IDD_PROCCESSBAR_DIALOG,pParent))
	{
		return -1;
	}
	//初始化
	pWnd->m_nEndDialog = -1;
	//显示
	pWnd->ShowWindow(SW_SHOW);

	//创建消息循环
	MSG msg;
	//判断消息窗体是否已关闭
	while (pWnd->m_nEndDialog == -1 && GetMessage(&msg, NULL, 0, 0)) 
	{
		//判断窗体是否为当前活动窗体
		if (::GetActiveWindow() != pWnd->GetSafeHwnd())
		{
			pWnd->SetFocus();
			continue;
		}
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	//设置返回值
	INT nRet = pWnd->m_nEndDialog;
	//是否窗体
	delete pWnd;
	//返回
	return nRet;
}


#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CProccessbarDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{

}
#endif

⌨️ 快捷键说明

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