关于用户界面线程的使用? 打个比方,我想做这样一件事情:在一个循环里累加一个数,加到100万,同时使用一个进度条来显示进度,使用用户界面线程如何实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CTestdlgDlg::OnInitDialog(){ CDialog::OnInitDialog(); ... ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetRange32(0, 1000); ...}void CTestdlgDlg::OnButton4() { for (int i = 0; i < 1000; i++) { ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetPos(i); ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->UpdateWindow(); } } 老大,我需要线程,在这个过程中能够响应其他的windows消息 UINT MyThread(LPVOID lpParam);void CTestdlgDlg::OnButton4() { ::AfxBeginThread(MyThread, (LPVOID) GetSafeHwnd());}UINT MyThread(LPVOID lpParam){ for (int i = 0; i < 1000; i++) { CDialog* pDlg = (CDialog*) CDialog::FromHandle((HWND) lpParam); ((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i); ((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->UpdateWindow(); } return 0;} 派生一个线程类A(父类为:CWinThread),将你的窗口类作为A的子对象,然后可以在线程中操作((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i); 哦,这样啊。《visual C++技术内幕》里有一个例程,和你说的情况一模一样,好象是在第12章吧。 自己看看吧。 声明:static DWORD WINAPI workProc(LPVOID lpParam);定义:DWORD WINAPI workProc(LPVOID lpParam){...}m_hThread = ::CreateThread(NULL,0,workProc,(LPVOID)&参数,0,&id);// HANDLE m_hThread;// DWORD id = 0; derive your own UI thread class from CWinThread ,and put your process bar UI into CXWinThread::Run(); function ,for more details ,seehttp://www.codeproject.com/threads/usinguithreads.asp 一个乒乓球比赛安排的算法 难题 怎样给shellexecute传递参数 做端口数据嗅探时,为什么只能接受到接受的包 无法截获本地发出的包? WTL如何重绘tabctrl控件 在FormView中摆了些控件,其余地方为绘图区,有没有像Delphi中PaintBox的控件,往它上边画,还是直接往FormView上画? 哪位大哥给一个多线程长连接的代码,或者说说原理。。。。。。。。 一个超难问题 急!!!哪里可以下载得到98DDK的安装程序!!! 如何才能使SDI窗体不能用鼠标随意拉动大小 树视图的问题 新站开张送100 工具条的UI不能UPDATE了
{
CDialog::OnInitDialog();
...
((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetRange32(0, 1000);
...
}void CTestdlgDlg::OnButton4()
{
for (int i = 0; i < 1000; i++)
{
((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetPos(i);
((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->UpdateWindow();
}
}
{
::AfxBeginThread(MyThread, (LPVOID) GetSafeHwnd());
}
UINT MyThread(LPVOID lpParam)
{
for (int i = 0; i < 1000; i++)
{
CDialog* pDlg = (CDialog*) CDialog::FromHandle((HWND) lpParam);
((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i);
((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->UpdateWindow();
} return 0;
}
static DWORD WINAPI workProc(LPVOID lpParam);
定义:
DWORD WINAPI workProc(LPVOID lpParam)
{
...
}
m_hThread = ::CreateThread(NULL,0,workProc,(LPVOID)&参数,0,&id);// HANDLE m_hThread;
// DWORD id = 0;
http://www.codeproject.com/threads/usinguithreads.asp