首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

控件消息处理中Hint的有关问题

2012-03-07 
控件消息处理中Hint的问题做界面写了一个类是一个图片的BUTTON主要是是这些class CImageButton{public:CIm

控件消息处理中Hint的问题
做界面写了一个类 是一个图片的BUTTON
主要是是这些
class CImageButton
{
  public:
  CImageButton();
  ~CImageButton();
  void Init(TWinControl* ParentForm,String pictureFile,int imageButtonLeft,int imageButtonTop,int imageButtonHeight,int imageButtonWidth);
  void SetOnClick(void __fastcall (__closure* onMouseDown)(TObject *Sender) ){Panel->OnClick = onMouseDown; };
  private:
  void __fastcall Proc(TMessage &message);
  void __fastcall MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y) ;
  void __fastcall MouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y) ;

  public:
  int Left;
  int Top;
  int Height;
  int Width;

  TImage* Image;
  TPanel* Panel;
};
用了2个控件Image Panel
现在控件做好了,外部调用后 我想给添加他的Hint
但是Hint无法显示出来
调试了一阵 问题基本出现在这里
void __fastcall CImageButton::Proc(TMessage &message)
{

  if (message.Msg == CM_MOUSEENTER)
  {
  this->Panel->BevelOuter = bvRaised;
  }
  if (message.Msg == CM_MOUSELEAVE)
  {
  this->Panel->BevelOuter = bvNone;
  }
  this->Panel->Dispatch(&message);
}
这个函数里面有问题
如果类里去掉这个函数Hint就可以正常显示
但是必须要用的 CM_MOUSEENTER CM_MOUSELEAVE
使用了MSG消息处理 
Hint无法显示  
怎么解决

还尝试了自己用其他控件做个一个Hint 封装到类里
比如用Label做了一个 但是Label不能保持始终显示在最上面
会被其他控件遮挡,求各位大大教育

[解决办法]
没有做过,不过看了一下源码里面Hint的实现还是相当的麻烦的,你是不是可以继承TImage他的Hint试试
[解决办法]
这样做Hint思路错了,建议从TGraphicControl继承做一个CImageButton,然后直接利用控件的Hint属性,如果要修改Hint窗口的样式,参考vcl的THintWindow.

热点排行