如何在BCB界面上不同控件上加载不同的自定义鼠标样式?

jaffy 2013-05-10 10:21:13
VC中有OnSetCursor的消息响应,里面可以设置不同的控件ID的鼠标样式。

BCB中我也设置了消息响应,但不知道消息中如何区分不同控件句柄,有人做过类似的功能吗?
VCL_MESSAGE_HANDLER(WM_SETCURSOR,TMessage,SetCursorResponse);

下面这两句,也是可以设置,不过似乎设置成了窗体全局的,不是控件局部的
HCURSOR cursor = LoadCursor(HInstance,"Cursor_1");
::SetCursor(cursor);

我也想过替换BCB自带的鼠标样式,似乎没有效果。

是不是只能用控件的Cursor赋值的属性,能否用API来完成啊?

...全文
101 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jaffy 2013-05-10
::GetCursorPos(&pt); HWND h = WindowFromPoint(pt); 哦,只针对有句柄的控件。 老妖的代码收藏了!多谢
  • 打赏
  • 举报
回复
我不懂电脑 2013-05-10
建议你看看这个 http://bbs.csdn.net/topics/40229622
  • 打赏
  • 举报
回复
ccrun.com 2013-05-10
截获WM_SETCURSOR消息,判断鼠标当前的位置下的控件,装载不同的光标。
void __fastcall TForm1::WndProc(TMessage &Msg)
{
    if (Msg.Msg == WM_SETCURSOR)
    {
        POINT pt;
        ::GetCursorPos(&pt);
        HWND h = WindowFromPoint(pt);
        if (h == Button2->Handle)
        {
            HCURSOR hCursor = LoadCursorFromFile("D:\\ccrun\\123.cur");
            ::SetCursor(hCursor);
            Msg.Result = true;

            return;
        }
    }

    TForm::WndProc(Msg);
}
  • 打赏
  • 举报
回复
jaffy 2013-05-10
to 老妖 哈哈,我发现一个更简单的办法: 用WinControl的MouseInClient属性就可以了,这样就不需要匹配句柄了。分享给大家 if (Panel2->MouseInClient) { HCURSOR hCursor = LoadCursorFromFile("D:\\2013work\\TestCur\\Debug\\cursor1.cur"); ::SetCursor(hCursor); Msg.Result = true;// .Result = true; } if(GroupBox1->MouseInClient) { HCURSOR hCursor = LoadCursorFromFile("D:\\2013work\\TestCur\\Debug\\cursor2.cur"); ::SetCursor(hCursor); Msg.Result = true;// .Result = true; }
  • 打赏
  • 举报
回复
jaffy 2013-05-10
啊,我知道了,原来是那个参数需要引用 MESSAGE void SetCursorResponse(TMessage &Msg); 好,现在完美了,结贴吧。
  • 打赏
  • 举报
回复
ccrun.com 2013-05-10
自己定义消息响应函数中?你需要设置消息的返回值为true呢。
  • 打赏
  • 举报
回复
jaffy 2013-05-10
TO:老妖 还有个问题,为什么我将代码放在自己定义消息响应函数中鼠标会闪烁 而放在全局的函数中则不会有这个问题。 我觉得这两种消息响应应该是一样的啊
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-05-10 10:21
社区公告
暂无公告