none
[MFC]请问怎么才能控制ToolTip对话框不在窗口最上层显示 RRS feed

  • 问题

  • 我把我的应用程序窗口设置成总在最上层显示wndTopMost,
    可是当某个ToolTip(比如鼠标移到[开始]菜单时显示的[点击这里开始])被显示出来的时候,总是会覆盖在我的应用程序窗口的上面,
    有什么方法能控制它显示在我的窗口的下面吗?

    或者有没有什么办法可以禁止ToolTip的显示呢?
    • 已编辑 Tarnumy 2010年3月9日 8:05
    2010年3月9日 3:39

答案

  • Tooltip这个东西他的父窗口是Desktop,你监视对地方了么?

    查其消息比较复杂,还是简单的来吧,设一个定时器,每秒就把你的窗口重设一次TOPMOST风格。用MoveWindow或者SetWindowPos到最前面也可以
    0xBAADF00D
    • 已标记为答案 Nancy Shao 2010年3月16日 9:47
    2010年3月10日 12:40
    版主

全部回复

  • 这个……

    好像都是这样的,我试了迅雷的拖拽窗口,也会被ToolTip 盖住。
    2010年3月9日 4:02
    版主
  • 没简单的办法,因为tooltip是TOPMOST风格的,这个风格后显示的窗口会覆盖原先的窗口。

    但是你可以:
    1.想办法把后来的Tooltip窗口设置成非Topmost模式,用钩子可以实现,比较复杂。
    2.让你的程序在Tooltip出现时就把自己重新设成WM_EX_TOPMOST风格,这样它就可以盖住Tooltip了,简单一点可以设置一个定时器,没隔1s就把窗口重新放回TOPMOST.有个函数BringWindowToTop不知能不能在这种条件下用,你试试。


    0xBAADF00D
    2010年3月9日 5:17
    版主



  • 我很怀疑,那个Tooltip 是否真的具有窗口句柄,是一个窗体。 由于技术原因,我从没用Spy++ 抓到过Tooltip,我也只是猜的。 如果不是窗体的话,就谈不上Z-order问题。也就没法设置谁前谁后了。
    2010年3月9日 6:37
    版主
  • 我用Reflector 看了一下.NET 的Tooltip 实现,那个是有窗体的,也有句柄。
    2010年3月9日 6:42
    版主
  • 我就是这样做的,不过这样在窗口重画的时候会产生干扰,就是有一瞬间ToolTip窗口的区域被刷成红色。

    或者有没有什么办法可以禁止ToolTip的显示呢?
    2010年3月9日 7:36
  • 我也是用Spy++监视了,没结果。
    2010年3月9日 7:37
  • 请问怎么样能查到Tooltip被显示的时候触发了哪些消息啊?
    2010年3月9日 7:44
  • Tooltip这个东西他的父窗口是Desktop,你监视对地方了么?

    查其消息比较复杂,还是简单的来吧,设一个定时器,每秒就把你的窗口重设一次TOPMOST风格。用MoveWindow或者SetWindowPos到最前面也可以
    0xBAADF00D
    • 已标记为答案 Nancy Shao 2010年3月16日 9:47
    2010年3月10日 12:40
    版主