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