1# @ohos.multimodalInput.pointer (鼠标指针) 2 3鼠标指针管理模块,用于查询和设置鼠标指针相关属性。 4 5> **说明**: 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9## 导入模块 10 11```js 12import { pointer } from '@kit.InputKit'; 13``` 14 15## pointer.setPointerVisible 16 17setPointerVisible(visible: boolean, callback: AsyncCallback<void>): void 18 19设置鼠标指针显示或者隐藏,使用AsyncCallback异步方式返回结果。 20 21**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 22 23**参数**: 24 25| 参数名 | 类型 | 必填 | 说明 | 26| -------- | ------------------------- | ---- | ---------------------------------------- | 27| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 28| callback | AsyncCallback<void> | 是 | 回调函数。 | 29 30**错误码**: 31 32以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 33 34| 错误码ID | 错误信息 | 35| ---- | --------------------- | 36| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 37| 801 | Capability not supported. | 38 39**示例**: 40 41```js 42try { 43 pointer.setPointerVisible(true, (error: Error) => { 44 if (error) { 45 console.log(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 46 return; 47 } 48 console.log(`Set pointer visible success`); 49 }); 50} catch (error) { 51 console.log(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 52} 53``` 54 55## pointer.setPointerVisible 56 57setPointerVisible(visible: boolean): Promise<void> 58 59设置鼠标指针显示或者隐藏,使用Promise异步方式返回结果。 60 61**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 62 63**参数**: 64 65| 参数名 | 类型 | 必填 | 说明 | 66| ------- | ------- | ---- | ---------------------------------------- | 67| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 68 69**返回值**: 70 71| 参数 | 说明 | 72| ------------------- | ------------------- | 73| Promise<void> | Promise对象。 | 74 75**错误码**: 76 77以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 78 79| 错误码ID | 错误信息 | 80| ---- | --------------------- | 81| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 82| 801 | Capability not supported. | 83 84**示例**: 85 86```js 87try { 88 pointer.setPointerVisible(false).then(() => { 89 console.log(`Set pointer visible success`); 90 }); 91} catch (error) { 92 console.log(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 93} 94``` 95 96## pointer.setPointerVisibleSync<sup>10+</sup> 97 98setPointerVisibleSync(visible: boolean): void 99 100使用同步方式设置鼠标指针显示或者隐藏。 101 102**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 103 104**参数**: 105 106| 参数名 | 类型 | 必填 | 说明 | 107| ------- | ------- | ---- | ---------------------------------------- | 108| visible | boolean | 是 | 鼠标指针是否显示。true表示显示,false表示不显示。 | 109 110**错误码**: 111 112以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 113 114| 错误码ID | 错误信息 | 115| ---- | --------------------- | 116| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 117 118**示例**: 119 120```js 121try { 122 pointer.setPointerVisibleSync(false); 123 console.log(`Set pointer visible success`); 124} catch (error) { 125 console.log(`Set pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 126} 127``` 128 129## pointer.isPointerVisible 130 131isPointerVisible(callback: AsyncCallback<boolean>): void 132 133获取鼠标指针显示或隐藏状态,使用AsyncCallback异步方式返回结果。 134 135**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 136 137**参数**: 138 139| 参数名 | 类型 | 必填 | 说明 | 140| -------- | ---------------------------- | ---- | -------------- | 141| callback | AsyncCallback<boolean> | 是 | 回调函数,异步返回鼠标指针状态,true为显示,false为隐藏。 | 142 143**错误码**: 144 145以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 146 147| 错误码ID | 错误信息 | 148| ---- | --------------------- | 149| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 150 151**示例**: 152 153```js 154try { 155 pointer.isPointerVisible((error: Error, visible: boolean) => { 156 if (error) { 157 console.log(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 158 return; 159 } 160 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 161 }); 162} catch (error) { 163 console.log(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 164} 165``` 166 167## pointer.isPointerVisible 168 169isPointerVisible(): Promise<boolean> 170 171获取鼠标指针显示或隐藏状态,使用Promise异步方式返回结果。 172 173**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 174 175**返回值**: 176 177| 参数 | 说明 | 178| ---------------------- | ------------------- | 179| Promise<boolean> | Promise对象,异步返回鼠标指针显示或隐藏状态。true代表显示状态,false代表隐藏状态。 | 180 181**示例**: 182 183```js 184try { 185 pointer.isPointerVisible().then((visible: boolean) => { 186 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 187 }); 188} catch (error) { 189 console.log(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 190} 191``` 192 193## pointer.isPointerVisibleSync<sup>10+</sup> 194 195isPointerVisibleSync(): boolean 196 197使用同步方式获取鼠标指针显示或者隐藏。 198 199**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 200 201**返回值**: 202 203| 参数 | 说明 | 204| ---------------------- | ------------------- | 205| boolean | 返回鼠标指针显示或隐藏状态。true代表显示状态,false代表隐藏状态。 | 206 207**示例**: 208 209```js 210try { 211 let visible: boolean = pointer.isPointerVisibleSync(); 212 console.log(`Get pointer visible success, visible: ${JSON.stringify(visible)}`); 213} catch (error) { 214 console.log(`Get pointer visible failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 215} 216``` 217 218## pointer.getPointerStyle 219 220getPointerStyle(windowId: number, callback: AsyncCallback<PointerStyle>): void 221 222获取鼠标样式类型,使用AsyncCallback异步方式返回结果。 223 224**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 225 226**参数**: 227 228| 参数名 | 类型 | 必填 | 说明 | 229| -------- | ---------------------------------------- | ---- | -------------- | 230| windowId | number | 是 | 窗口id。 | 231| callback | AsyncCallback<[PointerStyle](#pointerstyle)> | 是 | 回调函数,异步返回鼠标样式类型。 | 232 233**错误码**: 234 235以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 236 237| 错误码ID | 错误信息 | 238| ---- | --------------------- | 239| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 240 241**示例**: 242 243```js 244import { BusinessError } from '@kit.BasicServicesKit'; 245import { window } from '@kit.ArkUI'; 246 247window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 248 if (error.code) { 249 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 250 return; 251 } 252 let windowId = win.getWindowProperties().id; 253 if (windowId < 0) { 254 console.log(`Invalid windowId`); 255 return; 256 } 257 try { 258 pointer.getPointerStyle(windowId, (error: Error, style: pointer.PointerStyle) => { 259 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 260 }); 261 } catch (error) { 262 console.log(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 263 } 264}); 265``` 266 267## pointer.getPointerStyle 268 269getPointerStyle(windowId: number): Promise<PointerStyle> 270 271获取鼠标样式类型,使用Promise异步方式返回结果。 272 273**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 274 275**参数**: 276 277| 参数名 | 类型 | 必填 | 说明 | 278| -------- | ------ | ---- | -------- | 279| windowId | number | 是 | 窗口id。 | 280 281**返回值**: 282 283| 参数 | 说明 | 284| ---------------------------------------- | ------------------- | 285| Promise<[PointerStyle](#pointerstyle)> | Promise实例,异步返回鼠标样式类型。 | 286 287**错误码**: 288 289以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 290 291| 错误码ID | 错误信息 | 292| ---- | --------------------- | 293| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 294 295**示例**: 296 297```js 298import { BusinessError } from '@kit.BasicServicesKit'; 299import { window } from '@kit.ArkUI'; 300 301window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 302 if (error.code) { 303 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 304 return; 305 } 306 let windowId = win.getWindowProperties().id; 307 if (windowId < 0) { 308 console.log(`Invalid windowId`); 309 return; 310 } 311 try { 312 pointer.getPointerStyle(windowId).then((style: pointer.PointerStyle) => { 313 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 314 }); 315 } catch (error) { 316 console.log(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 317 } 318}); 319``` 320 321## pointer.getPointerStyleSync<sup>10+</sup> 322 323getPointerStyleSync(windowId: number): PointerStyle 324 325使用同步方式获取鼠标样式类型。 326 327**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 328 329**参数**: 330 331| 参数名 | 类型 | 必填 | 说明 | 332| -------- | ------ | ---- | -------- | 333| windowId | number | 是 | 窗口id。<br>默认值为-1,表示获取全局的鼠标样式。 | 334 335**返回值**: 336 337| 参数 | 说明 | 338| ---------------------------------------- | ------------------- | 339| [PointerStyle](#pointerstyle) | 返回鼠标样式类型。 | 340 341**错误码**: 342 343以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 344 345| 错误码ID | 错误信息 | 346| ---- | --------------------- | 347| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 348 349**示例**: 350 351```js 352import { pointer } from '@kit.InputKit'; 353 354let windowId = -1; 355try { 356 let style: pointer.PointerStyle = pointer.getPointerStyleSync(windowId); 357 console.log(`Get pointer style success, style: ${JSON.stringify(style)}`); 358} catch (error) { 359 console.log(`Get pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 360} 361``` 362 363## pointer.setPointerStyle 364 365setPointerStyle(windowId: number, pointerStyle: PointerStyle, callback: AsyncCallback<void>): void 366 367设置鼠标样式类型,使用AsyncCallback异步方式返回结果。 368 369**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 370 371**参数**: 372 373| 参数名 | 类型 | 必填 | 说明 | 374| ------------ | ------------------------------ | ---- | ----------------------------------- | 375| windowId | number | 是 | 窗口id。 | 376| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 377| callback | AsyncCallback<void> | 是 | 回调函数。 | 378 379**错误码**: 380 381以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 382 383| 错误码ID | 错误信息 | 384| ---- | --------------------- | 385| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 386 387**示例**: 388 389```js 390import { BusinessError } from '@kit.BasicServicesKit'; 391import { window } from '@kit.ArkUI'; 392 393window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 394 if (error.code) { 395 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 396 return; 397 } 398 let windowId = win.getWindowProperties().id; 399 if (windowId < 0) { 400 console.log(`Invalid windowId`); 401 return; 402 } 403 try { 404 pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS, error => { 405 console.log(`Set pointer style success`); 406 }); 407 } catch (error) { 408 console.log(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 409 } 410}); 411``` 412## pointer.setPointerStyle 413 414setPointerStyle(windowId: number, pointerStyle: PointerStyle): Promise<void> 415 416设置鼠标样式类型,使用Promise异步方式返回结果。 417 418**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 419 420**参数**: 421 422| 参数名 | 类型 | 必填 | 说明 | 423| ------------------- | ------------------------------ | ---- | ---------------- | 424| windowId | number | 是 | 窗口id。 | 425| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 426 427**返回值**: 428 429| 参数 | 说明 | 430| ------------------- | ------------------- | 431| Promise<void> | Promise对象。 | 432 433**错误码**: 434 435以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 436 437| 错误码ID | 错误信息 | 438| ---- | --------------------- | 439| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 440 441**示例**: 442 443```js 444import { BusinessError } from '@kit.BasicServicesKit'; 445import { window } from '@kit.ArkUI'; 446 447window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 448 if (error.code) { 449 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 450 return; 451 } 452 let windowId = win.getWindowProperties().id; 453 if (windowId < 0) { 454 console.log(`Invalid windowId`); 455 return; 456 } 457 try { 458 pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS).then(() => { 459 console.log(`Set pointer style success`); 460 }); 461 } catch (error) { 462 console.log(`Set pointer style failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 463 } 464}); 465``` 466 467## pointer.setPointerStyleSync<sup>10+</sup> 468 469setPointerStyleSync(windowId: number, pointerStyle: PointerStyle): void 470 471使用同步方式设置鼠标样式类型。 472 473**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 474 475**参数**: 476 477| 参数名 | 类型 | 必填 | 说明 | 478| ------------------- | ------------------------------ | ---- | ---------------- | 479| windowId | number | 是 | 窗口id。 | 480| pointerStyle | [PointerStyle](#pointerstyle) | 是 | 鼠标样式。 | 481 482**错误码**: 483 484以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 485 486| 错误码ID | 错误信息 | 487| ---- | --------------------- | 488| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 489 490**示例**: 491```js 492import { BusinessError } from '@kit.BasicServicesKit'; 493import { window } from '@kit.ArkUI'; 494 495window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 496 if (error.code) { 497 console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(error)); 498 return; 499 } 500 let windowId = win.getWindowProperties().id; 501 if (windowId < 0) { 502 console.log(`Invalid windowId`); 503 return; 504 } 505 try { 506 pointer.setPointerStyleSync(windowId, pointer.PointerStyle.CROSS); 507 console.log(`Set pointer style success`); 508 } catch (error) { 509 console.log(`getPointerSize failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 510 } 511}); 512``` 513 514## PrimaryButton<sup>10+</sup> 515 516鼠标主键类型。 517 518**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 519 520| 名称 | 值 | 说明 | 521| -------------------------------- | ---- | ------ | 522| LEFT | 0 | 鼠标左键。 | 523| RIGHT | 1 | 鼠标右键。 | 524 525## RightClickType<sup>10+</sup> 526 527右键菜单触发方式。 528 529**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 530 531| 名称 | 值 | 说明 | 532| -------------------------------- | ---- | ------ | 533| TOUCHPAD_RIGHT_BUTTON | 1 |触控板右键区域。 | 534| TOUCHPAD_LEFT_BUTTON | 2 |触控板左键区域。 | 535| TOUCHPAD_TWO_FINGER_TAP | 3 |双指轻击或按压触控板。| 536 537## PointerStyle 538 539鼠标样式类型。 540 541**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 542 543| 名称 | 值 | 说明 |图示 | 544| -------------------------------- | ---- | ------ |------ | 545| DEFAULT | 0 | 默认 || 546| EAST | 1 | 向东箭头 || 547| WEST | 2 | 向西箭头 || 548| SOUTH | 3 | 向南箭头 || 549| NORTH | 4 | 向北箭头 || 550| WEST_EAST | 5 | 向西东箭头 || 551| NORTH_SOUTH | 6 | 向北南箭头 || 552| NORTH_EAST | 7 | 向东北箭头 || 553| NORTH_WEST | 8 | 向西北箭头 || 554| SOUTH_EAST | 9 | 向东南箭头 || 555| SOUTH_WEST | 10 | 向西南箭头 || 556| NORTH_EAST_SOUTH_WEST | 11 | 东北西南调整 || 557| NORTH_WEST_SOUTH_EAST | 12 | 西北东南调整 || 558| CROSS | 13 | 准确选择 || 559| CURSOR_COPY | 14 | 拷贝 || 560| CURSOR_FORBID | 15 | 不可用 || 561| COLOR_SUCKER | 16 | 滴管 || 562| HAND_GRABBING | 17 | 并拢的手 || 563| HAND_OPEN | 18 | 张开的手 || 564| HAND_POINTING | 19 | 手形指针 || 565| HELP | 20 | 帮助选择 || 566| MOVE | 21 | 移动 || 567| RESIZE_LEFT_RIGHT | 22 | 内部左右调整 || 568| RESIZE_UP_DOWN | 23 | 内部上下调整 || 569| SCREENSHOT_CHOOSE | 24 | 截图十字准星 || 570| SCREENSHOT_CURSOR | 25 | 截图 || 571| TEXT_CURSOR | 26 | 文本选择 || 572| ZOOM_IN | 27 | 放大 || 573| ZOOM_OUT | 28 | 缩小 || 574| MIDDLE_BTN_EAST | 29 | 向东滚动 || 575| MIDDLE_BTN_WEST | 30 | 向西滚动 || 576| MIDDLE_BTN_SOUTH | 31 | 向南滚动 |  | 577| MIDDLE_BTN_NORTH | 32 | 向北滚动 || 578| MIDDLE_BTN_NORTH_SOUTH | 33 | 向南北滚动 || 579| MIDDLE_BTN_NORTH_EAST | 34 | 向东北滚动 || 580| MIDDLE_BTN_NORTH_WEST | 35 | 向西北滚动 || 581| MIDDLE_BTN_SOUTH_EAST | 36 | 向东南滚动 || 582| MIDDLE_BTN_SOUTH_WEST | 37 | 向西南滚动 || 583| MIDDLE_BTN_NORTH_SOUTH_WEST_EAST | 38 | 四向锥形移动 || 584| HORIZONTAL_TEXT_CURSOR<sup>10+</sup> | 39 | 垂直文本选择 || 585| CURSOR_CROSS<sup>10+</sup> | 40 | 十字光标 || 586| CURSOR_CIRCLE<sup>10+</sup> | 41 | 圆形光标 || 587| LOADING<sup>10+</sup> | 42 | 正在载入动画光标 |<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 588| RUNNING<sup>10+</sup> | 43 | 后台运行中动画光标 |<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 589| MIDDLE_BTN_EAST_WEST<sup>18+</sup> | 44 | 向东西滚动 || 590 591## pointer.setCustomCursor<sup>11+</sup> 592 593setCustomCursor(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): Promise<void> 594 595设置自定义光标样式,使用Promise异步方式返回结果。 596 597**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 598 599**参数**: 600 601| 参数名 | 类型 | 必填 | 说明 | 602| ----- | ------ | ---- | ----------------------------------- | 603| windowId | number | 是 | 窗口id。 | 604| pixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 自定义光标资源。 | 605| focusX | number | 否 | 自定义光标焦点x,取值范围:大于等于0,默认为0。 | 606| focusY | number | 否 | 自定义光标焦点y,取值范围:大于等于0,默认为0。 | 607 608**返回值**: 609 610| 参数 | 说明 | 611| ------------------- | ---------------- | 612| Promise<void> | 无返回结果的Promise对象。 | 613 614**错误码**: 615 616以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 617 618| 错误码ID | 错误信息 | 619| ---- | --------------------- | 620| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 621 622**示例**: 623 624```js 625import { image } from '@kit.ImageKit'; 626import { BusinessError } from '@kit.BasicServicesKit'; 627import { window } from '@kit.ArkUI'; 628this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent($r("app.media.app_icon")).then((svgFileData) => { 629 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 630 let svgImagesource: image.ImageSource = image.createImageSource(svgBuffer); 631 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 632 svgImagesource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 633 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 634 let windowId = win.getWindowProperties().id; 635 try { 636 pointer.setCustomCursor(windowId, pixelMap).then(() => { 637 console.log(`setCustomCursor success`); 638 }); 639 } catch (error) { 640 console.log(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 641 } 642 }); 643 }); 644}); 645``` 646## CustomCursor<sup>15+</sup> 647 648自定义光标资源。 649 650**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 651| 名称 | 类型 | 可读 | 可写 | 说明 | 652| -------- | ------- | -------- | -------- | ------- | 653| pixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 否 | 否 | 自定义光标。最小限制为资源图本身的最小限制。最大限制为256 x 256px。 | 654| focusX | number | 否 | 是 | 自定义光标焦点的水平坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的宽度最大值,该参数缺省时默认为0。 | 655| focusY | number | 否 | 是 | 自定义光标焦点的垂直坐标。该坐标受自定义光标大小的限制。最小值为0,最大值为资源图的高度最大值,该参数缺省时默认为0。 | 656 657## CursorConfig<sup>15+</sup> 658 659自定义光标配置。 660 661**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 662 663| 名称 | 类型 | 可读 | 可写 | 说明 | 664| -------- | ------- | -------- | -------- | ------- | 665| followSystem | boolean | 否 | 否 | 是否根据系统设置调整光标大小。false表示使用自定义光标样式大小,true表示根据系统设置调整光标大小,可调整范围为:[光标资源图大小,256×256]。 | 666 667## pointer.setCustomCursor<sup>15+</sup> 668 669setCustomCursor(windowId: number, cursor: CustomCursor, config: CursorConfig): Promise<void> 670 671设置自定义光标样式,使用Promise异步回调。 672应用窗口布局改变、热区切换、页面跳转、光标移出再回到窗口、光标在窗口不同区域移动,以上场景可能导致光标切换回系统样式,需要开发者重新设置光标样式。 673 674**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 675 676**参数**: 677 678| 参数名 | 类型 | 必填 | 说明 | 679| -------- | -------- | -------- | -------- | 680| windowId | number | 是 | 窗口id。 | 681| cursor | [CustomCursor](js-apis-pointer.md#customcursor15) | 是 | 自定义光标资源。 | 682| config | [CursorConfig](js-apis-pointer.md#cursorconfig15) | 是 | 自定义光标配置,用于配置是否根据系统设置调整光标大小。如果CursorConfig中followSystem设置为true,则光标大小的可调整范围为:[光标资源图大小,256×256]。 | 683 684**返回值**: 685 686| 参数 | 说明 | 687| ------------------- | ---------------- | 688| Promise<void> | 无返回结果的Promise对象。 | 689 690**错误码**: 691 692以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[输入设备错误码](./errorcode-inputdevice.md)。 693 694| 错误码ID | 错误信息 | 695| ---- | --------------------- | 696| 401 | Parameter error. Possible causes: 1. Abnormal windowId parameter passed in. 2. Abnormal pixelMap parameter passed in; 3. Abnormal focusX parameter passed in.4. Abnormal focusY parameter passed in. | 697| 26500001 | Invalid windowId. | 698 699**示例**: 700 701```js 702import { image } from '@kit.ImageKit'; 703import { BusinessError } from '@kit.BasicServicesKit'; 704import { window } from '@kit.ArkUI'; 705this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent($r("app.media.app_icon")).then((svgFileData) => { 706 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 707 let svgImagesource: image.ImageSource = image.createImageSource(svgBuffer); 708 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 709 svgImagesource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 710 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 711 let windowId = win.getWindowProperties().id; 712 try { 713 pointer.setCustomCursor(windowId, {pixelMap: pixelMap, focusX: 25, focusY: 25}, {followSystem: false}).then(() => { 714 console.log(`setCustomCursor success`); 715 }); 716 } catch (error) { 717 console.log(`setCustomCursor failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 718 } 719 }); 720 }); 721}); 722``` 723 724## pointer.setCustomCursorSync<sup>11+</sup> 725 726setCustomCursorSync(windowId: number, pixelMap: image.PixelMap, focusX?: number, focusY?: number): void 727 728设置自定义光标样式,使用同步方式进行设置。 729 730**系统能力**:SystemCapability.MultimodalInput.Input.Pointer 731 732**参数**: 733 734| 参数名 | 类型 | 必填 | 说明 | 735| ----- | ------ | ---- | ----------------------------------- | 736| windowId | number | 是 | 窗口id。 | 737| pixelMap | [image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7) | 是 | 自定义光标资源。 | 738| focusX | number | 否 | 自定义光标焦点x,取值范围:大于等于0,默认为0。 | 739| focusY | number | 否 | 自定义光标焦点y,取值范围:大于等于0,默认为0。 | 740 741**错误码**: 742 743以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 744 745| 错误码ID | 错误信息 | 746| ---- | --------------------- | 747| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types; 3. Parameter verification failed. | 748 749**示例**: 750 751```js 752import { image } from '@kit.ImageKit'; 753import { BusinessError } from '@kit.BasicServicesKit'; 754import { window } from '@kit.ArkUI'; 755const svgFileData = this.getUIContext()?.getHostContext()?.resourceManager.getMediaContent($r("app.media.app_icon")).then((svgFileData) => { 756 const svgBuffer: ArrayBuffer = svgFileData.buffer.slice(0); 757 let svgImagesource: image.ImageSource = image.createImageSource(svgBuffer); 758 let svgDecodingOptions: image.DecodingOptions = {desiredSize: { width: 50, height:50 }}; 759 svgImagesource.createPixelMap(svgDecodingOptions).then((pixelMap) => { 760 window.getLastWindow(this.getUIContext().getHostContext(), (error: BusinessError, win: window.Window) => { 761 let windowId = win.getWindowProperties().id; 762 try { 763 pointer.setCustomCursorSync(windowId, pixelMap, 25, 25); 764 console.log(`setCustomCursorSync success`); 765 } catch (error) { 766 console.log(`setCustomCursorSync failed, error: ${JSON.stringify(error, [`code`, `message`])}`); 767 } 768 }); 769 }); 770}); 771```