c - 如何更改按钮上的光标?

标签 c windows winapi user-interface button

static HWND btn;
HCURSOR cursor = LoadCursor(0, IDC_CROSS);

case WM_CREATE:
    btn = CreateWindow(TEXT("BUTTON"), TEXT("Press Me"),
                       WS_CHILD|WS_VISIBLE, 50, 50, 80, 30,
                       hwnd, (HMENU) 111, NULL, NULL);

现在,在 WM_COMMAND 中,我尝试使用:

SendMessage(btn, WM_SETCURSOR, 0, (LPARAM) cursor);

这是行不通的。

那么如何在点击按钮后改变鼠标的光标呢?另外,当鼠标悬停在按钮上时如何更改鼠标光标(就像在网络浏览器中将鼠标悬停在链接上时它会变成一只手一样)?

最佳答案

使用此代码更改单个控件的光标:

SetClassLong(btn, GCL_HCURSOR, (LONG)cursor);

为实现 64 位兼容性,首选方法是:

SetClassLongPtr(btn, GCL_HCURSOR, (LONG_PTR)cursor);

请注意,这不会仅为指定的 btn 窗口更改图标,但对于具有相同类的所有窗口,您必须首先使用 RegisterClass() 注册一个自定义类名,然后在创建btn时在WNDCLASS.lpszClassName结构体中使用。

同样,这将适用于具有该(自定义)类的所有 Windows。要更改单个特定窗口的光标,您需要对其进行子类化,管理 WM_SETCURSOR 消息,如果(例如)lParamHTCLIENT(指针进入窗口客户区)然后调用 SetCursor() 来设置你想要的光标(在这种情况下不要忘记返回 TRUE)。当然,这可能是暂时的(使用 GWLP_WNDPROC 调用 SetWindowLongPtr())。

关于c - 如何更改按钮上的光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10277966/

相关文章:

c - 在一个 charArray 中发送大量值

c - 如何正确释放GDI资源?

c++ - 响应 EN_UPDATE 消息时避免递归

c - 如何创建仅指向字符串第一个字母的指针

c - -fno-builtin 到底在做什么?

c++ - 检测进程是否仍在运行

windows - Windows 中的 MSYS 主文件夹

asp.net - Web 服务器上的计划任务 - 性能

c# - WM_SIZING 上的 GetClientRect 给出了错误的大小

python - 我的 Ubuntu 系统上有 Python,但 gcc 找不到 Python.h