设为首页 加入收藏

TOP

滚动条控件(模式对话框+后台线程处理) (三)
2014-11-23 20:17:47 】 浏览:645
Tags:滚动 控件 模式 对话 后台 线程 处理
essBar::OnInitDialog()
{
CDialog::OnInitDialog();
m_TextColor = RGB(255,0,0);
m_hThread = NULL;
m_threadID = 0;
if (NULL == ob)
{
TRACE("观察者设置失败");
return FALSE;
}
m_hThread = (HANDLE)_beginthreadex(NULL,0,ThreadProc,(void*)this,0,&m_threadID);
if (NULL == m_hThread)
{
TRACE("创建线程失败");
OnOK();
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDlgProcessBar::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message==WM_KEYDOWN && (pMsg->wParam==VK_RETURN ||
pMsg->wParam==VK_ESCAPE || pMsg->wParam==VK_SPACE))
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CDlgProcessBar::OnOK()
{
// TODO: Add your specialized code here and/or call the base class
if (NULL != m_hThread)
{
WaitForSingleObject(m_hThread,INFINITE);
m_hThread = NULL;
}
ob = NULL;
CDialog::OnOK();
}
如上源代码,模式对话框会接管主线程的消息处理过程,由于对话框本身会相应Enter、Esc按键的,所以这里将这两个按键屏蔽掉,否则会出现异常。同时在实际的测试中,发现使用空格键也会造成异常,而且空格键的消息ID是32,然而响应的事件确实IDCANCEL(ID为2)的消息异常。让我甚是不得其解??????(有大神了解的麻烦给我讲讲)。刚开始我采用的是IDCANCEL消息处理销毁对话框,最后发现出现异常,随之最后选择了IDOK来处理。不过这里也可以用户自定义消息来处理该过程。

本类的使用就是,首先拥有个观察者对象,继承本例提供的CObserver类,在该类中重载CallbackFunc函数,所有的耗时操作都在该函数体中执行。

在进度条对话框类中,如上源码,只需要在ThreadProc中调用该观察者方法CallbackFunc,便在后台进程中执行耗时操作。同时用户可以使用进度条对话框对象的SetProcessBar方法设置进度条的运行进度。同时,设置SetNotice可以提示用户实时更新显示提示信息。

上个图以看效果:

摘自 meiyuli的专栏

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在VC中动态加载ODBC的方法 下一篇VC各种链接错的解决办法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目