如何在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来完成啊?

...全文
146 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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:老妖 还有个问题,为什么我将代码放在自己定义消息响应函数中鼠标会闪烁 而放在全局的函数中则不会有这个问题。 我觉得这两种消息响应应该是一样的啊

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧