急!!!MFC CToolTipCtrl控件的内容刷新导致窗口闪烁

atplovedna 2010-11-24 10:55:01
在前面定义了一个CToolTipCtrl m_tool;

在鼠标移动的响应函数里:OnMouseMove(UINT nFlags, CPoint point) :
CString str;

str.Format("%.6f , %.6f",(point.x-iXstart)*10/50,(waveOriginY+((iYend-point.y)*4)/50));

m_tool.UpdateTipText(str,this);

上面这三行就是实现提示条的代码,最后一行实时更新内容,结果导致
窗口里面的其他内容也刷新,出现闪烁!
哪位高手可以指点一下!多谢!!!!!
...全文
292 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
atplovedna 2010-11-30
试过了,每次重创建是不行的
回复
muzizongheng 2010-11-30
[Quote=引用 8 楼 atplovedna 的回复:]
谢谢木子纵横!初始化在OnInitialUpdate()里,下面是显示提示条的代码,if判断区间然后显示当前鼠标位置,else里是当出了所要求的区间就立刻清除显示内容,能具体指教一下吗?

if(point.x>=iXstart&&point.x<=iXend&&point.y>=iYstart&&poi……
[/Quote]

我的意思不是说在InitialUpdate只初始化一次, 而是说在这个代码的上面每次都create一次,也就是每次都初始化创建一次。 这样就不会有闪烁的问题了。
回复
LZQGdut 2010-11-29
添加消息响应 WM_ERASEBKGND,在响应函数内部返回TRUE,试试行不……
回复
atplovedna 2010-11-29
谢谢木子纵横!初始化在OnInitialUpdate()里,下面是显示提示条的代码,if判断区间然后显示当前鼠标位置,else里是当出了所要求的区间就立刻清除显示内容,能具体指教一下吗?

if(point.x>=iXstart&&point.x<=iXend&&point.y>=iYstart&&point.y<=iYend)
{
CString str;
str.Format("%.6f , %.6f",point.x,point.y);

m_tool.SetDelayTime(0);
m_tool.UpdateTipText(str,this);

}
else
{
m_tool.UpdateTipText("",this);
}
回复
muzizongheng 2010-11-25

if (m_ToolTip.m_hWnd == NULL)
{
// Create ToolTip control
m_ToolTip.Create(this);
// Create inactive
m_ToolTip.Activate(FALSE);

m_ToolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);
m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, SHRT_MAX);
m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 100);
m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 500);
}
回复
muzizongheng 2010-11-25
你在OnMouseMove里 不用Update, 把以前的销毁掉, 重新创建个, 然后给tooltip的text赋值。
回复
atplovedna 2010-11-25
可是要求就是跟随着鼠标的移动显示提示条,必须的OnMouseMove里实现啊,还有别的方法吗?
回复
muzizongheng 2010-11-24
不要update, 在你改变值的地方把以前的Tooltip销毁掉, 重新create一个。
回复
xzj3270116 2010-11-24
我没用过 CToolTipCtrl ,但我觉得你在OnMouseMove事件里进行文本的更新是不妥的,因为ToolTip的大小与文字的多少是有关系的,你每更新一次它都要重绘一次,而OnMouseMove事件一个调用频率非常高的事件,所以建义你不要在这个整件里更新它。 进来看看
回复
Michael_g 2010-11-24
我没用过 CToolTipCtrl ,但我觉得你在OnMouseMove事件里进行文本的更新是不妥的,因为ToolTip的大小与文字的多少是有关系的,你每更新一次它都要重绘一次,而OnMouseMove事件一个调用频率非常高的事件,所以建义你不要在这个整件里更新它。
回复
xhjbeidoulong 2010-11-24
其它地方闪烁, 应该和你的重绘相关;

是不是你在mousemove中, 移动了什么控件, 或引起主视图区域无效了?

主视图在重绘时, 是不是全部重绘了? 而不是只绘制无效区域.
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2010-11-24 10:55
社区公告
暂无公告