Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17375
  • 博文数量: 34
  • 博客积分: 990
  • 博客等级: 准尉
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-31 20:57
文章分类
文章存档

2012年(8)

2011年(26)

我的朋友
最近访客

分类: C/C++

2012-03-05 13:10:51

一.首先创建基于对话框的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);  

}

六.运行效果如下:

阅读(321) | 评论(0) | 转发(0) |
0

上一篇:VCToolTip

下一篇:调试程序的疑问和心得

给主人留下些什么吧!~~