给MFC对话框控件添加工具提示Tips
来源:互联网 发布:机智交易软件 编辑:程序博客网 时间:2024/04/28 17:59
这里以我创建的一个对话框为例:
1、为对话框添加按钮(设ID为IDB_BTN)资源(按钮名字为确定),并且为 确定 按钮映射为成员变量 m_btoK,此外,添加一个 CToolTipCtrl 类的 对象m_ToolTips( 如果添加指针就要在构造函数和析构函数中初始化和释放工具提示对象,并且要创建对象出来)。
class CAboutDlg : public CDialog{public: CAboutDlg();// 对话框数据 enum { IDD = IDD_ABOUTBOX };protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog();// 实现protected: DECLARE_MESSAGE_MAP()public: CButton m_boK; CToolTipCtrl m_toolTips; virtual BOOL PreTranslateMessage(MSG* pMsg);};
2、在OnInitDialog 函数中:
CDialog::OnInitDialog() { //Set up the tooltip if(!m_toolTips.Create(this)) { TRACE("Unable To create ToolTip/n"); return TRUE; } if(m_toolTips.AddTool(this, _T("About Box"))) { //为对话框添加提示 TRACE("Unable to add Dialog to the tooltip/n"); } //这里也可以这么写:m_toolTips.AddTool(GetDlgItem(IDB_BTN), _T("OK Button")) ; IDB_BTN为按钮ID; if (m_toolTips.AddTool(&m_boK,_T("OK Button"))) {//为按钮添加提示 TRACE("Unable to add OK button to the tooltip/n"); } 在这里可以设置一些属性: m_ToolTip.SetDelayTime(200); m_ToolTip.SetTipTextColor( RGB(0,0,0 ));//设置提示字体颜色 m_ToolTip.SetTipBkColor( RGB(255,255,255));//设置提示背景颜色 m_toolTips.Activate(TRUE); //最后别忘了激活状态 return TRUE; }
3、使用类向导覆盖虚函数PreTranslateMessage。
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if (NULL != m_toolTips) m_toolTips.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);}
2、为CListCtrl单元格添加提示信息的类
一、思路:
1. 确定鼠标落在哪一个单元格上面
2. 获得该单元格的文字信息
3. 更新tooltip的信息。
二、实施:
1. 添加CListCtrl的派生类CMyListCtrl
2.添加声明成员变量
CToolTipCtrl m_toolTip; //文本提示类 int m_nSubItem; //存放行号 int m_nItem; //存放列号 BOOL m_bEnableTips; //是否开启文本提示
3.初始化成员变量
CMyListCtrl::CMyListCtrl() { m_bEnableTips=TRUE; m_toolTip.Create(this); }
- 为该派生类添加WM_MOUSEMOVE消息
- 在WM_MOUSEMOVE的消息处理函数中添加如下代码:
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //如果开启文本提示 if(m_bEnableTips) { CString str; LVHITTESTINFO lvhti; // 判断鼠标当前所在的位置(行, 列) lvhti.pt = point; SubItemHitTest(&lvhti); //如果鼠标移动到另一个单元格内, 则进行处理; 否则, 不做处理 if((lvhti.iItem != m_nItem) || (lvhti.iSubItem != m_nSubItem)) { // 保存当前鼠标所在的(行,列) m_nItem = lvhti.iItem; m_nSubItem = lvhti.iSubItem; // 如果鼠标移动到一个合法的单元格内,则显示新的提示信息 // 否则, 不显示提示 if((m_nItem != -1) && (m_nSubItem != -1)) { // @@@@@@@@ 在这里修改要显示的提示信息 // 这里仅仅是一个例子---获得当前单元格的文字信息, 并设置为新的提示信息 str = GetItemText(m_nItem ,m_nSubItem); m_toolTip.AddTool(this, str); // 显示提示框 m_toolTip.Pop(); } else { m_toolTip.AddTool(this, ""); m_toolTip.Pop(); } } } CListCtrl::OnMouseMove(nFlags, point); }
6.添加虚函数 PreTranslateMessage
BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg) { if(m_toolTip.GetSafeHwnd()) { m_toolTip.RelayEvent(pMsg); } return CListCtrl::PreTranslateMessage(pMsg); }
CToolTipCtrl 如何换行
Tooltip中由一个方法叫做SetMaxTipWidth,MSDN中的描述说是设定Tips窗口的最大宽度,然后就没了。
其实这个方法是使用SDK中的TTM_SETMAXTIPWIDTH 消息,查一下这个消息的描述,就会发现很多内容。
1. 这个方法是设定Tips窗口的最大宽度,in pixel;
2. 如果文字超过这个最大宽度,则control进行自动换行,以空格为换行标志;
3. 如果无法换行(没有空格或\r\n),则显示一行,宽度超过最大宽度。
还有很重要的一点,如果没有设定过宽度,则系统默认宽度为-1,这也是没有设定宽度就不能换行的原因。
1 0
- 给MFC对话框控件添加工具提示Tips
- 给MFC对话框控件添加工具提示Tips
- 给MFC对话框控件添加鼠标浮动提示
- VC6在对话框里,给控件加提示TIPS——最简单的方法
- MFC CToolTipCtrl用法 添加Tips提示
- MFC 给控件添加变量
- 如何给MFC对话框添加背景图片
- 如何给MFC对话框添加背景图片
- 如何给MFC对话框添加背景图片
- MFC程序实现给对话框添加背景图片
- MFC怎么给对话框添加背景
- MFC给对话框添加背景颜色
- MFC如何给对话框添加菜单
- MFC中如何给对话框添加背景图片
- 如何给MFC对话框添加背景图片
- 给按钮添加提示对话框,确认-取消
- MFC对话框中控件 添加右键响应
- MFC基于对话框添加图片控件
- The attribute locations is undefined for the annotation type ContextConfiguration
- 利用AuthorizeAttribute属性简单避免 MVC 中的跨域攻击
- 在ListView中实现异步加载
- 后台定位上传的代码实践
- 设置启动页图
- 给MFC对话框控件添加工具提示Tips
- java web HttpClient 开发一个接口
- poj 1141(区间dp+打印路径)
- Yii之路(第八)
- 推送对账文件的3种
- springmvc 定义拦截器
- Android studio下的Android JNI调用以及动态链接库.so的生成
- 在GitHub上下载Demo 运行时候会出现The sandbox is not sync with the Podfile.lock
- libevent异步IO读写操作