2023年09月21日 09:06:00
談vc++中的progress控制項的使用
大連捷通電腦技術**** 王淼([email protected])
progress控制項能讓人們感受到乙個應用程式執行的進度,在很多應用程式中都能用到它,但通常只支援在單任務中,我在windows98/nt中文作業系統下,在vc++6.0環境下,利用執行緒編制了乙個非常小巧的應用程式來實現progress控制項的使用。它可以支援多執行緒,使用起來很方便。
以下是這個應用程式的源**:
//progressdialog.h
class cprogressdialog : public cdialog
// construction
public:
cprogressdialog(lpcstr caption, bool
enablecancel=true, cwnd* pparent = null);
// standard constructor
virtual ~cprogressdialog(void);
// dialog data
//;cstatic
m_messagestatic; //程序條標題
cbutton m_cancelbutton; //中止按鈕控鍵
cprogressctrl
m_progressctrl;
//}}afx_data
cstring m_caption;
//對話方塊標題
bool m_enablecancel; //中止按鈕顯示開關
bool m_iscancel; //中止按鈕是否按下開關
handle m_thread;
//執行緒控制代碼
static dword winapi threadproc(cprogressdialog* dlg); //靜態執行緒
void setprogress(int percent) //設定程序位置
void setmessage(lpcstr msg) //設定程序條標題
bool iscancel(void)
virtual dword progressproc()=0;//執行緒過程純虛函式
// overrides
// classwizard generated virtual function overrides
//}afx_virtual
// implementation
protected:
// generated message map functions
//}afx_msg
declare_message_map()
class cmyprogressdialog:public cprogressdialog
virtual dword progressproc(); //繼承過程
// progressdialog.cpp
#include "stdafx.h"
#include "progresstest.h"
#include "progressdialog.h"
#ifdef _debug
#define new debug_new
#undef this_file
static char this_file = __file__;
#endif
cprogressdialog::cprogressdialog(lpcstr caption, bool enablecancel, cwnd* pparent /*=null*/) :
cdialog(cprogressdialog::idd, pparent)
//}afx_data_init
cprogressdialog::~cprogressdialog(void)
if (m_thread) }afx_data_map
begin_message_map(cprogressdialog, cdialog)
//}afx_msg_map
end_message_map()
// cprogressdialog message handlersbool cprogressdialog::oninitdialog()
cdialog::oninitdialog();
// todo: add extra initialization here
m_progressctrl.setrange(0, 100);
m_progressctrl.setpos(0);
setwindowtext(m_caption);
if (!m_enablecancel) {
m_cancelbutton.showwindow(sw_hide);
dword threadid;
m_thread=createthread(null, 0,
(lpthread_start_routine)cprogressdialog::thread
proc,(lpvoid)this,0,&threadid);
return true; // return true unless you set the focus to a control
// exception: ocx property pages should return
false
dword winapi
cprogressdialog::threadproc(cprogressdialog* dlg)
dword ret=dlg-
dlg-
return ret;
void cprogressdialog::oncancel()
// todo: add extra cleanup here
if (m_enablecancel) m_iscancel=true;
void cprogressdialog::onok()
// todo: add extra validation here
waitforsingleobject(m_thread, infinite);
cdialog::onok();
dword cmyprogressdialog::progressproc()
setmessage("progress...");
for (int i=0;i>100;i++) {
if (iscancel()) break;
sleep(100);
setprogress(i);
return 0;
只需在應用progress控制項的地方呼叫cmyprogressdialog類的物件即可。可根據不同的應用程式修改dword cmyprogressdialog::progressproc()這個繼承函式的函式體來適應相應的程式。
談VC 中的Progress控制項的使用
談vc 中的progress控制項的使用 大連捷通電腦技術 王淼 jtone mail.dlptt.ln.cn progress控制項能讓人們感受到乙個應用程式執行的進度,在很多應用程式中都能用到它,但通常只支援在單任務中,我在windows98 nt中文作業系統下,在vc 6.0環境下,利用執行緒...
談VC 中的Progress控制項的使用
談vc 中的progress控制項的使用 大連捷通電腦技術 王淼 jtone mail.dlptt.ln.cn progress控制項能讓人們感受到乙個應用程式執行的進度,在很多應用程式中都能用到它,但通常只支援在單任務中,我在windows98 nt中文作業系統下,在vc 6.0環境下,利用執行緒...
談VC 中的Progress控制項的使用
談vc 中的progress控制項的使用 大連捷通電腦技術 王淼 jtone mail.dlptt.ln.cn progress控制項能讓人們感受到乙個應用程式執行的進度,在很多應用程式中都能用到它,但通常只支援在單任務中,我在windows98 nt中文作業系統下,在vc 6.0環境下,利用執行緒...