精选文章 如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息

如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息

作者:ShowMan 时间: 2021-02-07 03:20:03
ShowMan 2021-02-07 03:20:03
【摘要】如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息 
湖南省邮电五二六厂 肖天鹏 
---- 利用 VC++ 的 AppWizard,可以很容易地实现工具条和菜单项的 ToolTip 或在状态条上显 示帮助信息,但要在对话框的控件上显示 ToolTip 并在状态条上显示控件信息并不是那么容易, 其实,利用 VC++ 中的 WM_SETCURSOR 与 TTN_N...
 

如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息

湖南省邮电五二六厂
肖天鹏

---- 利用 VC++ 的 AppWizard,可以很容易地实现工具条和菜单项的 ToolTip 或在状态条上显 示帮助信息,但要在对话框的控件上显示 ToolTip 并在状态条上显示控件信息并不是那么容易, 其实,利用 VC++ 中的 WM_SETCURSOR 与 TTN_NEEDTEXT 消息就可达到目的。具体操作如下:

----

---- 利用 VC++ 的 MFC AppWizard 生成一个 SDI 或 MDI 的应用程序

----

---- 编辑对话框控件的字符串资源

---- 例如:

---- IDC_DBBUTTON1 = "this is 肖天鹏的第一自制按钮/n天 鹏", 其中字符串"this is 肖天鹏的第一自制按钮"将在鼠标移到控件上时显示在状态条上,字符串"天 鹏"将作为 ToolTip 显示。

----

---- 建立消息映射。

---- 在对话框的头文件 (*.H) 中加入以下代码:

protected: void SetStatusText(UINT nID=0); //{{AFX_MSG(CFileOp1) afx_msg void OnDestroy(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); //}}AFX_MSG afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ); DECLARE_MESSAGE_MAP()

---- 在对话框的实现文件 (*.CPP) 中加入以下代码:

BEGIN_MESSAGE_MAP(CFileOp1, CDialog) //{{AFX_MSG_MAP(CFileOp1) ON_WM_DESTROY() ON_WM_SETCURSOR() //}}AFX_MSG_MAP ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotify)
END_MESSAGE_MAP()

----

---- 编辑消息处理函数。

BOOL CFileOp1::OnSetCursor
(CWnd* pWnd, UINT nHitTest, UINT message) 
{
// TODO: Add your message handler 
 code here and/or call default if(pWnd==this) SetStatusText(); else { TOOLTIPTEXT m_psttt; m_psttt.hdr.hwndFrom=m_hWnd; m_psttt.hdr.idFrom=pWnd- >GetDlgCtrlID(); m_psttt.hdr.code=TTN_NEEDTEXT; m_psttt.uFlags= TTF_IDISHWND; SetStatusText(pWnd- >GetDlgCtrlID()); this- >SendMessage(WM_NOTIFY, m_psttt.hdr.idFrom,(LPARAM)&m_psttt); }
return CDialog::OnSetCursor
 (pWnd, nHitTest, message);
}

void CFileOp1::OnDestroy() 
{ SetStatusText(); CDialog::OnDestroy();
}

void CFileOp1::SetStatusText(UINT nID)
{ if(nID==0) nID=AFX_IDS_IDLEMESSAGE; CWnd *pWnd=AfxGetMainWnd()- >GetDescendantWindow (AFX_IDW_STATUS_BAR); if(pWnd) { AfxGetMainWnd()- >SendMessage (WM_SETMESSAGESTRING ,nID); pWnd- >SendMessage(WM_IDLEUPDATECMDUI); pWnd- >UpdateWindow(); }
}

BOOL CFileOp1::OnTipNotify( UINT id, NMHDR *
 pNMHDR, LRESULT * pResult )
{ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR- >idFrom; if (pTTT- >uFlags & TTF_IDISHWND) { nID = ::GetDlgCtrlID((HWND)nID); if(nID) { TCHAR szFullText[256]; CString StrTipText; AfxLoadString(nID,szFullText); AfxExtractSubString(StrTipText, szFullText,1,'/n'); if(!StrTipText.IsEmpty()) strcpy(pTTT-  >lpszText,StrTipText); pTTT-  >hinst = AfxGetResourceHandle(); return(TRUE); } } return(FALSE);
}

----

---- 在 Stdafx.h 文件中加入以下指令:

 #include 〈 afxpriv.h> #include 〈 afxres.h>

----

---- 将该对话框作为一个 SDI 或 MDI 应用程序的主框架的子窗口,生成这样一个对话框后,当你把鼠标移到某个控件 ( 必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip 和状态条信息。

 


 

勿删,copyright占位
您找到想要的结果了吗?
如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:delphi5。0秘籍大暴光

下一篇:用Visual C++ 5实现OpenGL编程

您可能感兴趣

  • 动态规划:《背包问题》-python实现

    0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?   分析一波,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。   解决办法:声明一个 大小为  m[n][c] 的...

  • 利用百度orc识别文字信息

    # -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QPushButton, QGridLayou...

  • JavaScript连接SqlServer并实现分页

    //总记录数 function sumRecord() { var conn= Server.CreateObject("ADODB.connection"); var rs= Server.CreateObject("adodb.recordset"); conn.open("PROVIDER=SQLOLEDB;DATA SOURCE=127.0....

  • Spark KNN实现

    R:查询数据集  S:训练数据集 需要对R中每一个元素计算与S中每一个元素的距离 可以首先计算得到两个数据集的笛卡尔积 用map找到distance groupBykey同一个r的distance 找出其中的KNN   public class KNN{  public static void main(String[] args) ...

  • Android 8.0通知栏显示适配(Notification不显示问题)

    由于测试反馈才发现,之前写好的通知栏下载更新在部分手机上显示不出,导致用户无法更新。起初因为强调是小米手机,所以没有往Android8.0的方向去想,默默的认为是更新方法错误,查看过log日志后可以正常更新,只是无法将更新下载的进度条显示在通知栏,这才想到Android8.0对于通知栏的权限管理,所以查阅资料之后,适配了8.0版本的问题。 首先贴上...

  • 信息收集WEB安全入门

    在渗透测试时,信息收集的全面性对于后期的渗透工作必为重要,甚至关联到能不能挖掘到漏洞,本篇文章从基本的信息收集方法进行详解,从根本上解决初、中级渗透测试人员不会收集网站信息的问题。   内容大纲: 一、基本信息收集 三、搜索引擎利用 二、网站后台查找     一、基本信息收集   1.0、域名信息 1.1-Whois查...

  • iOS 原生控件UIRefreshControl实现下拉刷新

    前言 hihi,勇敢的小伙伴儿们大家好,某些情况下,我们已经做好了刷新的操作,但调用的方式却不太理想,想改成下拉刷新,这时候不想导入MJRefresh这样大的第三方库,只想简单的实现一个下拉刷新的调用方式。该如何快速实现呢? UIRefreshControl了解一下? 这是个原生的下拉刷新的控件,ScrollView已经添加了refreshCo...

  • JavaScript连接SqlServer并实现分页(二)

    //总记录数 function sumRecord() { var conn= Server.CreateObject("ADODB.connection"); var rs= Server.CreateObject("adodb.recordset"); conn.open("PROVIDER=SQLOLEDB;DATA SOURCE=127.0....

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息介绍:华为云为您免费提供如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息的相关内容。| 移动地址: 如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息 | 写博客