Tooltip é um elemento comum de interface gráfica GUI, também conhecida como dica de contexto é aquela moldura pop up que abre quando você passa o mouse sobre um elemento da interface (normalmente uma palavra em um texto) e que contém uma explicação adicional sobre aquele elemento que recebeu o ponteiro do mouse sobre ele. É utilizado em conjunto com um cursor, normalmente um ponteiro do mouse. O usuário paira o cursor sobre um item, sem clicar nele, e uma pequena “caixa” irá aparece com informações complementares relativas a este item.
CToolTipCtrl
Encapsula a funcionalidade de um “controle dica de ferramenta“, uma pequena janela pop-up que exibe uma única linha de texto que descreve a finalidade de uma ferramenta em um aplicativo.
PreTranslateMessage
Você pode efetuar um método Override para substituir esta função para filtrar mensagens de janela antes de serem enviados para Windows.
Visual Studio
Para criar um controle ToolTip para um dialogo MFC em C++ siga os seguintes passos:
- Crie um novo projeto MFC Dialog Based.
- Coloque no dialogo um componente Static Text e um componente Button, crie uma variável para o botão chamada m_botao.
- Disponha os componentes no dialogo conforme a imagem abaixo:
- Declare o método Override para a mensagem PreTranslateMessage e crie um objeto CToolTipCtrl para a classe de seu dialogo, use o primeiro código para se basear.
- Complete seu código gerado automaticamente para a implementação da classe, use o segundo código para se basear.
Exemplo:
Neste exemplo usamos o objeto CToolTipCtrl para exibir uma dica para o usuário ao pairar o cursor do mouse sobre o botão, interceptando a mensagem e exibindo o texto da dica na mensagem do Windows PreTranslateMessage.
C++
Classe – Definição (.h)
// tooltipcppDlg.h : header file // #pragma once #include "afxwin.h" class CtooltipcppDlg : public CDialogEx { public: CtooltipcppDlg(CWnd* pParent = NULL); enum { IDD = IDD_TOOLTIPCPP_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: HICON m_hIcon; // Desenvolvimento Aberto // Declara metodo de menssagem BOOL PreTranslateMessage(MSG* pMsg); virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: // Declara componente tooltip CToolTipCtrl* m_pToolTip; CButton m_botao; };
Classe – Implementação (.cpp)
// tooltipcppDlg.cpp : implementation file // #include "stdafx.h" #include "tooltipcpp.h" #include "tooltipcppDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CtooltipcppDlg::CtooltipcppDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CtooltipcppDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CtooltipcppDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON1, m_botao); } BEGIN_MESSAGE_MAP(CtooltipcppDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() END_MESSAGE_MAP() BOOL CtooltipcppDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); // Desenvolvimento Aberto // Inicializa objeto tooltip e define suas propriedades // Cria objeto tooltip m_pToolTip = new CToolTipCtrl; if (!m_pToolTip->Create(this)) { return TRUE; } // Define objeto para a dica m_pToolTip->AddTool(&m_botao, L"Desenvolvimento Aberto - Clique neste botão para executar uma ação."); // Ativa tooltip m_pToolTip->Activate(TRUE); return TRUE; } void CtooltipcppDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } HCURSOR CtooltipcppDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } // Desenvolvimento Aberto // Cria override da menssagem do windows BOOL CtooltipcppDlg::PreTranslateMessage(MSG* pMsg) { m_pToolTip->RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg); }