Winapi 在win 32应用程序中使用线程显示progressbar!
在我的应用程序中,我有一个简单的模块,我将读取一些需要执行的过程的文件 几秒钟..所以我想在文件进行时显示一个进度条(使用工作线程)。我创建了一个线程(如下所示的代码),还设计了一个带有进度控制的对话框窗口。我使用下面的函数MyThreadFunction来显示进度条,但它只显示一次,然后消失,我不知道如何使它工作。我尽了最大的努力,尽管事实上,我是新的线程Winapi 在win 32应用程序中使用线程显示progressbar!,winapi,multithreading,progress-bar,Winapi,Multithreading,Progress Bar,在我的应用程序中,我有一个简单的模块,我将读取一些需要执行的过程的文件 几秒钟..所以我想在文件进行时显示一个进度条(使用工作线程)。我创建了一个线程(如下所示的代码),还设计了一个带有进度控制的对话框窗口。我使用下面的函数MyThreadFunction来显示进度条,但它只显示一次,然后消失,我不知道如何使它工作。我尽了最大的努力,尽管事实上,我是新的线程 reading files void ReadMyFiles() { for(int i = 0; i
reading files
void ReadMyFiles()
{
for(int i = 0; i < fileCount ; fileCount++)
{
CWinThread* myThread = AfxBeginThread((AFX_THREADPROC)MyThreadFunction,NULL);
tempState = *(checkState + index);
if(tempCheckState == NOCHECKBOX)
{
//my operations
}
else//CHECKED or UNCHECKED
{
//myoperation
}
myThread->PostThreadMessage(WM_QUIT,NULL,NULL);
}
}
thread functions
UINT MyThreadFunction(LPARAM lparam)
{
HWND dialogWnd = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
600,300,280,120,NULL,NULL,NULL,NULL);
HWND pBarWnd = CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE|PBS_MARQUEE,40,20,200,20,
dialogWnd,(HMENU)IDD_PROGRESS,NULL,NULL);
MSG msg;
PostMessage( pBarWnd, PBM_SETRANGE, 0, MAKELPARAM( 0, 100 ) );
PostMessage(pBarWnd,PBM_SETPOS,0,0);
while(PeekMessage(&msg,NULL,NULL,NULL,PM_NOREMOVE))
{
if(msg.message == WM_QUIT)
{
DestroyWindow(dialogWnd);
return 1;
}
AfxGetThread()->PumpMessage();
Sleep(40);
}
return 1;
}
读取文件
void ReadMyFiles()
{
对于(int i=0;iPostThreadMessage(WM_QUIT,NULL,NULL);
}
}
线程函数
UINT MyThreadFunction(LPARAM LPARAM)
{
HWND dialogWnd=CreateWindowEx(0,WC_对话框,L“处理…”),WS_重叠窗口可见,
600300280120,空,空,空,空);
HWND pBarWnd=CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD | WS_VISIBLE | PBS_MARQUEE,40,20200,20,
dialogWnd,(HMENU)IDD_进度,NULL,NULL);
味精;
PostMessage(pBarWnd,PBM_SETRANGE,0,MAKELPARAM(01100));
PostMessage(pBarWnd,PBM_SETPOS,0,0);
while(peek消息(&msg,NULL,NULL,NULL,PM_-NOREMOVE))
{
如果(msg.message==WM\u退出)
{
销毁窗口(dialogWnd);
返回1;
}
AfxGetThread()->PumpMessage();
睡眠(40);
}
返回1;
}
是否确实要为每个文件创建新线程和进度条?在for()循环外部创建线程
但这不是正确的方法,你的主用户界面还是死气沉沉的。几秒钟后,Windows将在标题栏中显示“无响应”的重影中打开主窗口。您希望使用工作线程执行文件操作,主线程使用对话框显示进度条,该对话框只能在工作线程使用PostMessage()指示完成时关闭。您能否至少给出一个示例代码或一些我们能够清楚理解您要做什么的内容?