控件消息处理中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.