首先需要加入多线程的机制,因为程序一边在下载文件,一边在显示进度条,单线程的方式肯定不行,所以我用到了wxTimer来实现,在downloadMain.h 中定义了一个wxTimer,并做了事件申明.
DECLARE_EVENT_TABLE()
#ifndef DOWNLOADMAIN_H
#define DOWNLOADMAIN_H
#include "downloadApp.h"
#include
#include "GUIDialog.h"
class downloadDialog: public GUIDialog
{
public:
downloadDialog(wxDialog *dlg);
~downloadDialog();
void OnTimer(wxTimerEvent& event);
private:
virtual void OnClose(wxCloseEvent& event);
virtual void OnQuit(wxCommandEvent& event);
virtual void OnAbout(wxCommandEvent& event);
void downloadfile();
wxTimer* m_timerdown;
DECLARE_EVENT_TABLE()
};
#endif // DOWNLOADMAIN_H
下面是主程序的代码.
#ifdef WX_PRECOMP
#include "wx_pch.h"
#endif
#ifdef __BORLANDC__
#pragma hdrstop
#endif //__BORLANDC__
#include "downloadMain.h"
#include
#include
#include
#include "update.h"
#include
#include
#define TIMER_ID 22222
//事件监听声明
BEGIN_EVENT_TABLE(downloadDialog, GUIDialog)
EVT_TIMER(TIMER_ID, downloadDialog::OnTimer)
END_EVENT_TABLE()
enum wxbuildinfoformat
{
short_f, long_f
};
wxString wxbuildinfo(wxbuildinfoformat format)
{
wxString wxbuild(wxVERSION_STRING);
if (format == long_f )
{
#if defined(__WXMSW__)
wxbuild << _T("-Windows");
#elif defined(__WXMAC__)
wxbuild << _T("-Mac");
#elif defined(__UNIX__)
wxbuild << _T("-Linux");
#endif
#if wxUSE_UNICODE
wxbuild << _T("-Unicode build");
#else
wxbuild << _T("-ANSI build");
#endif // wxUSE_UNICODE
}
return wxbuild;
}
//声明一个文件结构体
struct FtpFile
{
char *filename;
FILE *stream;
};
downloadDialog::downloadDialog(wxDialog *dlg)
: GUIDialog(dlg)
{
//创建一个定时器,制定TIMER_ID
m_timerdown = new wxTimer(this, TIMER_ID);
//定时器开始运行,这里会自动执行OnTimer函数
m_timerdown->Start(100);
}
downloadDialog::~downloadDialog()
{
}