一个关于MFC在状态栏显示时间的问题......(基于单文档视图工程)--(VC++ 6.0)

1.在ID符号表中添加ID为:IDS_TIMER,staticUINTindicators[]={ID_SEPARATOR,//statuslineindicatorID... 1.在ID符号表中添加ID为:IDS_TIMER,
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
IDS_TIMER,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
2.在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)添加定时器:
SetTimer(1,1000,NULL);
3.在CMainFrame类中添加成员函数SetTime()//任意访问权限

void CMainFrame::SetTime()
{
CTime curTime=CTime::GetCurrentTime();
CString time=curTime.Format("%H:%M:%S");
CWindowDC dc(this);//Or CLientDC/CWindowDC/CPaintDC
CSize sz=dc.GetTextExtent(time);
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,time);
}

4.相应定时器消息WM_TIMER,并在该相应超时消息中调用SetTime()函数,

void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
SetTime();
CFrameWnd::OnTimer(nIDEvent);
}

请问一个问题:当程序运行的时候应该可以显示时间,但是就在时间一直在走的时候我拖动任意一个工具栏,一直拖着不放,那时间就被定住了,这样的问题用多线程应该可以解决,请问思路怎么样?怎么样在一个线程(非主线程)里面响应定时器达到当我拖动工具栏的时候时间依旧能走动呢?
展开
 我来答
匿名用户
2012-11-14
展开全部
如果你是用VC6.0的话,多线程也不好解决,得把工具栏窗口放到另一个线程里。这个问题产生的原因在于VC6.0产生的MFC程序只有一个线程,因此所有的窗口的消息处理橘芦迅都在一个线程里,但是倘若要同时让两个窗口都各自响应自己的消息,那么它们各自的处理程序就不能在同哗腊一线程里。圆此当鼠标拖着不放的时候,只让工具栏的窗口工作,主窗口被阻塞就算有消息也不能处理。在VS2010中,MFC提供了5个线程,没有出现这种情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
推荐于2021-02-11 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2396万
展开全部
你这应该不是多线程的问题,而且多线程也不一定租烂瞎能很好的解决你的问题。你的程序只有在执行到OnTimer时时间才会显示,那么你的窗口弊空从后台到前台的瞬间应该也是没有时间显示的。所以你要处理的是窗口重绘时的时间显示问题。你只需要重写(或响应 WM_PAINT,注意是CMainFrame的)OnPaint,在历咐调用默认方法后加上你的SetTime函数。
追问
按照你的思路不行,我也做个了测试,拖着工具栏不放的时候并没有响应WM_PAINT消息,只有拖着拖着在放开工具栏的那一瞬间才响应一次啊
追答
我把问题想的简单了。参考下面那篇文章吧。正确思路是你找到工具栏拖动的消息响应或事件函数,在里面SetTime

参考资料: http://blog.csdn.net/water_lwj/article/details/7279594

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友18f06dd72
2012-11-22
知道答主
回答量:70
采纳率:0%
帮助的人:26.1万
展开全部
不要用世闭尺CMainFrame的OnTimer,而要态敬用CStatusBar的SetTimer()
这个SetTimer需要指定一个OnTimer()的响应函数就搜高可以更新时间了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式