急!!!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);

上面这三行就是实现提示条的代码,最后一行实时更新内容,结果导致
窗口里面的其他内容也刷新,出现闪烁!
哪位高手可以指点一下!多谢!!!!!
...全文
423 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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中, 移动了什么控件, 或引起主视图区域无效了?

主视图在重绘时, 是不是全部重绘了? 而不是只绘制无效区域.

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧