正文

按钮添加ToolTip2009-08-19 21:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/46896.html

分享到:

一.首先创建基于对话框的MFC工程TipBtn,添加成员变量UINT m_nBtnIDCRect m_rcBtn,拖放按钮IDC_BUTTON_ADD到对话框中。本例程动态创建含有提示的按钮。

二. 为对话框添加ToolTip支持,在CTipBtnDlg的头文件中定义CtoolTipCtrl型控件变量

m_tooltip

// TipBtnDlg.h

class CTipBtnDlg : public Cdialog

{

// ……

// Implementation

public:

    UINT m_nBtnID = WM_USER + 101; // 按钮ID

CRect m_rcBtn = CRect(10, 40, 10 + 40, 40 + 30); // 按钮的大小和位置

protected:

    CToolTipCtrl m_tooltip;

// ……

}

三.CTipBtnDlgOnInitDialog函数中创建ToolTipCtrl并激活。

1BOOL CToolTipCtrl::Create( CWnd* pParentWnd, DWORD dwStyle = 0 );

参数:

pParentWnd

指定工具提示控件的父窗口,通常是一个CDialog。它不能是NULL

dwStyle

指定工具提示控件的风格,可以是任意Windows风格的组合。

|TTS_ALWAYSTIP则不管工具栏所属窗口是否被激活,提示都会出现。

2void CToolTipCtrl::Activate( BOOL bActivate );

bActivate=TRUE,即工具提示控件被激活,当光标路过一个向提示控件注册过的工具上时就会显示提示信息;

bActivate=FALSE即工具提示控件未被激活,则不会显示工具提示信息,即使是光标路过一个工具上。

// TipBtnDlg.cpp

BOOL CTipBtnDlg::OnInitDialog()

{

// ……

    m_tooltip.Create(this);  // 创建ToolTipCtrl

    m_tooltip.SetTipBkColor(RGB(0, 255, 128)); // 设置提示文本背景颜色

    m_tooltip.SetTipTextColor(RGB(255, 0, 0)); // 设置提示文本字体颜色

    m_tooltip.Activate(TRUE);  // 激活ToolTipCtrl

    // ……

}

四.覆写TipBtnDlg的虚拟函数PreTranslateMessage

在工作区窗口中的ClassView中右击CtipBtnDlgàAdd Virtual Functionà

PreTranslateMessageàAdd and Edit

PreTranslateMessage中添加代码:m_tooltip.RelayEvent(pMsg);

void CToolTipCtrl::RelayEvent( LPMSG lpMsg );

在系统TranlateMessage之前对消息进行过滤,当pMsgWM_MOUSEMOVEToolTipCtrl将判断光标落在哪个控件范围类,并显示相关提示文本串。

// TipBtnDlg.cpp

BOOL CTipBtnDlg::PreTranslateMessage(MSG* pMsg)

{

    // Let the ToolTip process this message.

    m_tooltip.RelayEvent(pMsg);

    return CDialog::PreTranslateMessage(pMsg);

}

 

五.将需要提示的控件绑定到ToolTipCtrl提示工具控件

BOOL CToolTipCtrl::AddTool( CWnd* pWnd, LPCTSTR lpszText = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT nIDTool = 0 );

此成员函数用来向工具提示控件注册一个工具pWnd,这样当光标路过pWnd所指向的控件(继承自CWnd)时,保存在工具提示控件中的提示信息就会被显示。

可以多次调用CtoolTipCtrl::AddTool来建立ToolTipCtrl提示控件与多个控件关联起来。

按钮IDC_BUTTON_ADD的点击事件处理如下:

// TipBtnDlg.cpp

// 动态创建按钮

void CToolbarDlgDlg::OnAddButton()

{

    // 分配按钮ID

    UINT id = m_nBtnID++;

    char buffer[10];

    itoa(id, buffer, 10);

   

    // 创建按钮,标题为ID

    CButton *pButton = new CButton();

    pButton->Create(buffer, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

        m_rcBtn,this,m_nBtnID);

 

    // 建立按钮与提示控件的关联,提示文本为ID

// 可调用UpdateTipText更改提示文本

    m_tooltip.AddTool(pButton, buffer);

   

    // m_rcBtn纵向偏移1040-30

    m_rcBtn.OffsetRect(0,40);

 

    // 获取客户区矩形区域

    CRect rc;   GetClientRect(&rc);

 

    // 纵坐标超过客户区底端,则另起一列

    if (m_rcBtn.bottom > rc.bottom)

    {

        m_rcBtn.top = 10;

        m_rcBtn.bottom = 40;   

        m_rcBtn.OffsetRect(70,0);// 横向偏移3070-40

    }

 

    // 显示按钮

    pButton->ShowWindow(SW_SHOW);  

}

六.运行效果如下:

阅读(6525) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册