zoukankan      html  css  js  c++  java
  • windowsAPI popup trace tip(toolTip)

    class UIHELPER_EXPORT ToolTipWindow : public chMessageHandler
    {
    DECLARE_PROCESS_OBJECT(ToolTipWindow);
    public:
    bool updateTipText(const chConstStringA text);
    private:
    bool initTipsWindowsBywinAPI();
    void AddWindowTool(HWND hwndTip);
    bool ShowTipWindow();
    bool HideTipWindow();
    BOOL onProcessMessage(msgObject& objMessage);
    public:
    virtual BOOL TryThreadMessage(msgObject& objMessage);
    public:
    ToolTipWindow();
    ~ToolTipWindow();
    private:
    HWND hwndTip;
    TOOLINFOW toolInfo;
    chStringW m_strText;
    };

    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'"")
    #elif defined _M_IA64
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'"")
    #else
    #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
    #endif
    #include <commctrl.h>
    #pragma comment(lib, "comctl32.lib")

    IMPLEMENT_PROCESS_OBJECT(ToolTipWindow);
    bool ToolTipWindow::initTipsWindowsBywinAPI()
    {
    chASSERT(hwndTip == NULL);

    hwndTip = CreateWindowEx(NULL,
    TOOLTIPS_CLASS,
    NULL,
    WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    NULL,
    NULL,
    NULL,
    NULL
    );
    ::SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    AddWindowTool(hwndTip);
    return true;
    }
    void ToolTipWindow::AddWindowTool(HWND hwndTip)
    {
    memset(&toolInfo, 0, sizeof(TOOLINFO));
    toolInfo.cbSize = sizeof(TOOLINFO);
    toolInfo.uFlags = TTF_IDISHWND | TTF_TRACK;
    toolInfo.uId = NULL;//(UINT_PTR)hParrent;
    toolInfo.lpszText = NULL;

    ::SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &toolInfo);
    }
    bool ToolTipWindow::updateTipText(const chConstStringA text)
    {
    chASSERT(hwndTip != NULL);
    m_strText = chUTF82W(text);
    toolInfo.lpszText = (LPWSTR)m_strText.c_str();
    ::SendMessage(hwndTip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&toolInfo);
    return true;
    }
    bool ToolTipWindow::ShowTipWindow()
    {
    POINT currentPoint;
    GetCursorPos(&currentPoint);
    SYZ_TRACE("getCursorPos x==[%d], y==[%d]", currentPoint.x, currentPoint.y);

    ::SendMessage(hwndTip, TTM_TRACKPOSITION, 0, (LPARAM) MAKELONG(currentPoint.x + 5, currentPoint.y + 10));
    ::SendMessage(hwndTip, TTM_TRACKACTIVATE,(WPARAM)TRUE,(LPARAM)&toolInfo);
    return TRUE;
    }
    bool ToolTipWindow::HideTipWindow()
    {
    ::SendMessage(hwndTip, TTM_TRACKACTIVATE,(WPARAM)FALSE,(LPARAM)&toolInfo);
    return TRUE;
    }
    BOOL ToolTipWindow::onProcessMessage(msgObject& objMessage)
    {
    switch(objMessage.message)
    {
    case TOOLTIPWINDOWS_UPDATETIPTEXT:
    updateTipText(chStringA((LPCSTR)objMessage.GetExtraData(), objMessage.GetExtraSize()));
    break;
    case TOOLTIPWINDOWS_SHOWTIPWINDOW:
    ShowTipWindow();
    break;
    case TOOLTIPWINDOWS_HIDETIPWINDOW:
    HideTipWindow();
    break;
    default:
    break;
    }
    return TRUE;
    }
    BOOL ToolTipWindow::TryThreadMessage(msgObject& objMessage)
    {
    switch(objMessage.message)
    {
    case TOOLTIPWINDOWS_UPDATETIPTEXT:
    updateTipText((LPCSTR)objMessage.GetExtraData());
    break;
    case TOOLTIPWINDOWS_SHOWTIPWINDOW:
    ShowTipWindow();
    break;
    case TOOLTIPWINDOWS_HIDETIPWINDOW:
    HideTipWindow();
    break;
    default:
    break;
    }
    return TRUE;
    }
    ToolTipWindow::ToolTipWindow()
    {
    hostThread().AddMessageHandler(this);
    hwndTip = NULL;
    initTipsWindowsBywinAPI();
    msgJoinMessageGroup(szToolTipWindowsGroupName, MSG_METHOD(this, ToolTipWindow::onProcessMessage));
    }
    ToolTipWindow::~ToolTipWindow()
    {
    if (hwndTip != NULL)
    {
    ::SendMessage(hwndTip, WM_DESTROY, 0, 0);
    ::DestroyWindow(hwndTip);
    hwndTip = NULL;
    }
    }

  • 相关阅读:
    回顾Oracle几个用到的基本语句
    JDBC连接数据库中CallableStatement执行有参存储过程及注解其他
    JDBC连接数据库步骤及Class.forName()(转)
    Web开发的编码解决中文乱码
    Filter,Listener(转)
    web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)
    算法训练 比赛安排
    算法训练 字符串编辑
    算法训练 最大值与最小值的计算
    算法训练 判定数字
  • 原文地址:https://www.cnblogs.com/hqu-ye/p/4738863.html
Copyright © 2011-2022 走看看