Win SDK文档,函数说明如下,

CreateCursor

CreateCursor该函数创建一个指定大小、位模式和热点的光标。

函数原型:HCURSOR CreateCursor(HINSTANCE htnst,int xHotSpot;int yHotSpot;int nWidth;int nHeight,CONST VOID *pvANDPlane,CONST VOID *pvXORPlane);
参数说明
hlnst:创建光标的应用程序的当前实例句柄。
xHotSpot:指定光标热点的水平位置。
yHotSpot:指定光标热点的垂直位置。
nWidth:以像素为单位指定光标的宽度。
nHeight:以像素为单位指定光标的高度。
pvANDPlane:指向一个字节数组的指针,该数组包含光标AND掩码的位值,就象设备相关的单色位图一样。
pvXORPlane:指向一个字节数组的指针,该数组包含光标XOR掩码的位值,就象设备相关的单色位图一样。
返回值:如果成功,返回光标的值;如果失败,返回值为NULL(空),若想获得更多错误信息,调用GetLastError函数。
备注:nWidth和nHeight参数必须指定一个当前显示驱动支持的宽度和高度,因为系统不能创建一个其他尺寸的光标,为了确定显示驱动所支持的宽度和高度,请使用GetSystemMetrics函数,指定SM_CXCUROR或SM_CYCURSOR值。在一个应用程序关闭之前,必须调用DestroyCursor函数来释放与光标有关的任何系统资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。

功能是直接使用函数来创建光标;下面来看一下;

VC6新建一个单文档工程;添加一个菜单;在菜单单击处理函数中编写调用代码;

void CCurView::OnMenuitem32771()
{// TODO: Add your command handler code hereCString str1;int* pCursorBuffer = (int *)malloc(132*132*4);for (int i=0;i<132*132; i++){pCursorBuffer[i] = 0x80ff0000;}HCURSOR hcursor = CreateCursor(AfxGetInstanceHandle(), 0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),pCursorBuffer,pCursorBuffer);str1.Format("%0x",hcursor);AfxMessageBox(str1);SetCursor(hcursor);
}

如上代码段;尝试如下情况;

第一个参数,取NULL,或调用AfxGetInstanceHandle()返回当前应用程序实例句柄;

第2、3个参数是开始x、y坐标;

第4、5个参数,光标大小;输入固定数值,或者调用GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN) 返回系统支持的值;

第6、7个参数,根据说明是字节数组指针;内容为光标AND掩码、XOR掩码的位值;上面pCursorBuffer相关赋值代码来自网上,我还不清楚含义;或尝试此2参数直接输入NULL;

以上情况,程序均挂掉或无任何输出;

为了看是否创建成功,使用

str1.Format("%0x",hcursor);
    AfxMessageBox(str1);

来弹出返回句柄的值;均不会执行到此而弹出消息框;

关于第一个参数应用程序实例句柄,根据资料VC++有三种方法获取,

1.AfxGetInstanceHandle():用这个函数可以直接获得应用程序的实例句柄
2.theApp.m_hInstance:利用全局的实例对象theApp的成员变量m_hInstance来获得
3.AfxGetApp()->m_hInstance:利用AfxGetApp()获得当前应用程序实例的一个指针

主要是最后2个参数不知道如何定义;尝试随便定义2个字节数组,

byte buf1[]= {0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1};
byte buf2[]= {0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1};

数组指针赋给最后2个参数;结果还是一样;有时间再继续;

函数的MSDN说明在

CreateCursor | Microsoft Docs

调用Win32 API 之CreateCursor函数失败相关推荐

  1. c#调用win32 API函数修改系统时间

    一般来说,系统时间的修改可以通过win32 API函数库中的SetLocalTime函数进行设置.对于C#语言来说,虽然win32 API大部分函数都已经封装在了.NET Framework类库中,但 ...

  2. C# 获取笔记本电池信息 调用 Win32 Api

    C# 获取笔记本电池信息 获取电池信息需要调用Win32 Api 相关函数为 GetSystemPowerStatus 函数结构: BOOL GetSystemPowerStatus(LPSYSTEM ...

  3. php调用win32 api,C#_c#使用win32api实现获取光标位置,方法一:需要调用win32api,winfo - phpStudy...

    c#使用win32api实现获取光标位置 方法一:需要调用win32api,winform.wpf通用 [DllImport("user32.dll")] public stati ...

  4. C#调用Win32 api学习总结

    转载:https://blog.csdn.net/bcbobo21cn/article/details/50930221 从.NET平台调用Win32 API Win32 API可以直接控制Micro ...

  5. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...

  6. java 调用win32 api 学习总结

    java使用JInvoke调用windows API 使用jinvoke调用windowsAPI.jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样. 官网使用参考: ...

  7. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明

    使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明 分类: 小技巧 Win32编程 C++ 解决难题 .NET2009-02-05 20:53 5186人 ...

  8. C++调用win32 API操作打印机实现驱动打印

    方法说明: 1.s2w(string &content, int length):将string类型的变量转换为wchar_t*类型,用于调用TextOut()方法时传参,其中length为需 ...

  9. 控制台调用win32 API 示例二则

    一 控制台显示消息框 #include <stdio.h> #include <windows.h>int main(int argc, char* argv[]) {int ...

最新文章

  1. 天文学家搞医术,Science也挡不住
  2. 【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )
  3. UVA - 673 (括号的匹配)
  4. 基于py36的glob模块总结
  5. tomcat内存溢出,修改设置
  6. fastdfs-01-了解
  7. java scheduletask_spring中定时任务taskScheduler的详细介绍
  8. ssms 连接 ssis_SSIS连接管理器:OLE DB,ODBC,ADO.NET
  9. Mysql 存储过程实现订单流水号
  10. 扬州大学c语言上机作业答案,扬州大学C语言上机作业1-9整理
  11. 毕业设计之 ---- 基于JAVA WEB的网上购物系统的设计与实现
  12. Spurious wakeup
  13. Hibernate5使用c3p0一些小问题及注意
  14. VS2013新建项目出现脚本错误的解决办法
  15. 《孩子,你慢慢来》的读书笔记与读后感2600字
  16. 自媒体:公众号内容可以同步到头条吗
  17. 知道自己不知道不可怕,可怕的是不知道自己不知道 No.148
  18. linux netstat 命令
  19. wps html编辑表格,手机版wps如何编辑表格图解
  20. 排球制作html,3DMAX简单制作一个真实的排球效果图

热门文章

  1. 数据结构源码笔记(C语言):哈希表的相关运算算法
  2. LeetCode刷题中遇到的一些知识点
  3. Elasticsearch的或且非及其组合
  4. redis缓存的安装和使用
  5. Oracle数据库ORA-12516:“listener could not find available handler with matching protocol stack!“问题解决方法
  6. 【BLE】BLE中常用的UUID(标准)
  7. CTFshow 命令执行 web44
  8. 结构体作为参数的传递和返回
  9. 锐捷交换机清除mac-address-table(mac地址表)
  10. 爬取小说1--高并发