zoukankan      html  css  js  c++  java
  • MFC之界面提示(CToolTipCtrl类)

    实现如下:当鼠标放到一个控件上,就显示一个提示。

     关键代码:

    在头文件TipDlg.h中添加成员变量:
    CToolTipCtrl m_tip;
    
    在对话框初始化中
    BOOL CTipDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
           ...
        // TODO:  在此添加额外的初始化代码
        m_tip.Create(this);
        m_tip.AddTool(GetDlgItem(IDC_NUM), _T("Please add number in here."));
        m_tip.AddTool(GetDlgItem(IDC_NAME), _T("Please input name in here."));
        m_tip.AddTool(GetDlgItem(IDC_DEPT), _T("Please select department in here."));
        m_tip.AddTool(GetDlgItem(IDC_ADD), _T("ADD"));
        m_tip.AddTool(GetDlgItem(IDC_DEL), _T("DELETE"));
        m_tip.AddTool(GetDlgItem(IDC_MOD), _T("MODIFY"));
        m_tip.AddTool(GetDlgItem(IDC_LIST), _T("The information of employee."));
        m_tip.Activate(TRUE);
    
        m_list.InsertColumn(0, _T("Number"), 0, 100);
        m_list.InsertColumn(1, _T("Name"), 0, 120);
        m_list.InsertColumn(2, _T("Department"), 0, 120);
        m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    
        LPCTSTR szDept[] = {
            _T("Human Resource"),
            _T("Reserch & Development"),
            _T("Finance"),
            _T("Testing")
        };
        int n = sizeof(szDept) / sizeof(szDept[0]);
        CComboBox* pComb = (CComboBox*)GetDlgItem(IDC_DEPT);
        for (int i = 0; i < n; ++i)
            pComb->AddString(szDept[i]);
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    3. 添加一个虚函数 PreTranslateMessage
    BOOL CTipDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO:  在此添加专用代码和/或调用基类
        m_tip.RelayEvent(pMsg);//将鼠标消息传递给ToolTip控件进行处理。
    
        return CDialogEx::PreTranslateMessage(pMsg);
    }
    View Code

    动态添加提示信息:

     

     关键代码:

    1. 添加成员函数
        CString GetListText();
        BOOL SetTipText(UINT id, NMHDR *pHdr, LRESULT* pResult);
    2. 手动添加消息映射
        ON_NOTIFY_EX(TTN_NEEDTEXT, 0, SetTipText)//自己添加
    3. 在cpp文件中编写函数
    CString CTipDlg::GetListText()
    {
        POSITION ps = m_list.GetFirstSelectedItemPosition();
        int nn = m_list.GetNextSelectedItem(ps);
        int n=m_list.GetSelectedCount();
        if (n<1)
            return _T("no information.");
        int nSel = m_list.GetSelectionMark();
        CString str;
        str.Format(_T("Number: %s
    Name: %s
    Department: %s"),
            m_list.GetItemText(nSel, 0), m_list.GetItemText(nSel, 1), m_list.GetItemText(nSel, 2));
        return str;
    }
    
    #pragma warning(disable:4996) // 可以使用 strcpy sprintf 等,而不是必须使用MS提供的安全函数 strcpy_s sprintf_s 等
    BOOL CTipDlg::SetTipText(UINT id, NMHDR *pHdr, LRESULT* pResult)
    {
        TOOLTIPTEXT *pText = (TOOLTIPTEXT*)pHdr;
        UINT nID = pHdr->idFrom;
        if (pText->uFlags & TTF_IDISHWND)
        {
            nID = ::GetDlgCtrlID((HWND)nID);
            switch (nID)
            {
            case IDC_LIST:
                //动态赋值提示文字,默认限于80个字符。
                //(超出80,出现崩溃
                // STATUS_STACK_BUFFER_OVERRUN encountered
                // Tip.exe 已触发了一个断点。)
                _tcscpy(pText->lpszText, GetListText());
                return TRUE;
            }
        }
        return FALSE;
    }
    
    若想显示多行,在OnInitDialog()中添加一句:
    m_tip.SetMaxTipWidth(1000);
    View Code

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    JMeter 压测基础(四)——Java工程测试
    Docker 实战(二)——centos7镜像安装nginx,将安装nginx的centos容器生成新的镜像,并导出
    JMeter压测基础(三)——Mysql数据库
    Jmeter压测基础(二)——Badboy功能、Jmeter参数化、检查点、集合点、动态关联、图形监控
    API 自动化框架
    Python Flask Restful
    【19】Grafana添加Zabbix为数据源
    【18】使用公共邮箱发送邮件
    xls格式转化为txt格式
    【17】自动发现磁盘脚本
  • 原文地址:https://www.cnblogs.com/htj10/p/11704225.html
Copyright © 2011-2022 走看看