zoukankan      html  css  js  c++  java
  • 显示组合框的工具提示

    介绍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

  • 相关阅读:
    003.Heartbeat MySQL双主复制
    001.常见监控简介
    微服务探索与实践—服务注册与发现
    设计模式之建造者模式
    .NET Core 3.0之深入源码理解Startup的注册及运行
    【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
    C#并发编程之异步编程(三)
    设计模式之中介者模式
    设计模式之单例模式
    设计模式之装饰器模式
  • 原文地址:https://www.cnblogs.com/Dincat/p/13437599.html
Copyright © 2011-2022 走看看