2013-04-04 76 views
0

我正在使用自己的工具提示来显示有关当前在我的编辑器中使用的自动完成列表框中当前选定项目的快速帮助。就像VS为源代码编辑器做的那样,当发生新的选择时,工具提示将永久地立即弹出到当前选择旁边,并保持到那里,直到新选择的自动完成列表框消失。 这是一个WTL项目,如果这很重要。Win32工具提示出现在屏幕顶部,当它出现在底部时

创建AMD的方式显示我的提示:

m_hwndTooltip = CreateWindowEx(WS_EX_TOPMOST, 
          TOOLTIPS_CLASS, 
          NULL, 
          TTS_NOPREFIX | TTS_ALWAYSTIP,  
          CW_USEDEFAULT, 
          CW_USEDEFAULT, 
          CW_USEDEFAULT, 
          CW_USEDEFAULT, 
          NULL, 
          NULL, 
          NULL, 
          NULL 
          ); 

    // INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE 
    m_toolTipInfo.cbSize = TTTOOLINFOA_V2_SIZE; 
    m_toolTipInfo.uFlags = TTF_TRACK; 
    m_toolTipInfo.hwnd = NULL; 
    m_toolTipInfo.hinst = NULL; 
    m_toolTipInfo.uId = 0; // ?? 
    m_toolTipInfo.lpszText = (LPTSTR) messsssssssage.c_str();  
    // Tool_tip control will cover the whole window 
    m_toolTipInfo.rect.left = 0; 
    m_toolTipInfo.rect.top = 0; 
    m_toolTipInfo.rect.right = 0; 
    m_toolTipInfo.rect.bottom = 0; 

    ::SendMessage(m_hwndTooltip, TTM_SETMAXTIPWIDTH, 0, MAX_TOOLTIP_WIDTH); //set max width in pixels, AND(!!) enable multi-line support 

    // SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW 
    ::SendMessage(m_hwndTooltip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &m_toolTipInfo); 

    ::SendMessage(m_hwndTooltip, TTM_TRACKPOSITION, 0, (LPARAM)(DWORD) MAKELONG(x, y)); 
    ::SendMessage(m_hwndTooltip, TTM_TRACKACTIVATE, true, (LPARAM)(LPTOOLINFO) &m_toolTipInfo); 

这是所有细,工程就像一个魅力。但是,当我传递过高的Y坐标时,会使底部的屏幕出现工具提示(例如:屏幕高度:1000,并且我传递Y:950,并且工具提示将为100高度),那么工具提示出现在Y = 0上,所以屏幕顶部的位置,而不是重新定位到900. 但是,这是水平工作,所以如果它会出现在右侧(太高的X通过),它向左移动工具提示,直到它可以放在屏幕上。

这很奇怪怪异?!

任何人都可以给我一个提示这里有什么问题? 更何况,Tooltip的大小是由win工具提示自动决定的,基于要显示的信息+所用的最大宽度+字体+行号,所以我不能在显示它之前计算正确的X,Y位置,所以我需要依靠Tooltip控件。

回答

0

由于没有回应,我找到了解决办法,我会分享给别人:

看来最初0,0是一种后退的时候提示无法适应屏幕上。

所以我做什么,而不是

m_toolTipInfo.rect.top = 0; 
m_toolTipInfo.rect.buttom = 0; 
    ---> 
m_toolTipInfo.rect.top = rcWorkingArea.bottom - 5; 
m_toolTipInfo.rect.bottom = rcWorkingArea.bottom - 5; 

如果提示无法容纳在屏幕底部,将使用该值。

仍然奇怪它为什么会自动与X坐标一起工作......但没关系。

相关问题