我正在尝试在我的进程正在进行时显示进度条...在我的应用程序中将出现我需要读取文件并操作它们的情况(这需要一些时间才能完成)..想要显示在此操作期间的进度条...我正在调用的特定功能是赢32 ...所以如果你检查下面的代码...我能够显示进度条但它没有显示任何进展......实际上它没有做任何进一步的过程...请帮助我......提前谢谢
//my function
int Myfunction(....)
{
MSG msg;
HWND dialog = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
600,300,280,120,NULL,NULL,NULL,NULL);
HWND pBar = CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE,40,20,200, 20,
dialog,(HMENU)IDD_PROGRESS,NULL,NULL);
SendMessage(pBar,PBM_SETRANGE,0,MAKELPARAM(0,noOfFile));
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
Dispatch(&message);
}
HANDLE getHandle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SetFilesForOperation(...),
NULL,NULL,0);
}
LPARAM SetFilesForOperation(...)
{
for(int index = 0;index < noOfFiles; index++)
{
*checkstate = *(checkState + index);
if(*checkstate == -1)
{
*(getFiles+i) = new TCHAR[MAX_PATH];
wcscpy(*(getFiles+i),*(dataFiles +index));
i++;
}
else
{
(*tempDataFiles)->Add(*(dataFiles+index));
*(checkState + localIndex) = *(checkState + index);
localIndex++;
}
PostMessage(pBar,PBM_SETPOS,(WPARAM)index,0);
}
}
答案 0 :(得分:2)
我怀疑问题是你在你的应用程序退出后创建了线程 - 如果你在消息泵上面调用CreateThread它可能会更好。
答案 1 :(得分:-3)
我更喜欢在MFC上使用QT。以下是我将如何使用它来回答您的问题:
使用表单设计器创建一个对话框,并使用AfxBeginThread(someFunc,param)创建一个线程。
在someFunc中,使用SendMessage告诉对话框有关进度的信息。