怎样使用CProgressCtrl显示文件拷贝的进度? CopyFile从硬盘向U盘拷文件,想用CProgressCtrl显示拷贝的进度,请达人赐教,最好有代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CProgressCtrl m_progress;先得到文件总数n,然后m_progress.SetRange(0,n);m_progress.SetStep(1);m_progress.SetPos(0);然后创建线程复制文件,每复制一个,给主窗口发个自定义消息WM_COPYED,收到消息后:m_progress.StepIt(); 我好像已经在另一版回复过你的这个问题了哦!用以下两个函数:BOOL CopyFileEx(LPCTSTR lpExistingFileName, // name of existing fileLPCTSTR lpNewFileName, // name of new fileLPPROGRESS_ROUTINE lpProgressRoutine, // callback functionLPVOID lpData, // callback parameterLPBOOL pbCancel, // cancel statusDWORD dwCopyFlags // copy options);DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize, // file sizeLARGE_INTEGER TotalBytesTransferred, // bytes transferredLARGE_INTEGER StreamSize, // bytes in streamLARGE_INTEGER StreamBytesTransferred, // bytes transferred for streamDWORD dwStreamNumber, // current streamDWORD dwCallbackReason, // callback reasonHANDLE hSourceFile, // handle to source fileHANDLE hDestinationFile, // handle to destination fileLPVOID lpData // from CopyFileEx);比如DWORD CALLBACK MyCopyProgressRoutine(LARGE_INTEGER TotalFileSize, // file sizeLARGE_INTEGER TotalBytesTransferred, // bytes transferredLARGE_INTEGER StreamSize, // bytes in streamLARGE_INTEGER StreamBytesTransferred, // bytes transferred for streamDWORD dwStreamNumber, // current streamDWORD dwCallbackReason, // callback reasonHANDLE hSourceFile, // handle to source fileHANDLE hDestinationFile, // handle to destination fileLPVOID lpData // from CopyFileEx){ CDialogTest* ptr = (CDialogTest*)lpData; // do something with pointer, e.g. ptr->m_Progressbar.Pos blahblah DWORD percent = TotalBytesTransferred*100/TotalFileSize; return TRUE;}BOOL CDialogTest::Copy(CString from, CString to){ BOOL cancel; return CopyFileEx( from, to, (LPPROGRESS_ROUTINE)MyCopyProgressRoutine, (this)this, &cancel, FALSE);} 继承CDialog做了个对话框,如何方便的放到其他工程里面用? 棘手的问题,DirectShow! 一个EXE文件运行时需要知道自身所在的路径,得到该路径的函数是什么? 自定义生成文件 请问哪里有通过代理服务器发邮件的源代码?确认即给分! 关于共享内存 我怎么去掉搜索栏的自动添加以前的内容?例如,我在搜狐的搜索引擎输入“章”,在这以前曾输入“章子怡”,现在自动添加了后面的“子怡” 怎样删除CListBox中的ITEM, 服务器线程访问数据库如何同步? 关于实时监测 进程状态的问题 关于窗口资源释放的问题 如何将xml文件导入excel?
先得到文件总数n,然后m_progress.SetRange(0,n);
m_progress.SetStep(1);
m_progress.SetPos(0);然后创建线程复制文件,每复制一个,给主窗口发个自定义消息WM_COPYED,收到消息后:
m_progress.StepIt();
BOOL CopyFileEx(LPCTSTR lpExistingFileName, // name of existing file
LPCTSTR lpNewFileName, // name of new file
LPPROGRESS_ROUTINE lpProgressRoutine, // callback function
LPVOID lpData, // callback parameter
LPBOOL pbCancel, // cancel status
DWORD dwCopyFlags // copy options
);DWORD CALLBACK CopyProgressRoutine(
LARGE_INTEGER TotalFileSize, // file size
LARGE_INTEGER TotalBytesTransferred, // bytes transferred
LARGE_INTEGER StreamSize, // bytes in stream
LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream
DWORD dwStreamNumber, // current stream
DWORD dwCallbackReason, // callback reason
HANDLE hSourceFile, // handle to source file
HANDLE hDestinationFile, // handle to destination file
LPVOID lpData // from CopyFileEx
);比如
DWORD CALLBACK MyCopyProgressRoutine(LARGE_INTEGER TotalFileSize, // file size
LARGE_INTEGER TotalBytesTransferred, // bytes transferred
LARGE_INTEGER StreamSize, // bytes in stream
LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream
DWORD dwStreamNumber, // current stream
DWORD dwCallbackReason, // callback reason
HANDLE hSourceFile, // handle to source file
HANDLE hDestinationFile, // handle to destination file
LPVOID lpData // from CopyFileEx
)
{
CDialogTest* ptr = (CDialogTest*)lpData;
// do something with pointer, e.g. ptr->m_Progressbar.Pos blahblah DWORD percent = TotalBytesTransferred*100/TotalFileSize;
return TRUE;
}BOOL CDialogTest::Copy(CString from, CString to)
{
BOOL cancel;
return CopyFileEx( from, to, (LPPROGRESS_ROUTINE)MyCopyProgressRoutine, (this)this, &cancel, FALSE);
}