談VC 中的Progress控制項的使用

2021-04-16 11:55:04 字數 3427 閱讀 9049

談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->progressproc();

dlg->postmessage(wm_command, idok);

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控制項的使用

2001年09月21日 09 06 00 談vc 中的progress控制項的使用 大連捷通電腦技術 王淼 jtone mail.dlptt.ln.cn progress控制項能讓人們感受到乙個應用程式執行的進度,在很多應用程式中都能用到它,但通常只支援在單任務中,我在windows98 nt中文作...

談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環境下,利用執行緒...