zoukankan      html  css  js  c++  java
  • ToolTips 提示框

    Tooltips.hpp
    #ifndef tooltipsH
    #define tooltipsH

    #include <commctrl.h>
    #include <windows.h>

    namespace NSTS {

    struct ToolTipsItem{
    HWND hwnd;
    TCHAR* pszTip;
    };

    class CToolTips {
    public:
    CToolTips (void) {
    m_hSelf = NULL;
    m_hInst = NULL;
    };

    ~CToolTips (void) {
    Destroy ();
    };

    public:
    bool Init (HINSTANCE hInst, DWORD dwStyle = WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP) {
    INITCOMMONCONTROLSEX iccex;
    /* INITIALIZE COMMON CONTROLS */
    iccex.dwICC = ICC_WIN95_CLASSES|ICC_COOL_CLASSES|ICC_BAR_CLASSES|ICC_USEREX_CLASSES;
    iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    InitCommonControlsEx(&iccex);

    if (hInst == NULL) {
    return false;
    }

    Destroy ();

    /* CREATE A TOOLTIP WINDOW */
    m_hSelf = CreateWindowEx(WS_EX_TOPMOST,
    TOOLTIPS_CLASS,
    NULL,
    dwStyle,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    NULL,
    NULL,
    hInst,
    NULL
    );

    if (m_hSelf == NULL) {
    return false;
    }

    SetWindowPos(m_hSelf,
    HWND_TOPMOST,
    0,
    0,
    0,
    0,
    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

    m_hInst = hInst;

    return true;
    };

    bool Init (HINSTANCE hInst, HWND hwnd, LPTSTR pszText, DWORD dwStyle = WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP) {
    if (hwnd != NULL && IsWindow (hwnd) && hInst != NULL) {
    if (!Init (hInst, dwStyle)) {
    return false;
    }

    return AddItem (hwnd, pszText);
    }

    return false;
    };

    bool Init (HINSTANCE hInst, ToolTipsItem items[], int iSize, DWORD dwStyle = WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP) {
    if (hInst != NULL && items != NULL && iSize >= 0) {
    if (Init (hInst, dwStyle)) {
    bool fRet = true;
    for (int i = 0; i < iSize; ++i) {
    if (!AddItem (items[i].hwnd, items[i].pszTip)) {
    fRet = false;
    }
    }

    if (!fRet) {
    Destroy ();
    }

    return fRet;
    }
    }

    return false;
    };

    void Destroy (void) {
    if (m_hSelf != NULL) {
    DestroyWindow (m_hSelf);
    m_hSelf = NULL;
    }
    m_hInst = NULL;
    };

    bool AddItem (HWND hwnd, LPTSTR pszText) {
    if (m_hSelf != NULL && IsWindow (m_hSelf) &&
    hwnd != NULL && IsWindow (hwnd)) {
    RECT rc;
    TOOLINFO ti = {0};

    GetClientRect (hwnd, &rc);
    #if _WIN32_WINN != 0x0500
    ti.cbSize = sizeof (TOOLINFO) - sizeof (void*);
    #else
    ti.cbSize = sizeof (TOOLINFO);
    #endif
    ti.hinst = m_hInst;
    ti.hwnd = hwnd;
    ti.uFlags = TTF_SUBCLASS;
    ti.uId = 0;
    ti.lpszText = pszText;
    ti.rect.left = rc.left;
    ti.rect.top = rc.top;
    ti.rect.right = rc.right;
    ti.rect.bottom = rc.bottom;

    return SendMessage (m_hSelf, TTM_ADDTOOL, (WPARAM)0, (LPARAM)&ti);
    }

    return false;
    };

    bool SetItem (HWND hwnd, LPTSTR pszText) {
    if (hwnd != NULL && IsWindow (hwnd) &&
    m_hSelf != NULL && IsWindow (m_hSelf)) {
    TOOLINFO ti = {0};
    #if _WIN32_WINN != 0x0500
    ti.cbSize = sizeof (TOOLINFO) - sizeof (void*);
    #else
    ti.cbSize = sizeof (TOOLINFO);
    #endif
    ti.hinst = m_hInst;
    ti.hwnd = hwnd;
    ti.uId = 0;
    ti.lpszText = pszText;
    SendMessage (m_hSelf, TTM_UPDATETIPTEXT, (WPARAM)0, (LPARAM)&ti);
    Update ();
    return true;
    }

    return false;
    };

    bool DelItem (HWND hwnd){
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    TOOLINFO ti = {0};
    #if _WIN32_WINN != 0x0500
    ti.cbSize = sizeof (TOOLINFO) - sizeof (void*);
    #else
    ti.cbSize = sizeof (TOOLINFO);
    #endif
    ti.hwnd = hwnd;
    ti.uId = 0;
    SendMessage (m_hSelf, TTM_DELTOOL, (WPARAM)0, (LPARAM)&ti);
    return true;
    }

    return false;
    };

    bool UseRectangle (void) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    DWORD dwStyle = ::GetWindowLong (m_hSelf, GWL_STYLE);
    LONG lRet;
    dwStyle &= ~TTS_BALLOON;
    lRet = ::SetWindowLong (m_hSelf, GWL_STYLE, dwStyle);
    return lRet ? true : false;
    }
    return false;
    };

    bool UseBalloon (void) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    DWORD dwStyle = ::GetWindowLong (m_hSelf, GWL_STYLE);
    LONG lRet;
    dwStyle |= TTS_BALLOON | TTS_NOFADE | TTS_NOANIMATE;
    lRet = ::SetWindowLong (m_hSelf, GWL_STYLE, dwStyle);
    Update ();
    return lRet ? true : false;
    }
    return false;
    };

    COLORREF GetBkColor (void) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    return (COLORREF)SendMessage (m_hSelf, TTM_GETTIPBKCOLOR, (WPARAM)0, (LPARAM)0);
    }

    return RGB (0,0,0);
    };

    bool SetBkColor (COLORREF clrBk) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, TTM_SETTIPBKCOLOR, (WPARAM)clrBk, (LPARAM)0);
    return true;
    }

    return false;
    };

    COLORREF GetTextColor (void) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    return (COLORREF)SendMessage (m_hSelf, TTM_GETTIPTEXTCOLOR, (WPARAM)0, (LPARAM)0);
    }

    return RGB (0, 0, 0);
    };

    bool SetTextColor (COLORREF clrText) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, TTM_SETTIPTEXTCOLOR, (WPARAM)clrText, (LPARAM)0);
    return true;
    }

    return false;
    };

    void Update (void) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, TTM_UPDATE, (WPARAM)0, (LPARAM)0);
    }
    };

    bool SetMaxWidth (INT iWidth) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, TTM_SETMAXTIPWIDTH, (WPARAM)0, (LPARAM)iWidth);
    return true;
    }

    return false;
    };

    enum EIcon { eNone = 0, eInfo, eWarning, eError };
    bool SetTitle (EIcon eIcon, LPCTSTR pszTitle) {
    if (m_hSelf != NULL && IsWindow (m_hSelf)) {
    return SendMessage (m_hSelf, TTM_SETTITLE, (WPARAM)eIcon, (LPARAM)pszTitle);
    }

    return false;
    };

    HWND GetHwnd (void) const { return m_hSelf; };
    private:
    HWND m_hSelf;
    HINSTANCE m_hInst;
    };

    }


    #endif // tooltipsH

    Usage:

    NSTS::CToolTips g_tt, g_tt2;
    NSTS::CToolTips g_tt3;

    WM_INITDIALOG:
    /** 初始化 */
    assert (g_tt.Init (hInst));
    assert (g_tt2.Init (hInst, GetDlgItem (hwndDlg, IDC_BTN_SETHEIGHT), TEXT ("IDC_BTN_SETHEIGHT")));

    NSTS::ToolTipsItem ttis[] = {
    { GetDlgItem (hwndDlg, IDC_BTN_REMOVECTRL), TEXT ("REMOVE CTRL")},
    { GetDlgItem (hwndDlg, IDC_BTN_SETICON), TEXT ("SET ICON")}
    };
    assert (g_tt3.Init (hInst, ttis, 2));

    /* 添、删、改*/
    assert (g_tt.AddItem (GetDlgItem (hwndDlg, IDC_BTN_RESIZE), TEXT ("resize")));
    g_tt.SetItem (GetDlgItem (hwndDlg, IDC_BUTTON1), TEXT ("222"));
    g_tt.DelItem (GetDlgItem (hwndDlg, IDC_BUTTON1));

    /** 添加标题和图标 */
    assert (g_tt2.SetTitle (NSTS::CToolTips::eError, TEXT ("TITLE")));

    /** 颜色 */
    assert (g_tt.SetBkColor (RGB (128, 0, 0)));
    assert (g_tt.SetTextColor (RGB (0, 128, 0)));

    /** 形状,球或矩形 */
    assert (g_tt.UseBalloon ());
    assert (g_tt.UseRectangle ());



  • 相关阅读:
    GIT的使用
    C# DataTable.Select() 筛选数据
    Oracle数据库使用游标查询结果集所有数据
    清除PLSQL Developer访问数据库连接的历史记录
    C#关于DateTime得到的当前时间的格式和用法
    C++中string的用法
    ACM讲课之字符串
    第二场周赛(递归递推个人Rank赛)——题解
    ACM团队招新赛题解
    线段树详解
  • 原文地址:https://www.cnblogs.com/lin1270/p/2325661.html
Copyright © 2011-2022 走看看