CProgressCtrl m_bar; m_bar.SetStep(-1); m_bar.SetPos(TIME); m_bar.SetRange(0, TIME);这段代码执行时出现断点错误
时间: 2024-03-28 10:37:52 浏览: 17
这段代码中的错误可能是由于以下原因之一:
1. 没有创建 CProgressCtrl 对象:在使用 CProgressCtrl 对象之前,需要使用 Create 方法创建对象。例如:m_bar.Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 200, 30), pParentWnd, IDC_PROGRESS);
2. 没有设置控件风格:在创建 CProgressCtrl 对象之后,需要设置控件的风格。例如:m_bar.SetRange(0, TIME); m_bar.SetStep(-1); m_bar.ModifyStyle(0, PBS_SMOOTH);
3. 没有设置控件位置和大小:在创建 CProgressCtrl 对象之后,需要设置控件的位置和大小。例如:m_bar.MoveWindow(10, 10, 200, 30);
4. TIME 的值不合法:将 TIME 的值设置为一个合法的整数值。例如:int TIME = 100;
请检查以上几个原因,确定代码中的错误。
相关问题
mfc Progress bar control如何使用
MFC中的进度条控件可以使用CProgressCtrl类来实现。下面是使用MFC的进度条控件的一般步骤:
1. 在对话框资源中添加一个进度条控件。可以在Visual Studio的资源编辑器中拖放一个进度条控件到你的对话框上。
2. 在对话框类的头文件中声明一个成员变量来表示进度条控件。例如,你可以在类的声明中添加如下代码:
```cpp
CProgressCtrl m_progressBar;
```
3. 在对话框类的OnInitDialog()函数中初始化进度条控件。在OnInitDialog()函数中调用CProgressCtrl类的Create()函数来创建和初始化进度条控件。例如,你可以在OnInitDialog()函数中添加如下代码:
```cpp
m_progressBar.Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 200, 30), this, IDC_PROGRESS_BAR);
m_progressBar.SetRange(0, 100); // 设置进度条范围
```
4. 在需要更新进度的地方,调用CProgressCtrl类的SetPos()函数来设置当前进度的位置。例如,你可以在一个按钮的点击事件处理函数中添加如下代码:
```cpp
m_progressBar.SetPos(50); // 设置当前进度位置为50
```
这样,你就可以在MFC应用程序中使用进度条控件来显示和更新进度了。注意,以上代码只是一般示例,请根据你的具体需求进行相应的修改和调整。
mfc解压.7z 文件不使用dll 并显示进度条
要在 MFC 中解压 .7z 文件并显示进度条,你可以使用 7z SDK 中的代码,该代码提供了一些用于处理 7z 文件的函数。在这个过程中,你需要使用 MFC 的 CProgressCtrl 控件来实现进度条的显示。
下面是一个简单的示例代码:
```cpp
#include "7z.h"
#include "7zAlloc.h"
#include "7zBuf.h"
#include "7zCrc.h"
#include "7zFile.h"
#include "7zVersion.h"
#define kBufferSize 8192
void Extract7zFile(CString szFilePath, CString szDestPath, CProgressCtrl* pProgressCtrl)
{
HANDLE hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
CMyComPtr<IInStream> fileStream;
fileStream.Attach(new CInFile(hFile));
NWindows::NFile::NFind::CFileInfo fi;
if (!NWindows::NFile::NFind::FindFile(szFilePath, fi))
{
return;
}
UInt64 fileSize = fi.Size;
pProgressCtrl->SetRange32(0, (int)fileSize);
CArchiveOpenCallback* openCallbackSpec = new CArchiveOpenCallback;
CMyComPtr<IArchiveOpenCallback> openCallback(openCallbackSpec);
openCallbackSpec->PasswordIsDefined = false;
CMyComPtr<IInArchive> archive;
if (CreateObject(CLSID_CFormat7z, &IID_IInArchive, (void**)&archive) != S_OK)
{
return;
}
if (archive->Open(fileStream, &kMaxCheckStartPosition, openCallback) != S_OK)
{
return;
}
UInt32 numItems;
if (archive->GetNumberOfItems(&numItems) != S_OK)
{
return;
}
for (UInt32 i = 0; i < numItems; i++)
{
NWindows::NFile::NFind::CFileInfo fi;
if (!NWindows::NFile::NFind::FindFile(szDestPath, fi))
{
if (CreateDirectory(szDestPath, NULL) != 0)
{
continue;
}
}
pProgressCtrl->SetPos(0);
CArchiveExtractCallback* extractCallbackSpec = new CArchiveExtractCallback;
CMyComPtr<IArchiveExtractCallback> extractCallback(extractCallbackSpec);
extractCallbackSpec->Init(archive, i, pProgressCtrl);
UInt32 testVar = 0;
archive->Extract(&i, 1, false, extractCallback);
extractCallbackSpec->Release();
}
}
class CArchiveExtractCallback :
public IArchiveExtractCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
{
public:
MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
STDMETHOD(SetTotal)(UInt64 /* size */)
{
return S_OK;
}
STDMETHOD(SetCompleted)(const UInt64* completeValue)
{
pProgressCtrl->SetPos((int)*completeValue);
return S_OK;
}
STDMETHOD(CryptoGetTextPassword)(BSTR* password)
{
return E_NOTIMPL;
}
void Init(IInArchive* archive, UInt32 index, CProgressCtrl* progressCtrl)
{
_archive = archive;
_index = index;
pProgressCtrl = progressCtrl;
}
private:
CMyComPtr<IInArchive> _archive;
UInt32 _index;
CProgressCtrl* pProgressCtrl;
};
class CArchiveOpenCallback :
public IArchiveOpenCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
{
public:
MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
STDMETHOD(SetTotal)(const UInt64* files, const UInt64* bytes)
{
return S_OK;
}
STDMETHOD(SetCompleted)(const UInt64* files, const UInt64* bytes)
{
return S_OK;
}
STDMETHOD(CryptoGetTextPassword)(BSTR* password)
{
return E_NOTIMPL;
}
};
```
这个示例代码使用了 7z SDK,因此你需要在项目中添加相关的头文件和库文件。此外,你需要将 Extract7zFile 函数中的 szFilePath 和 szDestPath 参数替换为你要解压缩的 7z 文件路径和目标路径。pProgressCtrl 参数是用于显示进度条的 CProgressCtrl 控件。