您的位置:程序门 -> vc/mfc -> 界面



如何让鼠标经过按钮控件是,出现提示信息?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何让鼠标经过按钮控件是,出现提示信息?[已结贴,结贴人:shenyi0106]
发表于:2007-05-11 11:37:32 楼主
我写了如下代码,可是就是不显示,请高手帮个忙,看一下:
我写了个类叫做cmybutton,继承cbutton的,然后,在cmybutton中添加了如下代码:

class   cmybutton   :   public   cbutton
{
//   construction
public:
cmybutton();

//   attributes
public:
      ctooltipctrl   tipctrl;//定义提示控件
//   operations
public:

//   overrides
//   classwizard   generated   virtual   function   overrides
//{{afx_virtual(cmybutton)
public:
virtual   bool   pretranslatemessage(msg*   pmsg);//重载函数
//}}afx_virtual

//   implementation
public:
virtual   ~cmybutton();

//   generated   message   map   functions
protected:
//{{afx_msg(cmybutton)
afx_msg   void   onmousemove(uint   nflags,   cpoint   point);//加了鼠标移动事件
//}}afx_msg

declare_message_map()
};


#include   "mybutton.h "
//   cmybutton

cmybutton::cmybutton()
{
tipctrl.create(this);
tipctrl.addtool(this);
tipctrl.setdelaytime(ttdt_initial,   0);
tipctrl.settiptextcolor(rgb(255,0,0));
}

cmybutton::~cmybutton()
{
}


begin_message_map(cmybutton,   cbutton)
//{{afx_msg_map(cmybutton)
on_wm_mousemove()
//}}afx_msg_map
end_message_map()

/////////////////////////////////////////////////////////////////////////////
//   cmybutton   message   handlers

bool   cmybutton::pretranslatemessage(msg*   pmsg)  
{
        //   todo:   add   your   specialized   code   here   and/or   call   the   base   class
if(tipctrl.m_hwnd!=null)tipctrl.relayevent(pmsg);
return   cbutton::pretranslatemessage(pmsg);
}

void   cmybutton::onmousemove(uint   nflags,   cpoint   point)  
{
//   todo:   add   your   message   handler   code   here   and/or   call   default
                  cstring   pos;
pos.format( "%d,%d ",point.x,point.y);
tipctrl.updatetiptext(pos,this);
cbutton::onmousemove(nflags,   point);
}
调试了一下,当鼠标经过按钮时pretranslatemessage和onmousemove都触发了,但是就是不显示提示.等待中.......
发表于:2007-05-11 12:19:031楼 得分:50
这是因为cmybutton的构造函数cmybutton::cmybutton()根本就没有执行所致
不知道为什么dlg里已经画好的自定义控件所有的构造、create\showwindow消息都没了?

将构造函数
cmybutton::cmybutton()
{
tipctrl.create(this);
tipctrl.addtool(this);
tipctrl.setdelaytime(ttdt_initial,   0);
tipctrl.settiptextcolor(rgb(255,0,0));
}
里的内容去掉
单独给cmybutton添加一个public方法:

cmybutton::sethint()
{
tipctrl.create(this);
tipctrl.addtool(this);
tipctrl.setdelaytime(ttdt_initial,   0);
tipctrl.settiptextcolor(rgb(255,0,0));
}

然后再在cmybutton所在的父对话框的initdlg中

m_mybutton.sethint();

由父对话框的initdlg来激发cmybutton创建tipctrl
发表于:2007-05-11 12:38:032楼 得分:0
谢谢,问题解决了,但是我先前也跟踪了,构造函数也是执行了啊?
发表于:2007-05-11 13:09:253楼 得分:0
定义ctooltipctrl   m_tooltip;
在窗口初始化中
m_tooltip.create(this);
m_tooltip.active(true);
m_tooltip.addtool(getdlgitem(yourbuttonid), "要显示的信息 ");

在对话框的pretranslatemessage消息映射中添加
m_tooltip.relayevent(pmsg);


快速检索

最新资讯
热门点击