• 显示组合框的工具提示


    介绍xtipcombobox显

      

    示组合框的工具提示,就像树控件的工具提示太长而无法放入树控件的客户区域一样。当组合框中的列表框项目太长而无法装入列表框时,将显示一个工具提示,允许查看完整的文本。类似地,当combo编辑框中的文本太宽而无法编辑框时,会显示一个工具提示。 工具提示的样子是这样的-注意,工具提示的颜色将匹配什么是工具提示: ,,,,,,, ,,,,,,, ,,,,,,, NotesCXTipComboBox派生自CComboBox,实现了一个虚拟函数和四个消息处理程序: PreSubclassWindow()——这个虚拟函数允许我们创建工具提示窗口,添加combobox作为其工具,并执行其他初始化操作。注意TTF_TRANSPARENT的使用。这个标志告诉工具提示控件将鼠标消息(包括鼠标点击)转发到父窗口。在listbox的情况下,这将阻止两个CBN_SELENDOK消息被发送到父对话框。 OnCtlColor() -这不是你所想的。根据MSDN文章HOWTO: CComboBox (Q174667)内的CListBox和CEdit的子类,这实际上是一个combobox的listbox的子类化推荐的方法。我们只使用它来子类化listbox—对于编辑框,在CXTipComboBox内部处理更简单。 OnMouseMove() -这个消息处理程序捕捉鼠标移动,当鼠标在combo client rect内时,工具提示将被激活。 OnTimer() -计时器只在显示工具提示时使用。当OnTimer()中的代码检测到鼠标不再在客户端矩形内时,工具提示被删除。 OnDestroy() -取消列表框的子类。 请注意,XTipComboBox.cpp和XTipListBox.cpp中的前四个函数都实现了几乎相同的代码。 如上所述,工具提示是在PreSubclassWindow()中创建的:收缩,复制code

    // create tooltip
    m_hWndToolTip = ::CreateWindowEx(WS_EX_TOPMOST,
                              TOOLTIPS_CLASS,
                              NULL,
                              TTS_NOPREFIX | TTS_ALWAYSTIP,
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              m_hWnd,
                              NULL,
                              NULL,
                              NULL);
    ASSERT(m_hWndToolTip);
    
    // initialize toolinfo struct
    memset(&m_ToolInfo, 0, sizeof(m_ToolInfo));
    m_ToolInfo.cbSize = sizeof(m_ToolInfo);
    m_ToolInfo.uFlags = TTF_TRACK | TTF_TRANSPARENT;
    m_ToolInfo.hwnd = m_hWnd;
    
    // add combo box
    ::SendMessage(m_hWndToolTip, TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);
    ::SendMessage(m_hWndToolTip, TTM_ADDTOOL, 0,
                                          (LPARAM) (LPTOOLINFO) &m_ToolInfo);
    ::SendMessage(m_hWndToolTip, TTM_SETTIPBKCOLOR,
                                          ::GetSysColor(COLOR_HIGHLIGHT), 0);
    ::SendMessage(m_hWndToolTip, TTM_SETTIPTEXTCOLOR,
                                      ::GetSysColor(COLOR_HIGHLIGHTTEXT), 0);
    
    // reduce top & bottom margins
    CRect rectMargins(0,-1,0,-1);
    ::SendMessage(m_hWndToolTip, TTM_SETMARGIN, 0, (LPARAM)&rectMargins);
    
    // set font
    CFont *pFont = GetFont();
    ::SendMessage(m_hWndToolTip, WM_SETFONT, (WPARAM)(HFONT)*pFont, FALSE);
    

    在典型的对话框情况下,您需要使用RelayEvent()和LPSTR_TEXTCALLBACK来将工具提示文本传递给工具提示控件。由于我们处理的是包装在一个combobox控件中的两个单独的控件(编辑框和列表框),因此我们自己更容易拦截鼠标移动和定位工具提示。在OnMouseMove()中,我们确定鼠标的位置,获取下面的文本,并计算文本是否适合客户端rect。如果不适合,我们显示工具提示,使用TTM_TRACKACTIVATE消息。这里我们还为工具提示设置文本和背景颜色,这取决于什么是工具提示。最后,定时器用于跟踪鼠标何时移动到客户端rect外部,以便工具提示将被删除。 如何使用 要将CXTipComboBox集成到您的应用程序中,您首先需要添加以下文件到您的项目: XTipComboBox.cpp XTipComboBox.h XTipListBox.cpp XTipListBox.h 接下来,在适当的项目文件(通常是对话框头文件)中包含头文件XTipComboBox.h。现在可以开始使用CXTipComboBox了。如果您已经有一个带有combobox控件的对话框,那么只需在对话框头文件中将CComboBox替换为CXTipComboBox。不需要进行额外的初始化。 演示程序XTipComboBoxTest.exe演示了如何使用CXTipComboBox。 修订历史 版本1.0 - 2003年6月30日 首次公开发行。 使用 这个软件被发布到公共领域。你可以用任何你喜欢的方式使用它。如果您修改或扩展了它,请考虑在这里发布新的代码供大家分享。本软件是“按原样”提供的,没有明示或隐含的保证。我不承担任何损害或损失的业务,该软件可能造成的。 本文转载于:http://www.diyabc.com/frontweb/news331.html

  • 相关阅读:
    MSDN Magazine搞错了
    Visual Studio 2005中设置调试符号(Debug Symbols)
    BCB 6的问题
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现人与身份证的一对一关系映射
    吴裕雄天生自然Spring BootSpring Data JPA
    吴裕雄天生自然Spring BootSpring Boot对JSP的支持
    吴裕雄天生自然Spring BootSpring Boot的异常统一处理
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现Author与Article的一对多关系映射
    吴裕雄天生自然Spring Boot解决 Error creating bean with name 'entityManagerFactory' defined in class path resource
    吴裕雄天生自然Spring Boot@ExceptionHandler注解和@ControllerAdvice注解
  • 原文地址:https://www.cnblogs.com/Dincat/p/13437599.html
Copyright © 2020-2023  润新知