VC++中的Progress控件如何使用

VC++中的Progress控件如何使用,第1张

VC++中的Progress控件如何使用,第2张

进度控制可以让人感受到一个应用程序的进度,它可以用在很多应用程序中。但通常只支持在单个任务中使用进度控制,在Windows98/NT中文操作系统和VC++6.0环境下。一个很小的应用程序是用线程编译的。它可以支持多线程,使用起来非常方便。

下面是这个应用程序的源代码:

//ProgressDialog.h

类CProgressDialog:公共CDialog

{

//构造

公共:

CProgressDialog(LPCSTR标题,BOOL

enableCancel=TRUE,CWnd * p parent = NULL);

//标准构造函数

virtual ~ CProgressDialog(void);

//对话数据

//{{AFX_DATA(CProgressDialog)

枚举{ IDD = IDD _ PROGRESS _ DIALOG };

CStatic

m _ MessageStatic//进度栏的标题

CButton m _ CancelButton//停止按钮控制键

条控件

m _ ProgressCtrl

//}}AFX_DATA

CString m _ Caption

//对话框标题

BOOL m _ EnableCancel//停止按钮显示开关

BOOL m _ IsCancel//停止按钮是否按下开关。

句柄m _ Thread

//线程句柄

静态DWORD WINAPI thread proc(CProgressDialog * DLG);//静态线程

Void SetProgress(int percent) //设置进程位置

{ m_ProgressCtrl。SetPos(百分比);}

Void SetMessage(LPCSTR msg) //设置进程栏的标题。

{ m_MessageStatic。SetWindowText(msg);}

布尔取消(无效)

{ return m _ IsCancel}

虚拟DWORD progress proc()= 0;//线程进程的纯虚函数

//覆盖

// ClassWizard生成的虚函数重写

//{ { AFX _ VIRTUAL(CProgressDialog)

受保护:

虚拟void DoDataExchange(CDATA exchange * pDX);

// DDX/DDV支持

//}}AFX_VIRTUAL

//实现

受保护:

//生成的消息映射函数

//{{AFX_MSG(CProgressDialog)

虚拟BOOL OnInitDialog();

虚拟void on cancel();

虚拟void OnOK();

//}}AFX_MSG

声明消息映射()

};

类CMyProgressDialog:public CProgressDialog {

公共:

CMyProgressDialog(LPCSTR标题):CProgressDialog(标题){}

虚拟DWORD progress proc();//继承过程

};

// ProgressDialog.cpp

#包含" stdafx.h "

#包含" ProgressTest.h "

#包含" ProgressDialog.h "

#ifdef _DEBUG

#定义新的DEBUG_NEW

#undef THIS_FILE

static char THIS _ FILE[]= _ _ FILE _ _;

#endif

CProgressDialog::CProgressDialog(LPCSTR标题,BOOL enableCancel,CWnd* pParent /*=NULL*/):

CDialog(CProgressDialog::IDD,pParent)

{

//{ { AFX _ DATA _ INIT(CProgressDialog)

m _ Caption =标题;

m _ EnableCancel = enableCancel

m _ IsCancel = FALSE

m _ Thread = NULL

//}}AFX_DATA_INIT

}

CProgressDialog::~ CProgressDialog(void)

{

if (m_Thread) {

close handle(m _ Thread);

}}

空的

CProgressDialog::DoDataExchange(CDATA exchange * pDX)

{ CDialog::DoDataExchange(pDX);

//{ { AFX _ DATA _ MAP(CProgressDialog)

DDX _ Control(pDX IDC _ MESSAGE _ STATIC,m _ MESSAGE STATIC);

DDX_Control(pDX,IDCANCEL,m _ cancel button);

DDX_Control(pDX,IDC_PROGRESS,m _ PROGRESS ctrl);

//}}AFX_DATA_MAP

}

BEGIN _ MESSAGE _ MAP(CProgressDialog,CDialog)

//{ { AFX _ MSG _ MAP(CProgressDialog)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

// CProgressDialog消息处理程序bool CProgressDialog::OnInitDialog()

{

CDialog::OnInitDialog();

// TODO:在此添加额外的初始化

m_ProgressCtrl。SetRange(0,100);

m_ProgressCtrl。SetPos(0);

SetWindowText(m _ Caption);

如果(!m_EnableCancel) {

m _取消按钮。ShowWindow(SW _ HIDE);

}

DWORD threadID

m_Thread=CreateThread(NULL,0,

(LP Thread _ START _ ROUTINE)CProgressDialog::Thread

Proc,(LPVOID)this,0,& threadID);

返回TRUE//除非将焦点设置到控件上,否则返回TRUE

//异常:OCX属性页应该返回

错误的

}

DWORD WINAPI

CProgressDialog::thread proc(CProgressDialog * DLG)

{ DWORD ret = DLG-> progress proc();

dlg->PostMessage(WM_COMMAND,IDOK);

返回ret

}

void CProgressDialog::OnCancel()

{

// TODO:在此处添加额外的清理

if(m _ enable cancel)m _ is cancel = TRUE;

}

void CProgressDialog::OnOK()

{

// TODO:在此添加额外的验证

WaitForSingleObject(m_Thread,INFINITE);

CDialog::OnOK();

} DWORD CMyProgressDialog::progress proc()

{SetMessage("进度...");

for(int I = 0;i if (IsCancel())中断;

睡眠(100);

SetProgress(一);

}

返回0;

}


只需调用应用进度控件的CMyProgressDialog类的对象即可。根据不同的应用,可以修改DWORD CMYProgressDialog::progress proc()的函数体,以适合相应的程序。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VC++中的Progress控件如何使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情