- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在鼠标悬停在某个控件上时更改光标。我的光标为png。如何在C++中实现它?
我按照here所述尝试过
HCURSOR hcur;
hcur = ::LoadCursorFromFile("cursor.png");
::SetSystemCursor(hcur,OCR_NORMAL);
HINSTANCE hInst;
hInst = GetModuleHandle(NULL);
HCURSOR hCurs;
hCurs = LoadCursor(hInst, MAKEINTRESOURCE(2));
::SetSystemCursor(hCurs,OCR_NORMAL);
Error 2 error LNK2019: unresolved external symbol "extern "C" struct HICON__ * __stdcall LoadCursorW(struct HINSTANCE__ *,wchar_t const *)" (?LoadCursorW@@$$J18YGPAUHICON__@@PAUHINSTANCE__@@PB_W@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ) C:\Users\Diozz\Documents\Visual Studio 2013\Projects\Scroller\Scroller\main.obj
最佳答案
如果要在特定控件上更改光标,则需要处理该控件窗口的WM_SETCURSOR
消息。收到此消息后,您将调用SetCursor
函数来设置应显示的光标。此函数采用单个参数,即光标的句柄(HCURSOR
)。有关此背景的更多信息,您绝对应该阅读Raymond Chen的文章"What is the process by which the cursor gets set?"
在任何情况下,您都不会调用SetSystemCursor
函数。该功能为您提供了一种更改全局光标设置的方法-您知道,与在“鼠标”控制面板中更改的设置相同。如果她想自定义桌面,则由用户决定。应用程序应该不要管它了。如果要在应用程序中的控件上显示时髦的光标,那完全没问题,但是如果用时髦的光标替换系统范围的箭头光标,那是不可行的!
有了这种方式,我们就不必真正担心调用SetSystemCursor
的正确方法。因此,让我们看一下加载游标。您已经找到了LoadCursorFromFile
函数,的确,这个函数确实如其名称所示。您给它提供了一个CUR文件的路径,它直接将其作为游标加载,并向您传递了该游标的句柄(HCURSOR
)。但是,除了出于测试目的之外,您可能永远不会使用LoadCursorFromFile
。为什么?因为您不想与应用程序一起部署CUR文件。如果该文件被删除或不包括在内,您的应用程序将停止工作。
而是应将游标直接链接到应用程序的二进制文件中。幸运的是,Windows作为二进制资源的一部分提供了一种执行此操作的方法。如果您之前已经进行过任何Windows编程,那么您肯定已经看过资源文件。您可以在RC文件中添加游标资源,这相当于指定ICO文件的路径。然后由资源编译器执行其余操作,将光标直接嵌入到EXE中。完成此操作后,在运行时,您不再需要依赖脆弱的路径,只需调用LoadCursor
从资源中加载游标即可。 (给所有资源一个数字ID,该数字ID在名为Resource.h的头文件中定义。假设您的ID为IDC_FUNKY
。)
HINSTANCE hInstance = ::GetModuleHandle(NULL); // get a handle to the app's instance
HCURSOR hCursor = ::LoadCursor(hInstance, MAKEINTRESOURCE(IDC_FUNKY));
LoadCursor
也可以用于加载预定义的系统游标。为此,请为第一个参数传递
NULL
,因为您不是从应用程序的资源中加载它,而是从系统中加载它。例如,让我们加载帮助光标:
HCURSOR hCursorHelp = ::LoadCursor(NULL, IDC_HELP);
LoadCursor
函数的代码以从资源中加载光标,从而为您提供HCURSOR
。当您的应用程序首次启动时,在初始化例程中这样做是明智的。缓存返回的句柄,以便您可以在应用程序的整个生命周期中使用它。如果控件位于对话框中,则可以在WM_INITDIALOG
中执行此操作。 WM_SETCURSOR
消息。尽管您可以通过子类化来做到这一点,但是在大多数情况下,将代码放入父级的窗口过程中是最简单的:static HCURSOR hCursorFunky;
...
case WM_SETCURSOR:
{
// If we're the control that should get the cursor treatment...
if (static_cast<HWND>(wParam) == hwndYourControl)
{
::SetCursor(hCursorFunky);
return TRUE; // indicate we processed this message
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam); // do default handling
}
case WM_SETCURSOR:
{
if (static_cast<HWND>(wParam) == ::GetDlgItem(hWnd, IDC_YOURCONTROL))
{
::SetCursor(hCursorFunky);
::SetWindowLongPtr(hWnd, DWLP_MSGRESULT, TRUE);
return TRUE; // indicate we processed this message
}
return FALSE; // do default handling
}
kernel32.lib
,
user32.lib
和
gdi32.lib
。否则,链接器将无法找到您要调用的Windows API函数。
关于c++ - 当鼠标悬停在某个控件上时,如何设置自定义光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37886694/
我正在学习和使用 jQuery,并且想要显示某些元素的删除图标。 我有一个外部主 div,其中包含许多元素的包装器。在元素包装器内部,我想当用户将鼠标悬停在元素包装器上时显示删除图标,并在用户移出元素
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我从 Qt 开始,每当有人将鼠标悬停在 QPushButton 上时,我想将 QPushButton 设置为不同的图标。到目前为止,这是我的代码: #include QPushButton *but
我从 Qt 开始,我想在有人将鼠标悬停在 QPushButton 上时将其设置为不同的图标。到目前为止,这是我的代码: #include QPushButton *button = new QPus
我有以下代码... jQuery(function($) { var timer; $('.action-viewer').hide(); $('.task').on('mouseover
我有一张照片,当用户将鼠标悬停在它上面时,我会在照片顶部显示(使用绝对定位)2 个箭头,一个用于进入上一张照片,一个用于进入下一张照片。这是到目前为止的代码... $('a.large_product
$('li > a').hover( function(){ $(this).animate({ backgroundColor: '#2a639a', color: '#fff'
我有一个悬停事件附加到几个链接,当您点击它时,会出现一个框。 有没有一种方法可以让悬停事件仅在鼠标悬停在链接上超过 500 毫秒时触发?因此,目前只要鼠标移到链接上,就会出现该框,但我希望只有当鼠标悬
我正在创建包含各种样式控件的演示应用程序。它允许我快速预览更改。 我的问题是下面的代码不起作用: Pressed button 它表示 IsPressed 的 setter 受到保护。我明白了,但我需
我正在尝试使用 js 并创建带有一些“信息文本”的“描述框” HTML google JS function info() {} 我不知道是哪个代码用一些文本创建了所谓的“描
我有一个 Accordion 风格的菜单,在悬停状态下工作正常,但我想改为点击... $(document).ready(function(){ $('#nav > li').hover(
我正在使用 Chartjs v.1.0.2 并尝试将点设置为仅在悬停在当前点上时出现。同样的问题是当我使用悬停或鼠标悬停时。可以使用 getPointsAtEvent(e); 找到当前点,但它仅在我将
我使用foreach 语句访问IEnumerable 的所有元素并将其呈现在详细信息页面中。我想让每个元素的悬停属性只影响一个元素。所以我使用 jQuery 单独影响每个元素 但是当我运行代码并将鼠标
首先提前感谢您的帮助。 案例:我在一行中有多个 div。这些 div 位于一个框中,我可以在此框中水平滚动以查看其他 div。我制作了两个按钮(L 表示左侧,R 表示右侧),以便在悬停或单击这些按钮时
我正在创建一个应用外观页面。 我希望在鼠标悬停时打开底部菜单上的其中一个按钮。 这感觉像是一项简单的任务,但我所做的一切似乎都不起作用。我错过了什么,我做了很多研究,但似乎找不到解决方案。 我尝试使用
我遇到的问题是,当您将鼠标悬停在按钮上时,只有按钮的某些部分会触发悬停/可点击状态,而不是所有实际 block 。有什么想法吗? 这是使用它的站点:http://www.revival.tv/turn
我有一位客户想要在他们的网站上实现特定功能,但我有点困惑如何做到这一点。 基本上,如果你查看他们的 existing site您可以看到 4 个圆形按钮。 他们想要的是,当有人将鼠标悬停(或单击,如果
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以
我目前正在编写我的第一个响应式网站(总的来说我是一个初学者)并且我遇到了很多障碍。其中之一是我的菜单有问题。我会尽量具体。我有一个用于桌面的水平菜单和一个用于平板电脑/手机的垂直菜单。我不知道如何解决
我正在为网站创建菜单。我正试图在链接上实现悬停 和点击 效果。我希望列表元素 a 上的悬停事件触发彩色动画并添加“事件”类。如果触发了点击和悬停事件,我想为该元素分配相同的类。问题是,一旦元素未悬停并
我是一名优秀的程序员,十分优秀!