MFC总结(12) -- 在mfc中使用线程 更新Progress Control(1)

来源:互联网 发布:cdn网宿和阿里云cdn 编辑:程序博客网 时间:2024/05/22 20:28

实现效果:


1、创建一个mfc工程,并添加Progress Control,将属性中的 Vetical 设置为True (这样Progress Ctrl是竖着 而不是横着),将ID修改为IDC_THRED_PROGRESS。

添加一个Static Text,ID设置为IDC_SHOETEXTSTATIC,Caption设置为0

2、给Progress Control绑定一个变量,m_threadProgressCtrl。

3、在OnInitDialog()   方法中添加一个定时器   SetTimer(1, 200, NULL);

BOOL Cmfc线程Dlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。 //........// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO:  在此添加额外的初始化代码//添加定时器SetTimer(1, 200, NULL);//设置Progress Control//范围m_threadProgressCtrl.SetRange(0, 200);//开始位置m_threadProgressCtrl.SetPos(0);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}

SetTimer(1, 200, NULL);//添加定时器 //设置Progress Control //范围 m_threadProgressCtrl.SetRange(0, 200); //开始位置 m_threadProgressCtrl.SetPos(0); return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}

4、ctrl + shif + x 添加WM_TIME消息处理函数 onTime()

5、添加一个需要线程执行的方法,更新界面

void Cmfc线程Dlg::updatePro(DWORDLONG size){//线程函数实现CString str;       //更新Progressm_threadProgressCtrl.SetPos(size);str.Format(L"%d", size);//给Static Text设置文本内容GetDlgItem(IDC_SHOETEXTSTATIC)->SetWindowText(str);Sleep(500);}

6、在头文件中添加 CWinThread *m_pThread; //线程指针 成员变量


7、编写OnTime方法

void Cmfc线程Dlg::OnTimer(UINT_PTR nIDEvent){// TODO:  在此添加消息处理程序代码和/或调用默认值//一个随机数字DWORDLONG tim = rand() % 80;//启动线程m_pThread = AfxBeginThread(ThreadFunc, (LPVOID)tim); //销毁线程m_pThread->ResumeThread();CDialogEx::OnTimer(nIDEvent);}



8、添加一个线程函数,注意要在类外面

UINT ThreadFunc(LPVOID pParam);//线程函数声明

线程函数实现

UINT  ThreadFunc(LPVOID pParam){DWORDLONG size = (DWORDLONG)pParam;Cmfc线程Dlg* hh = (Cmfc线程Dlg*)AfxGetApp()->m_pMainWnd;hh->updatePro(size);return 0;}

 代码网址

http://download.csdn.net/detail/obuyiseng/9263099

0 0